일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- TypeScript
- Queue
- jest
- MongoDB
- GIT
- class
- MySQL
- dfs
- Sequelize
- cookie
- typeORM
- react
- JavaScript
- mongoose
- Dinosaur
- 자료구조
- OCR
- game
- Python
- AWS
- 정렬
- 게임
- nodejs
- Nest.js
- Express
- flask
- Bull
- nestjs
- 공룡게임
- Today
- Total
포시코딩
디아블로4 경매 사이트 만들기 (7) - OpenCV.js Thresholding (끝) 본문
개요
이전 포스팅에서 잘라낸 이미지를 Tesseract로 인식하기 전에 좀 더 정확한 결과물을 얻고자 전처리를 하려 한다.
찾아보니 보통
원본 -> Grayscale(그레이스케일) -> Binary(이진화) 과정을 거치는데
그레이스케일 과정은 이미 해봤고 이진화 작업을 진행하려 한다.
다행히 OpenCV.js 공식 문서에서도 이진화 방법인 Thresholding에 대해 소개하고 있었다.
https://docs.opencv.org/3.4/d7/dd0/tutorial_js_thresholding.html
Thresholding이란?
Thresholding은 binary image를 만드는 대표적인 방법으로
임계점을 기준으로 검은색(0)과 흰색(255) 두가지로 나눠 나타내는 이미지를 뜻한다.
https://wjunsea.tistory.com/74
비교
grayscale
Threshold
THRESH_TRUNC type
THRESH_OTSU type
grayscale 후 진행한 thresholding 중 OTSU type으로 이진화한 결과가 제일 좋았다.
thresholding에 대해 검색하면 오츠의 알고리즘이란 키워드가 같이 나오는걸 봤는데 역시 언급되는 이유가 있다.
Otsu' binarization method란 이름의 오츠의 알고리즘은
임계값을 임의로 정해 픽셀을 두 부류로 나누고 두 부류의 명암 분포를 구하는 작업을 반복하여 얻은 모든 경우의 수 중에서
두 부류의 명암 분포가 가장 균일할 때의 임계값을 선택해준다.
cv.threshold(src, dst, 177, 200, cv.THRESH_OTSU);
따라서, 예시 코드처럼 177, 200과 같이 파라미터를 넣어줘도 무시하고
최적의 임계값을 찾아 계산하므로 신경쓰지 않아도 된다는 점이 좋다.
심지어 결과도 제일 좋음
아래는 Adaptive Threshold 방법인데 결과가 좋지 않아 패스했다.
정리
물론 아직까진 원본 그대로를 인식했을 때와 비교했을 때 차이가 크지 않다는걸 알 수 있다.
심지어 암흑 저항 부분은 틀렸음
이렇게 전처리 작업을 했는데도 완전 정확한 결과가 나오지 않아 고민이었는데
Fine-tuning을 통해 결과값을 개선할 수 있다는 것을 알게 되었다.
Fine-tuning이란 머신 러닝 모델을 사전 학습된 모델로부터 가져와 특정 작업에 맞게 추가적인 학습을 수행하는 과정을 말한다.
즉, 결과로 얻어야할 텍스트를 다시 학습시켜 이미지를 다시 인식시켰을 때 원하던 정확한 텍스트를 뱉게끔 개조시키는거 같은데
딱봐도 노가다에 만만치 않은 작업이 될 것 같다. 해봐야 알겠지
너무 의식의 흐름으로 공부중인거 같은데 일단 목표가 좀 바뀌었다.
처음엔 경매장 사이트를 만들 계획이었지만 이미 더 좋은 사이트가 생겼기 때문에
스크린샷을 올리면 아이템 옵션들을 텍스트로 얻게 되는 사이트로 만들 생각이다.
이렇게 되면 serverless로 서비스해도 되니까 여러모로 괜찮은 아이디어인듯
참고 사이트
https://bkshin.tistory.com/entry/OpenCV-8-%EC%8A%A4%EB%A0%88%EC%8B%9C%ED%99%80%EB%94%A9Thresholding
+추가
애초 계획이었던 디아블로4 경매장 사이트에서 serverless 이미지 텍스트 인식 사이트로 노선을 변경했다.
그 과정에서 굳이 프론트엔드 관련 프레임워크(혹은 라이브러리)를 사용할 필요가 없다고 판단되어
단순 HTML, JS 만으로 만들기로 결정.
해당 작업 내용은 다음 포스팅에 모두 정리했음
'개인프로젝트 > OCR' 카테고리의 다른 글
디아블로4 경매 사이트 만들기 (6) - OpenCV.js Image ROI (0) | 2023.06.30 |
---|---|
디아블로4 경매 사이트 만들기 (5) - OpenCV.js Template Matching (0) | 2023.06.27 |
디아블로4 경매 사이트 만들기 (4) - Vue에서 Drag&Drop, Crop, Tesseract 사용하기 (0) | 2023.06.21 |
디아블로4 경매 사이트 만들기 (3) - 이미지 자르기 crop (0) | 2023.06.15 |
디아블로4 경매 사이트 만들기 (2) - 이미지 드래그 앤 드랍 (0) | 2023.06.15 |