IT이야기

문자와 혼합된 숫자만 인식하도록 tesseract를 만드는 방법

cyworld 2021. 10. 9. 14:39
반응형

문자와 혼합된 숫자만 인식하도록 tesseract를 만드는 방법은 무엇입니까?


tesseract숫자만 인식하는 데 사용하고 싶습니다 . 문제는 숫자와 문자가 혼합되어 있고 SetVariable("tessedit_char_whitelist", "0123456789")
모든 기호에 사용할 때 tesseract가 잘못된 숫자를 반환 한다는 것 입니다.

tesseract유사성이 낮은 기호 생략 하도록 임계값을 설정할 수 있습니까 ?

참고: tesseractO와 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를 통해 계속 사용할 수 있습니다.

이 문제를 해결하기 위한 현상금이 있습니다.

가능한 해결 방법:

@amitdo가 말한 대로


내가 하는 일은 다 인식하고 텍스트가 있을 때 숫자를 제외한 모든 문자를 꺼냅니다.

//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

반응형