저는 opencv와 Python을 처음 접합니다. 나는 연구 문제를 해결하기 위해 온라인에서 찾은 코드를 하나로 묶으려고 했습니다. 나는 수백 페이지로 구성된 1870년의 아랍어 일기를 가지고 있습니다. 각 페이지에는 두 개의 열이 있고 두꺼운 검은색 테두리가 있습니다. 머리글과 바닥글을 무시하면서 개별적으로 ocr을 실행할 수 있도록 두 개의 열을 이미지 파일로 추출하고 싶습니다. 다음은 예시 페이지입니다:
3페이지
원본 인쇄물 10페이지가 별도의 png 파일로 있습니다. 나는 각각을 처리하기 위해 다음 스크립트를 작성했습니다. 10페이지 중 2페이지에서는 예상대로 작동하지만 다른 8페이지에서는 열을 생성하지 못합니다. 이러한 값을 어디에 사용할 수 있는지 알 만큼 모든 기능을 잘 이해하지 못하거나 전체 접근 방식이 잘못된 경우 - 배우는 가장 좋은 방법은 커뮤니티에 이 문제를 어떻게 해결할 것인지 물어보는 것입니다.
으아악튜토리얼에 따라 저는 큰 흰색 영역으로 다양한 직사각형 영역을 식별할 수 있도록 흐릿하고 확장된 이진 반전을 만들었습니다. 또한 각 확장 버전의 사본을 저장하여 어떻게 생겼는지 확인했습니다. 처리 후 위 페이지는 다음과 같습니다.
3페이지가 확대되었습니다
"for c in cnts" 루프는 이미지에서 큰 직사각형 영역을 찾아야 합니다. 가로 세로 비율이 2.5보다 작으면 전체 페이지가 표시됩니다(머리글과 바닥글 없이 잘 작동함). 가로 세로 비율이 이보다 크면 열임을 알고 이를 저장합니다(예: temp/ p2-col2.png
).머리글과 바닥글이 없는 멋진 전체 페이지가 있습니다. 즉, 큰 검은색 테두리만 있고 열로 잘리지 않은 페이지가 있습니다. 10페이지 중 2페이지에서 내가 원하는 것을 얻었습니다.
2페이지의 성공 칼럼
원하는 결과가 나올 때가 있기 때문에 뭔가 효과가 있는 것 같은데, 어떻게 하면 더 개선할 수 있을지 모르겠습니다.
편집자:
여기에 더 많은 페이지 예가 있습니다:
p0
p1
p5
가운데 선만 "구분선"으로 사용해도 되는지 보고 싶어서 확장 없이 시도해 보았습니다. 코드는 다음과 같습니다.
으아악종횡비에 대한 어설션을 사용하지 않으므로 이 작업은 여전히 수행해야 할 작업일 수 있습니다..
기본적으로 이 방법에서 가장 중요한 선은 x 좌표를 기준으로 왼쪽 및 오른쪽 윤곽선을 생성하는 것입니다. 이것이 제가 얻은 최종 결과입니다:
가장자리에 검은 부분이 아직 남아있지만 OCR에는 문제가 되지 않습니다.
참고: 저는 jupyter에서 다음 패키지를 사용합니다:
으아악v2.0: 대형 상자 감지만 사용하여 구현:
그래서 좀 확장했더니 큰 상자가 쉽게 감지되었습니다. 나는 큰 상자의 수직선이 항상 감지될 수 있을 만큼 두꺼워지도록 수평 커널을 사용합니다. 하지만 가운데 선이 너무 얇아서 문제를 해결할 수 없습니다... 그럼에도 불구하고 위 방법에 대한 코드는 다음과 같습니다.
으아악이러한 결과는 완벽하지 않다는 것을 알 수 있지만 대상이 OCR이므로 문제가 되지 않습니다.
이 방법이 효과가 있는지 알려주세요. 그렇지 않다면 더 나은 해결책을 찾기 위해 열심히 노력하겠습니다...
v3.0: 보다 직선적인 이미지를 얻을 수 있는 더 나은 방법으로 OCR 품질이 향상됩니다.
여기 내 다른 답변에서 영감을 얻었습니다: 답변. OCR의 결과가 더 좋도록 이미지를 곧게 펴는 것이 좋습니다. 따라서 감지된 외부 프레임에 4점 변환을 사용했습니다. 이렇게 하면 이미지가 약간 직선화되고 텍스트가 더 수평이 됩니다. 코드는 다음과 같습니다.
으아악다음 패키지가 있습니다:
으아악코드에서 볼 수 있듯이 이것이 더 나은 접근 방식입니다. 4점 변환 덕분에 이미지를 중앙에 수평으로 배치할 수 있습니다. 게다가 이미지가 잘 분리되어 있기 때문에 일부 겹치는 부분을 포함할 필요가 없습니다. 참고할 수 있는 예는 다음과 같습니다.
위 내용은 OpenCV: 아랍어 저널에서 열 찾기(Python)의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!