Android의 OCR 라이브러리tess-two(실습 편 1)

5549 단어 AndroidOCR

의 목적


tess-two를 사용하여 실제 텍스트 검사를 진행합니다.참고Making a Simple OCR Android App using Tesseract.
실험 중에는 카메라를 사용할 필요가 없기 때문에 수중에 있는 책의 이미지를 미리 찍어 왼쪽 상단에 있는 ISBN 코드를 읽어 보았다.

프로젝트 준비

  • 마법사를 사용하여 빈 프로젝트를 만듭니다.
  • tess-two를 의존 관계에 추가합니다.
  • Java Build Path에서tess-two.jar 추가
    ※ 이번 샘플은 공유 라이브러리 사본이 필요 없습니다.언제 필요할지 몰라
  • eng.traineddata를assets
  • 에 추가
    sample.assets에 jpg로 추가
  • Manifest WRITEEXTERNAL_STORAGE 권한 추가
  • 그리고 MainActivity.자바를 쓰다.귀찮아서 UI에 아무것도 안 보내요.결과는 LogCat로 내보내기만 합니다.
    https://gist.github.com/Nunocky/5d43d0ec4b2270927446

    해설


    한정된 사용이라면 정말 간단해요.
  • 이미지 준비
  • TessBaseAPI 인스턴스 생성
  • 지정 이미지
  • 조사 범위 지정
  • 텍스트 가져오기
  • 그거 진행 중인 건 MainActivity의 onResume입니다.
    MainActivity.java
    AssetManager assetManager = getResources().getAssets();
    
    InputStream is = assetManager.open(TARGET_IMAGE);
    Bitmap bitmap = BitmapFactory.decodeStream(is);
    bitmap = bitmap.copy(Bitmap.Config.ARGB_8888, true);
    
    TessBaseAPI baseApi = new TessBaseAPI();
    baseApi.init(EXSTORAGE_PATH, "eng"); 
    baseApi.setImage(bitmap);
    baseApi.setRectangle(56, 81, 230, 22);
    String recognizedText = baseApi.getUTF8Text();
    baseApi.end();
    
    Log.d(TAG, "Recognized: " + recognizedText);
    
    그게 다야.
    setRectangle이 지정한 범위를 GIMP로 적절히 조사했습니다.

    baseApi.init에서trained 데이터를 지정할 때 assets를 직접 지정할 수 없기 때문에 onCreate로 외부 저장 장치 (pr pareTrained File IfNotExist 방법) 로 복사합니다.멋있지는 않지만 일단 이렇게 하면 돼.
    또한, "traineddata는tessdata 아래에 놓여 있다", "init에 전달된 디렉터리는tessdata의 한 위에 지정된다"는 규칙이 있다.traineddata를tessdata 이외의 곳에 두어도 다음과 같은 Exception이 발생한다.
    java.lang.IllegalArgumentException: Data path must contain subfolder tessdata!
    ※ javadoc로 적혀 있다. 조금만 더 가늘게 적으면 init에 건네주는 목록은 빗장으로 끝난다.그래서 엑스토라지.PATH는 이렇게 쓰지만 사선을 쓰지 않아도 아무런 영향이 없다.도서관 쪽에서 보충했나봐요.

    실행



    Jolly Good.

    다음은요?


    각양각색의 의문이 있다.
  • 여러 텍스트를 동시에 검사할 수 있습니까?스트링이랑 렉탱이 세트 같은 걸 얻었다고요?
  • 책을 한 번에 스캔해서 전체를 열 수 있습니까?
  • 사용해 보면 알겠지만 초기화 등은 상당히 무거운 처리이기 때문에 다선정화가 좋다.이상적인 구성은?
  • 세로쓰기에 대응하는?→API 참조로 보면 가능할 것 같다
  • 잠깐만요.

    좋은 웹페이지 즐겨찾기