한글을 인식하는 OCR 라이브러리중에서는 네이버클로버 API가 가장 인식률이좋고, 영수증 전용템플릿이 있다고 한다. 물론 가격은 다른 OCR 라이브러리에 비해서는 비싼편인듯
기본 OCR이 월 무료 100건, 영수증 OCR은 무조건 유료
OCR 라이브러리별 비교 (네이버 클로버, 테서랙트, EasyOCR, 카카오 PORORO)
https://velog.io/@sionshin/OCR-%EC%B0%BE%EC%95%84-%EC%82%BC%EB%A7%8C%EB%A6%AC
해당 포스팅에 사용된 스틱코드
stickode.com/detail.html?no=2177
# 환경 세팅
1. 라이브러리 추가
tess-two 추가
▶ 해당 기능을 사용하기 위해서는 tess-two라는 모듈이 필요합니다. 위 그림처럼 build.gaddle(moudle) 파일을 열어서 맨 아래 한 줄을 추가하고 동기화시켜줍니다. 최신 버전은 여기서 확인하실 수 있습니다.
2. Language Data 추가
Language Data 추가
▶ 인식할 언어 데이터도 추가해줍니다. 영어와 한글을 인식해서 텍스트로 옮기기 위해 두 가지 언어 데이터를 추가해줬습니다. 언어 데이터는 여기에서 다운로드할 수 있습니다.
assets 폴더가 없으신 분들은 [우클릭] -> [New] -> [Forder] -> [Asset Folder]를 만드시면 됩니다.
Asset Folder 추가
3. 샘플 이미지 추가
샘플 이미지 추가
▶ 영어와 한글을 각각 테스트해보기 위해 샘플 이미지를 준비했습니다.
# 레이아웃 그리기
activity_main.xml
▶ 분석할 이미지를 띄워주는 화면과 OCR을 동작시키는 버튼, 그리고 결과를 출력하는 화면을 만들어 줍니다. 아래는 레이아웃 전체 소스입니다.
activity_main.xml
<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context=".MainActivity">
<ImageView
android:id="@+id/sample_image"
android:layout_width="0dp"
android:layout_height="0dp"
app:layout_constraintBottom_toTopOf="@+id/ocr_start_button"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent"
app:srcCompat="@drawable/sample_kor" />
<Button
android:id="@+id/ocr_start_button"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:text="OCR START"
app:layout_constraintBottom_toTopOf="@+id/ocr_result_view"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@+id/sample_image" />
<TextView
android:id="@+id/ocr_result_view"
android:layout_width="0dp"
android:layout_height="0dp"
android:text="OCR 결과 출력"
android:padding="5dp"
android:textSize="16sp"
android:textColor="@color/black"
android:textStyle="bold"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@+id/ocr_start_button" />
</androidx.constraintlayout.widget.ConstraintLayout>
# OCR 기능 구현
MainActivity.kt
lateinit var tess: TessBaseAPI //Tesseract API 객체 생성
var dataPath: String = "" //데이터 경로 변수 선언
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
dataPath = "$filesDir/tesseract/" //언어데이터의 경로 미리 지정
checkFile(File(dataPath+"tessdata/"),"kor") //사용할 언어파일의 이름 지정
checkFile(File(dataPath+"tessdata/"),"eng")
val lang : String = "kor+eng"
tess = TessBaseAPI() //api준비
tess.init(dataPath,lang) //해당 사용할 언어데이터로 초기화
// OCR 동작 버튼
ocr_start_button.setOnClickListener {
processImage(BitmapFactory.decodeResource(resources,R.drawable.sample_kor)) //이미지 가공후 텍스트뷰에 띄우기
}
}
}
▶ 필요한 샘플 이미지 파일과 언어 데이터를 OCR 모듈에 세팅해줍니다. 그리고 MainActivity 아래쪽에 스틱코드를 이용해서 OCR 동작 기능을 추가해줍니다.
StickCode - CopyFile
▶ 스틱코드를 사용해 언어 데이터 파일을 체크하고 복사하는 기능을 불러와 줍니다.
StickCode - ProcessImage
▶ 스틱코드를 사용해 이미지에서 텍스트를 추출(OCR)해 결과뷰에 보여주는 기능을 불러와주고 결과뷰와 연결시켜 줍니다. 이제 기능 구현은 끝났습니다. 마지막으로 테스트를 해보겠습니다.
1. 영문
2. 한글
▶ 한글의 경우 정확도가 아쉬웠지만, 영어 / 한글 모두 정상적으로 동작하는 걸 확인할 수 있었습니다.
출처 : https://stickode.tistory.com/146
'프로그래밍 > Kotlin' 카테고리의 다른 글
[Kotlin] Sealed Class (0) | 2024.08.20 |
---|---|
[Kotlin] Async vs Launch (Deffered vs Job) (0) | 2023.01.12 |
[Kotlin] 숫자 랜덤으로 출력 (0) | 2022.12.29 |
[Kotlin] ProgressBar 코드로 구현 (0) | 2022.12.15 |
[Kotlin] Java -> Kotlin Converting후 CustomDialog를 열때 Nullpointer Exception (0) | 2022.12.05 |
댓글