본문 바로가기

분류 전체보기

(11)
[C++] tesseract 5.3.1 GetUTF8Text() crash(비정상 종료 버그) 약 10만개의 이미지 파일을 대상으로 텍스트변환을 하는 도중 GetUTF8Text() 함수에서 프로그램이 죽는 문제가 발생하였다. 처음에는 8개의 스레드로 텍스트변환 작업을 하다보니 랜덤한 이미지에서 발생하는 버그인줄 알았다. 그러나 프로그램 crash 발생 시간이 동작 후 약 19시간만에 발생한다는 특징을 발견하였고 결국 특정이미지에서 발생한다는 것을 알게되었다. 아쉽게도 해당 이미지는 내용상 공개가 불가하다. 다만 tesseract의 crash를 피하는 방법을 작성하고자 한다.(근본적인 해결방법은 아니다) 주석으로 modified 라고 처리된 부분이 수정해야할 곳이다. important라고 써넣은곳은 확실히 그 부분에서 오류가 발생한 곳이다. 1. elist.cpp 파일을 아래와 같이 수정 //eli..
[C++] tesseract 5.3.1 vs2022 컴파일(compile) 1. 필요한 프로그램 다운로드 및 설치 - CMake 다운로드 https://cmake.org/download/ - leptonica 다운로드 https://github.com/danbloomberg/leptonica - tesseract 다운로드 https://github.com/tesseract-ocr/tesseract 2. leptonica 컴파일 - CMake 설정(아래 이미지 참조) : Configure->SW_BUILD 체크해제->Configure 한번 더->Generate->Open Project 순서로 진행한다. - Visual studio 속성 Code Generation 설정 : 보통은 Debug 일때 Runtime Library를 MTd, Release 일때 MT로 한다. 단 이것은 ..
문자열이 UTF8 인지 확인 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 //문자열이 utf8이면 true, 아니면 false bool IsUtf8(const char* pszData) { int str_bytes = 0; if (pszData == NULL) { return false; } str_bytes = strlen(pszData); bool isUtf8(true); int index = 0; while (index = str_bytes) { isUtf8 = false; } else if ((..