포시코딩

디아블로4 경매 사이트 만들기 (7) - OpenCV.js Thresholding (끝) 본문

개인프로젝트/OCR

디아블로4 경매 사이트 만들기 (7) - OpenCV.js Thresholding (끝)

포시 2023. 7. 2. 16:50
728x90

개요

이전 포스팅에서 잘라낸 이미지를 Tesseract로 인식하기 전에 좀 더 정확한 결과물을 얻고자 전처리를 하려 한다.

찾아보니 보통 

원본 -> Grayscale(그레이스케일) -> Binary(이진화) 과정을 거치는데 

그레이스케일 과정은 이미 해봤고 이진화 작업을 진행하려 한다. 

 

다행히 OpenCV.js 공식 문서에서도 이진화 방법인 Thresholding에 대해 소개하고 있었다.

https://docs.opencv.org/3.4/d7/dd0/tutorial_js_thresholding.html

 

OpenCV: Image Thresholding

Goal In this tutorial, you will learn Simple thresholding, Adaptive thresholding, Otsu's thresholding etc. You will learn these functions : cv.threshold, cv.adaptiveThreshold etc. Simple Thresholding Here, the matter is straight forward. If pixel value is

docs.opencv.org

 

Thresholding이란?

Thresholding은 binary image를 만드는 대표적인 방법으로

임계점을 기준으로 검은색(0)과 흰색(255) 두가지로 나눠 나타내는 이미지를 뜻한다. 

 

https://wjunsea.tistory.com/74

 

Python - OpenCV (9) : Image Thresholding

이번 포스팅은 Image Thresholding에 대해 알아보고 OpenCV에서 사용하는 threshold에 대해 알아보겠습니다. 포스팅 관련 내용은 아래에서 출처를 얻어 사용하였습니다. https://docs.opencv.org/4.5.2/d7/d4d/tutorial

wjunsea.tistory.com

 

비교

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 방법인데 결과가 좋지 않아 패스했다.

세팅이 잘못된걸까

 

정리

grayscale도 진행하지 않은 원본 이미지를 인식한 결과

물론 아직까진 원본 그대로를 인식했을 때와 비교했을 때 차이가 크지 않다는걸 알 수 있다. 

심지어 암흑 저항 부분은 틀렸음

 

이렇게 전처리 작업을 했는데도 완전 정확한 결과가 나오지 않아 고민이었는데 

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

 

OpenCV - 8. 스레시홀딩(Thresholding), 오츠의 알고리즘(Otsu's Method)

이번 포스팅에서는 바이너리 이미지를 만드는 대표적인 방법인 스레시홀딩에 대해 알아보겠습니다. 이번 포스팅 역시 '파이썬으로 만드는 OpenCV 프로젝트(이세우 저)'를 정리한 것임을 밝힙니다

bkshin.tistory.com

 

+추가

애초 계획이었던 디아블로4 경매장 사이트에서 serverless 이미지 텍스트 인식 사이트로 노선을 변경했다.

그 과정에서 굳이 프론트엔드 관련 프레임워크(혹은 라이브러리)를 사용할 필요가 없다고 판단되어

단순 HTML, JS 만으로 만들기로 결정. 

해당 작업 내용은 다음 포스팅에 모두 정리했음

https://4sii.tistory.com/614

728x90