티스토리 뷰
🚀 OpenCV를 활용한 이미지 기반 자동화 및 CAPTCHA 우회 방법
웹 크롤링과 자동화에서 이미지 기반 CAPTCHA는 일반적인 문자 크롤링보다 해결이 어려운 문제입니다.
하지만 **OpenCV와 딥러닝(OCR, AI)**을 활용하면 CAPTCHA를 효과적으로 인식하고 우회할 수 있습니다.
✅ 1. OpenCV와 OCR을 활용한 CAPTCHA 분석 개요
🔹 CAPTCHA 자동 입력 과정
1️⃣ Selenium을 활용하여 CAPTCHA 이미지 다운로드
2️⃣ OpenCV로 이미지 전처리 (흑백 변환, 노이즈 제거, 경계 검출)
3️⃣ Tesseract-OCR로 문자 인식
4️⃣ Selenium을 통해 자동 입력 및 제출
📌 사용 기술
✅ Selenium → 웹페이지에서 CAPTCHA 이미지 다운로드
✅ OpenCV → 이미지 전처리 (이진화, 필터링, 경계 검출)
✅ Tesseract-OCR → 문자 인식
✅ AI (딥러닝) → 복잡한 CAPTCHA 인식률 개선
✅ 2. 프로젝트 1: OpenCV를 활용한 기본 CAPTCHA 문자 인식
🔹 필요 라이브러리 설치
pip install opencv-python pillow pytesseract selenium numpy
🔹 Tesseract-OCR 설치
- Tesseract 다운로드
- 설치 후 tesseract.exe 경로를 설정해야 함.
🔹 STEP 1: CAPTCHA 이미지 다운로드
먼저, Selenium을 이용해 웹사이트의 CAPTCHA 이미지를 다운로드합니다.
import time
from selenium import webdriver
from selenium.webdriver.common.by import By
# 1️⃣ Chrome WebDriver 실행
driver = webdriver.Chrome()
driver.get("https://example.com/captcha") # CAPTCHA가 있는 사이트
time.sleep(2) # 페이지 로딩 대기
# 2️⃣ CAPTCHA 이미지 다운로드
captcha_element = driver.find_element(By.ID, "captcha-img") # CAPTCHA 이미지 선택
captcha_element.screenshot("captcha.png") # 캡차 이미지 저장
print("CAPTCHA 이미지 다운로드 완료!")
driver.quit()
🔹 STEP 2: OpenCV를 활용한 CAPTCHA 이미지 전처리
이미지를 흑백 변환, 노이즈 제거, 경계 검출을 수행하여 OCR 인식률을 향상시킵니다.
import cv2
import numpy as np
from PIL import Image
import pytesseract
# 1️⃣ 이미지 로드
image = cv2.imread("captcha.png", cv2.IMREAD_GRAYSCALE) # 흑백 변환
# 2️⃣ 노이즈 제거 (GaussianBlur 적용)
image = cv2.GaussianBlur(image, (5, 5), 0)
# 3️⃣ 이진화 (Thresholding)
_, image = cv2.threshold(image, 128, 255, cv2.THRESH_BINARY_INV)
# 4️⃣ OCR을 이용한 문자 인식
pytesseract.pytesseract.tesseract_cmd = r"C:\Program Files\Tesseract-OCR\tesseract.exe"
captcha_text = pytesseract.image_to_string(image, config='--psm 6')
print("인식된 CAPTCHA:", captcha_text.strip())
# 5️⃣ 결과 이미지 저장
cv2.imwrite("processed_captcha.png", image)
🔹 STEP 3: Selenium으로 자동 입력 및 제출
from selenium import webdriver
from selenium.webdriver.common.by import By
driver = webdriver.Chrome()
driver.get("https://example.com/captcha")
# CAPTCHA 입력 필드 찾기
captcha_input = driver.find_element(By.ID, "captcha-input")
captcha_input.send_keys(captcha_text.strip()) # OCR 인식 결과 입력
# 제출 버튼 클릭
submit_button = driver.find_element(By.ID, "submit-btn")
submit_button.click()
print("CAPTCHA 자동 입력 완료!")
driver.quit()
✅ 3. 프로젝트 2: OpenCV + 딥러닝을 활용한 복잡한 CAPTCHA 분석
Tesseract-OCR은 간단한 문자 기반 CAPTCHA는 해결할 수 있지만, 복잡한 왜곡된 문자, 기울어진 문자, 복합색상의 CAPTCHA는 해결이 어렵습니다.
이 경우, 딥러닝을 활용하여 CAPTCHA 인식률을 향상시킬 수 있습니다.
🔹 STEP 1: 딥러닝을 활용한 CAPTCHA 인식 모델
💡 **CNN (Convolutional Neural Network)**을 활용하여 문자 이미지를 분석하는 딥러닝 모델을 학습할 수 있습니다.
import tensorflow as tf
from tensorflow import keras
from keras.preprocessing.image import ImageDataGenerator
import numpy as np
import cv2
# 1️⃣ CAPTCHA 이미지 데이터셋 로드 (MNIST 예제)
(x_train, y_train), (x_test, y_test) = keras.datasets.mnist.load_data()
# 2️⃣ 데이터 정규화
x_train = x_train / 255.0
x_test = x_test / 255.0
# 3️⃣ CNN 모델 생성
model = keras.Sequential([
keras.layers.Conv2D(32, (3,3), activation='relu', input_shape=(28,28,1)),
keras.layers.MaxPooling2D((2,2)),
keras.layers.Flatten(),
keras.layers.Dense(128, activation='relu'),
keras.layers.Dense(10, activation='softmax')
])
# 4️⃣ 모델 컴파일 및 학습
model.compile(optimizer='adam',
loss='sparse_categorical_crossentropy',
metrics=['accuracy'])
model.fit(x_train, y_train, epochs=5, validation_data=(x_test, y_test))
# 5️⃣ 모델 저장
model.save("captcha_model.h5")
print("딥러닝 모델 학습 완료 및 저장!")
🟢 Tip:
- 위 코드는 CAPTCHA 숫자 이미지를 분석하기 위해 MNIST 데이터셋을 학습한 CNN 모델 예제입니다.
- 실제 CAPTCHA 데이터셋을 구축하여 모델을 학습시키면 인식률을 더욱 향상시킬 수 있습니다.
🔹 STEP 2: CAPTCHA 자동 예측
import cv2
import numpy as np
from tensorflow import keras
# 1️⃣ 딥러닝 모델 불러오기
model = keras.models.load_model("captcha_model.h5")
# 2️⃣ 새로운 CAPTCHA 이미지 로드 및 전처리
image = cv2.imread("captcha.png", cv2.IMREAD_GRAYSCALE)
image = cv2.resize(image, (28, 28))
image = image / 255.0
image = np.expand_dims(image, axis=0)
# 3️⃣ 모델을 활용한 예측
prediction = np.argmax(model.predict(image))
print("예측된 CAPTCHA:", prediction)
🟢 Tip:
- 모델을 학습할 때 다양한 형태의 CAPTCHA 데이터셋을 사용하면 정확도를 높일 수 있음
- 데이터셋을 직접 구축할 수도 있고, Kaggle의 CAPTCHA 데이터셋을 활용할 수도 있음
✅ 4. 정리 및 결론
해결 방법 적용 기술
단순 문자 CAPTCHA | Tesseract-OCR로 문자 인식 |
복잡한 CAPTCHA (노이즈 있음) | OpenCV로 전처리 후 OCR 적용 |
왜곡된 CAPTCHA | OpenCV + 딥러닝(CNN) 활용 |
Google reCAPTCHA | 2Captcha API 활용 |
🔹 OpenCV와 딥러닝을 결합하면 복잡한 CAPTCHA도 높은 정확도로 자동 입력 가능
🔹 Tesseract-OCR만으로 해결이 어려운 경우, 딥러닝 모델을 직접 학습하여 적용 가능
'[실전] 파이썬 (Python)' 카테고리의 다른 글
파이썬 웹사이트 크롤링(requests & selenium) 차단 우회 방법 (0) | 2025.02.13 |
---|---|
[selenium 고급] Selenium과 AI OCR을 활용한 CAPTCHA 자동 입력 방법 (0) | 2025.02.13 |
[selenium 중급] Selenium을 이용한 웹 자동화 (자동로그인, 자동 게시글/댓글 작성 등) (0) | 2025.02.13 |
pygame으로 만든 게임 apk파일로 빌드 및 출시하기 (0) | 2025.02.01 |
[챗지피티+pygame] 지피티를 이용해 리듬게임 만들기 (0) | 2025.02.01 |