LICENSE_PLATE_DETECTION (자동차 번호판 검출 및 인식)

이 프로젝트는 OpenCV와 Pytesseract 라이브러리를 사용하여 이미지 파일에서 자동차 번호판을 검출하고, 번호판에 적힌 텍스트를 인식하여 출력하는 예제입니다.

주요 특징

  • 이미지 전처리: cv2.cvtColor, cv2.bilateralFilter, cv2.Canny 등을 사용하여 노이즈를 제거하고 외곽선을 강조합니다.
  • 윤곽선 검출: cv2.findContours를 통해 이미지 내의 다양한 윤곽선을 찾고, 번호판 특유의 사각형 모양을 식별합니다.
  • OCR 인식: 오픈소스 OCR 엔진인 Tesseract를 연동하여 검출된 번호판 영역에서 텍스트를 추출합니다.

코드 설명

1. 이미지 읽기 및 전처리

사용자로부터 이미지를 선택받아 흑백 전환 및 필터링을 거쳐 외곽선을 추출합니다.

import cv2
import imutils

image = cv2.imread(file)
image = imutils.resize(image, width=500)
gray = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY)
gray = cv2.bilateralFilter(gray, 11, 17, 17) # 노이즈 제거
edged = cv2.Canny(gray, 170, 200) # 외곽선 검출

2. 번호판 영역 식별

검출된 윤곽선 중 면적이 큰 상위 30개를 분석하여 4개의 꼭짓점을 가진 사각형 영역을 찾습니다.

contours, _ = cv2.findContours(edged.copy(), cv2.RETR_LIST, cv2.CHAIN_APPROX_SIMPLE)
contours = sorted(contours, key=cv2.contourArea, reverse=True)[:30]

for c in contours:
    perimeter = cv2.arcLength(c, True)
    approx = cv2.approxPolyDP(c, 0.02 * perimeter, True)
    if len(approx) == 4: # 사각형 모양인 경우 번호판으로 간주
        Number_Plate_Contour = approx
        break

3. OCR을 이용한 텍스트 추출

추출된 번호판 영역을 이진화 처리한 후 Tesseract를 통해 문자를 인식합니다.

import pytesseract

# Tesseract 실행 경로 설정 (Windows 환경 예시)
pytesseract.pytesseract.tesseract_cmd = r"C:\Program Files (x86)\Tesseract-OCR\tesseract.exe"

text = pytesseract.image_to_string(processed_img)
print("Detected Number is:", text)

참고 자료