문자와 혼합된 숫자만 인식하도록 tesseract를 만드는 방법은 무엇입니까?
tesseract
숫자만 인식하는 데 사용하고 싶습니다 . 문제는 숫자와 문자가 혼합되어 있고 SetVariable("tessedit_char_whitelist", "0123456789")
모든 기호에 사용할 때 tesseract가 잘못된 숫자를 반환 한다는 것 입니다.
tesseract
유사성이 낮은 기호 를 생략 하도록 임계값을 설정할 수 있습니까 ?
참고: tesseract
O와 0 사이에 혼동이 없도록 숫자만 인식하도록 설정 했습니다.
숫자만 인식하는 것은 실제로 tesseract FAQ 페이지에서 답변 됩니다. 자세한 내용은 해당 페이지를 참조하십시오. 그러나 버전 3 패키지가 있는 경우 구성 파일이 이미 설정되어 있습니다. 명령줄에서 다음을 지정하기만 하면 됩니다.
tesseract image.tif outputbase nobatch digits
임계 값에 관해서는 무엇을 의미하는지 잘 모르겠습니다. 입력이 특이한 글꼴인 경우 입력 샘플을 사용하여 재학습할 수 있습니다. 대안은 tesseract의 가지치기 임계값을 변경하는 것입니다. 두 옵션 모두 FAQ에도 언급되어 있습니다.
tesseract 3의 경우 FAQtesseract imagename outputbase digits
에 따르면 명령이 더 간단 합니다. 그러나 그것은 나를 위해 잘 작동하지 않습니다.
나는 다른 psm
옵션 을 시도 -psm 6
하고 내 경우에 가장 적합한 방법을 찾습니다 .
man tesseract
자세한 내용은.
tesseract 3의 경우 FAQ에 따라 구성 파일을 만들려고 합니다.
Init 함수를 호출하거나 이것을 다음과 같은 텍스트 파일에 저장하기 전에 tessdata/configs/digits
:
tessedit_char_whitelist 0123456789
그런 다음 다음 명령을 사용하여 작동합니다. tesseract imagename outputbase digits
0-9를 일치시키고 싶다면
tesseract myimage.png stdout -c tessedit_char_whitelist=0123456789
또는 0-9와 거의 일치하지만 하나 이상의 다른 문자가 있는 경우
tesseract myimage.png stdout -c tessedit_char_whitelist=01234ABCDE
나는 그것을 조금 다르게 만들었습니다 (tess-2로). 누군가에게는 유용할 수도 있습니다.
따라서 먼저 API를 초기화해야 합니다.
TessBaseAPI baseApi = new TessBaseAPI();
baseApi.init(datapath, language, ocrEngineMode);
그런 다음 다음 변수를 설정하십시오.
baseApi.setPageSegMode(TessBaseAPI.PageSegMode.PSM_SINGLE_LINE);
baseApi.setVariable(TessBaseAPI.VAR_CHAR_BLACKLIST, "!?@#$%&*()<>_-+=/:;'\"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz");
baseApi.setVariable(TessBaseAPI.VAR_CHAR_WHITELIST, ".,0123456789");
baseApi.setVariable("classify_bln_numeric_mode", "1");
이런 식으로 엔진은 숫자만 확인합니다.
tesseract에 숫자만 사용하도록 지시할 수 있으며, 이것이 충분히 정확하지 않은 경우 더 나은 결과를 얻을 수 있는 가장 좋은 기회는 훈련 과정을 거치는 것입니다. http://www.resolveradiologic.com/blog/2013/01/15/training- 테서랙트/
이 기능은 버전 4에서 지원되지 않습니다. 이전 모델로 되돌아가는 "--oem 0"과 함께 -c tessedit_char_whitelist=0123456789를 통해 계속 사용할 수 있습니다.
가능한 해결 방법:
내가 하는 일은 다 인식하고 텍스트가 있을 때 숫자를 제외한 모든 문자를 꺼냅니다.
//This replaces all except numbers from 0 to 9
recognizedText = recognizedText.replaceAll("[^0-9]+", " ");
이것은 나를 위해 꽤 잘 작동합니다.
ReferenceURL : https://stackoverflow.com/questions/4944830/how-to-make-tesseract-to-recognize-only-numbers-when-they-are-mixed-with-letter
'IT이야기' 카테고리의 다른 글
다국어 데이터를 보관하기 위한 최적의 데이터베이스 구조 (0) | 2021.10.09 |
---|---|
C#에서 익명 개체의 속성 반복 (0) | 2021.10.09 |
Android에서 카메라 손전등 사용 (0) | 2021.10.09 |
Android webview에서 키보드 아래에 숨겨진 텍스트 상자 (0) | 2021.10.09 |
SqlAlchemy로 upsert를 수행하는 방법 (0) | 2021.10.08 |