20 Followers
·
Follow

정부 웹 사이트 캡챠 ( CAPTCHA ) 무력화 with Python+CV

말은 거창하게 무력화라고 지었지만, 특별할게 없는 코드다

개발 시나리오마다 정부 웹사이트 접근이 필수인 경우가 많은데,
행정부의 민원처리 서비스가 민원 24에서 정부 24로 넘어가는 와중이라 이전에 돌아가던 캡챠 무력화 코드가 정부24 에서는 잘 돌아가지 않는다.

이런건 좀 빨리빨리 처리하라고…

Image for post
Image for post
Image for post
Image for post
Image for post
Image for post
정부 24에서 출력되는 캡챠의 샘플

위 캡챠인식을 위해선 고려해야 할 점이 있다

  1. 회색 그라데이션
    숫자 폰트가 검은색이라 맨 왼쪽의 어두운 부분을 인식하지 못 할 가능성이 있다
  2. 가로선
    가로로 죽 그어져있는 선이 있어서 숫자 인식에 한 두가지 미스 매칭이 생길 수 있다

위 코드에서 ocrClip() 메서드와 tesseract_cmd 를 불러오는 라인만 봐도 좋다

im_gray = cv2.imread(‘temp.png’, cv2.IMREAD_GRAYSCALE)

(thresh, im_bw) = cv2.threshold(im_gray, 127, 255, cv2.THRESH_TRUNC | cv2.THRESH_OTSU)

cv2 로 캡챠 샘플이미지 파일을 GRAYSCALE 로 읽어들인다
애초에 흑백으로 읽지 않아도 차이점은 딱히 없다

두번째 코드는 임계처리를 하는 코드인데 흑백으로 이루어진 이미지를 특정 임계값을 기준으로 이진화하는 코드이다

im_gray 를 읽어서 127 기준을 잡고 255로 변환해야하지만, THRESH_TRUNC 옵션을 주면서 127 이 넘어가는 값은 127로, 그 이하는 원본 픽셀로 들어간다. maxvalue 인 255 는 무시되는 것이다

THRESH_OTSU 옵션도 들어있는데 위 링크의 Otsu의 이진화 를 읽으면 좋다

127로 정한 임계값을 위 옵션을 통해 자동으로 지정할 수 있는 옵션이다.

단순히 127로 하면 그라데이션 앞뒤 색이 미묘하게 달라서 번역에 큰 영향을 준다

위 코드를 돌려나온 이미지는 다음과같다

Image for post
Image for post
Image for post
Image for post
Image for post
Image for post

약간의 그라데이션 흔적은 남았지만, 글자에 영향을 주지 않을 정도이다

text = pytesseract.image_to_string(im_bw, lang=’eng’, config=”-psm 8 -oem 3")

이제 tesseract 를 통해 이미지 OCR 처리를 하면 된다.
lang 은 기본적인 eng, 영어로.
psm 은 Page Segmentation modes의 Single Word 옵션인 8번
oem 은 OCR Engine Modes 의 3번 옵션. 기본값이다

Image for post
Image for post
Image for post
Image for post
Image for post
Image for post

첫번째 이미지와 마지막 이미지는 좋은 결과가 나왔다.
두번째 이미지는 7과 가로선이 겹쳐서 “¥” 엔 기호가 되고 말았다.

기본적으로 6글자가 고정으로 나오니 Regex 로 숫자만 필터링해서 재시도 하는 방법으로 하면 되겠다

Homepage : https://kam6512.github.io/
FACEBOOK : https://www.facebook.com/kam6512
GitHub : https://github.com/kam6512
E-Mail : kam6512@gmail.com

Written by

잡탕 코으으으으더

Get the Medium app

A button that says 'Download on the App Store', and if clicked it will lead you to the iOS App store
A button that says 'Get it on, Google Play', and if clicked it will lead you to the Google Play store