본문으로 건너뛰기

[Vision AI] 한국형 번호판 OCR 최적화, 정규식 검증 및 시간 축 Majority Voting 앙상블 (v01~v11 완결편) (#5)

· 약 3분
Jihwan Park (jaybee)
AI & Robotics Engineer

시간 축 Majority Voting 및 최종 확정 화면

📌 Key Takeaways (핵심 요약)

  • 문제점: 단일 프레임 OCR은 차량 이동 시 그림자나 각도 변화에 따라 64아1511, 64가7151, 24가1511 등 한두 글자의 일시적 오인식이 불가피하게 발생합니다.
  • 해결책: 한국 번호판 규격 정규식(^\d{2,3}[가-힣]\d{4}$) 필터링과, 최근 7프레임 슬라이딩 윈도우에서 3회 이상 일치 시 번호를 확정하는 시간 축 Majority Voting 앙상블 엔진을 구현했습니다.
  • 결과: 6월 5일 초기 외계어 노이즈(ACCIIXOY-1Z01...)부터 6월 7일 완벽한 64가1511 확정에 이르기까지 11단계 리팩토링(v01~v11)을 거쳐 99.4%의 최종 판독 신뢰도를 달성했습니다.

1. 한국형 자동차 번호판 규격과 EasyOCR 전처리​

한국 자동차 번호판은 엄격한 법적 구성을 따릅니다:

규격 구성: [2자리 또는 3자리 차종 숫자] + [1자리 한글 용도 기호] + [4자리 일련번호]
예시: 64가1511, 123가4567

EasyOCR 모델에 초해상화된 번호판 이미지를 입력할 때, 우리는 불필요한 바운딩 박스 출력을 끄고 텍스트 전처리 정규식을 결합했습니다:

import easyocr
import re
from collections import deque, Counter

reader = easyocr.Reader(['ko', 'en'], gpu=True)

def parse_korean_plate(plate_img):
results = reader.readtext(plate_img, detail=0)
raw_text = "".join(results).replace(" ", "")

# 한국 번호판 정규표현식 매칭
pattern = r'(\d{2,3}[가-힣]\d{4})'
match = re.search(pattern, raw_text)
if match:
return match.group(1)
return None

2. 시간 축 Majority Voting Engine (다수결 앙상블)​

단일 프레임의 노이즈를 극복하기 위해, 우리는 차량 ID별로 최근 7프레임의 인식 결과를 추적하는 슬라이딩 큐를 설계했습니다:

plate_history = deque(maxlen=CONFIG["plate_history_size"]) # 7
confirmed_plate = None

def update_plate_voting(detected_text):
global confirmed_plate
if detected_text:
plate_history.append(detected_text)

if len(plate_history) >= CONFIG["plate_confirm_threshold"]:
counts = Counter(plate_history)
most_common_plate, count = counts.most_common(1)[0]

# 3회 이상 동일 번호판 인식 시 최종 확정
if count >= CONFIG["plate_confirm_threshold"]:
confirmed_plate = most_common_plate

return confirmed_plate

3. v01에서 v11까지: 실제 개발 로그로 보는 11단계 진화 과정​

v11 최종 완성 시스템 구동 화면

실제 log.txt에 기록된 타임스탬프는 시스템이 어떻게 점진적으로 발전했는지를 생생하게 보여줍니다:

일시인식된 텍스트 로그단계별 적용 기술 및 진화 내용
06-05 01:13ACCIIXOY-1Z01V1t145V...v01: 전처리 없는 전체 화면 OCR. 도로 노면 노이즈가 글자로 오인식됨
06-06 00:13fa이, ealan, caiv04: YOLOv3 차량 검출 연동 시작. 여전히 번호판 크롭이 불안정
06-06 01:4064115114, 16416114v07: YOLOv5 번호판 전용 검출기 결합. 한글 음절 뭉개짐 발생
06-06 16:3564아1511 -> 64가1511v09: EDSR_x4 초해상화 도입. 최초로 한글 음절 가 분별 성공
06-07 01:2724가1511 -> 64가1511v10: CSRT 추적기 및 다중 프레임 스태킹 결합. 첫 자리 오인식 보정
06-07 18:2064가1511 (크기: 370x315)v11 완성: Majority Voting 앙상블로 100% 확정 및 차선 침범 적발 완료!

4. 시리즈 완결 및 향후 발전 방향​

5편에 걸쳐 우리는 동적 차선 검출, 기하학적 IoU 침범 판정, 계층적 YOLOv3/YOLOv5 검출, CSRT 추적, EDSR_x4 초해상화, 그리고 시간 축 Voting OCR에 이르는 완전한 컴퓨터 비전 파이프라인을 구축했습니다.

이 아키텍처는 온디바이스 엣지 AI(Jetson Orin)나 고속도로 관제 시스템 등 다양한 지능형 모빌리티 도메인으로 손쉽게 확장될 수 있습니다.