kr-plate-detector — 한국 차량 번호판 검출 (RTMDet-tiny)
한국 차량 번호판을 검출하는 경량 모델. 100% 합성 데이터로만 학습했으며, 실제 한국 번호판(AI Hub 검증셋)에서 성능을 측정했습니다. 프라이버시 블러 도구용으로 개발.
- 아키텍처: RTMDet-tiny (mmdetection), 1클래스(number plate)
- 입력: 960×960, 출력: 3-스케일 cls/bbox
- 라이선스: Apache-2.0 — 상업적 사용 가능
- 라이브 데모: https://huggingface.co/spaces/miraclenote78/privacy-blur
성능
| 평가 | 지표 | 값 |
|---|---|---|
| 합성 검증셋 (300장) | mAP50 / mAP50-95 | 0.949 / 0.806 |
| 실사 한국 번호판 (AI Hub, 1,000장) | 검출률 (conf 0.25) | 88.8% |
| 〃 | 검출률 (conf 0.40) | 83.8% |
실사 검증은 AI Hub "자동차 차종/연식/번호판 인식용 영상"의 번호판 이미지로 측정만 수행(학습에 미사용). 합성만으로 학습한 모델이 실제 번호판에 일반화됨을 확인.
사용법
ONNX Runtime (권장 — PyTorch/mmdet 불필요)
from huggingface_hub import hf_hub_download
import cv2, numpy as np, onnxruntime as ort
onnx_path = hf_hub_download("miraclenote78/kr-plate-detector", "plate_kr_rtmdet_v4.onnx")
# 전처리·후처리는 rtmdet_onnx.py 참고 (동봉)
rt = hf_hub_download("miraclenote78/kr-plate-detector", "rtmdet_onnx.py")
import importlib.util
spec = importlib.util.spec_from_file_location("rtmdet_onnx", rt)
m = importlib.util.module_from_spec(spec); spec.loader.exec_module(m)
det = m.OnnxPlateDetector(onnx_path, conf_large=0.4, conf_tiny=0.4, tiny_frac=0.0)
img = cv2.imread("car.jpg")
for x1, y1, x2, y2, score in det.detect(img):
cv2.rectangle(img, (int(x1), int(y1)), (int(x2), int(y2)), (0, 255, 0), 2)
cv2.imwrite("out.jpg", img)
전처리: BGR keep-ratio 960 패딩 + mean/std 정규화 · 후처리: sigmoid → distance 디코드 → NMS. 크기 조건부 문턱 + 가로세로비 필터로 오검출 억제.
학습 방법 (요약)
한국 번호판은 규격·서체가 표준화돼 있어 프로그램으로 합성 생성 가능: 신형 흰판·영업용 노란판·전기차 파란판·구형 녹색판을 규칙대로 렌더링 → 배경에 원근 합성 → 야간/모션블러/노이즈/JPEG 증강 → YOLO 라벨 자동 생성. COCO 사전학습 RTMDet-tiny에서 파인튜닝. (생성기·학습 코드는 비공개)
알려진 한계
- 실사 검증은 번호판이 크게 보이는 크롭 이미지 기준. 달리는 차의 원거리 소형 번호판(대시캠 원경)은 별도 검증 필요 — 성능이 다를 수 있음
- 구형 지역명 세로쓰기 영업용판, 극단적 각도는 약함
- 프라이버시 용도 시 완전성을 보장하지 않음 — 최종 검수는 사용자 책임
출처
프라이버시 블러 파이프라인용으로 개발. 데모: privacy-blur Space.