Post

캡챠 인증 chatGPT 로 통과하기

Tesseract 와 ChatGPT 의 활용

캡챠 인증 chatGPT 로 통과하기

최근 취미로 시작한 개인 개발업무에서 캡챠(CAPTCHA) 인증을 할 일이 생겼다. 캡챠 이미지 예시는 아래와 같다.

캡챠 예시 1 캡챠 예시 2 캡챠 예시 3 캡챠 예시 4

Tesseract

OCR(광학 문자 인식, Optical Character Recognition)을 활용하기 위해 아래와 같은 python 코드를 실행해본다.

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
import subprocess

def run_ocr(filepath):
    def run_command(command):
        p = subprocess.Popen(command, stdout=subprocess.PIPE, stderr=subprocess.STDOUT)
        return iter(p.stdout.readline, b"")
    cmd = f"tesseract {filepath} stdout -l eng --oem 3 --psm 8 --dpi 300"
    output_str = ""
    for line in run_command(cmd.split()):
        output_str += line.decode("UTF-8")
    return output_str


# 코드 실행 결과
>>> print(run_ocr("String1.png"))
185973

>>> print(run_ocr("String2.png"))
B006-2_.

>>> print(run_ocr("String3.png"))
1000595" |

>>> print(run_ocr("String4.png"))
1045637 |

위 4개의 예시 이미지에 대한 텍스트 분석값 중 첫 번째 이미지에 대한 값을 제외하곤 분석값이 틀렸다.

tesseract 명령어 실행 시 넘기는 인자값들을 변경해보면 저것보다는 나은 결과값을 가질 수도 있을 것 같지만, 해보진 않고 ChatGPT 활용으로 넘어간다. tesseract 명령 파라미터는 여기 에서 확인할 수 있다.

1
2
  --psm NUM             Specify page segmentation mode.
  --oem NUM             Specify OCR Engine mode.

ChatGPT

gpt 모델을 활용하여 OCR 테스트하는 것은 OpenAI Playground에서 해볼 수 있다.

캡챠 ChatGPT 로 인증 기원님께서 도와주시며 첨부해주신 이미지

위 스크린샷에서 볼 수 있듯이, gpt-4o 모델을 활용하여 OCR 을 해보니 캡챠 이미지를 체감상 90% 정도의 정확도로 분석한다고 느꼈다 – 테스트를 많이 해보진 않았다. 주로 실패하는 이미지들을 보니, 숫자 가운데 점이나 선이 그어진 것보다도 두 개의 숫자가 붙어있는 경우가 많아보였다. 확실한 답(label)이 있으니, 캡챠 이미지와 그에 맞는 답들을 갖고서 gpt 모델 학습을 시킬 수 있지 않을까도 생각해봤다.

캡챠는 시각이 불편한 사람들(visually impaired people)을 위해서 ‘음성듣기’ 기능을 제공한다. 이 음성을 가지고 Speech-To-Text 모델을 통해 캡챠 인증하는 방법도 생각해봤다. 재생을 하니 외국어 같은 노이즈가 섞인 음성이 나온다. 캡챠 이미지에 점이나 가로선 등을 그어 봇(bot)의 처리를 막는 것과 비슷한 맥락으로 이해했다.

결론

코드를 통해 캡챠 인증을 통과하려면 gpt 모델을 통해 캡챠 이미지 분석을 하고, 잘못된 분석을 한 경우에는 ‘새로고침’ 버튼으로 새로운 캡챠 이미지를 분석하도록 구현하면 충분히 쓸만한 기능을 만들 것 같다.


This post is licensed under CC BY 4.0 by the author.