AI Smart Parking Lot

Raspberry Pi 5 기반 AI 모델을 활용하여 차량 번호판 인식 및 주차 안내 / 관리 시스템

개요

프로젝트 기간

2025.07.01 ~ 2025.07.10

목적

  • 번호판 인식 기반 실시간 차량 식별로 출입 자동화
  • 빈자리 탐지를 통해 주차 효율을 높이고 안전한 동선을 보장

개발 환경

  • Raspberry Pi 5 : 64-bit Arm Cortex
  • WebCam w210 : 최대 해상도 1280 x 720
  • Python 3.10+ : PyTorch, EasyOCR, TensorFlow, numpy, TorchVision, CUDAToolkit
  • Google Colab

상세 설계

주요 기능

  • 입차 시 차량 인식 : 카메라로 차량 감지 및 번호판 인식
  • 등록 차량 확인 : 등록 차량 여부 확인
  • 주차 공간 탐지 : 빈 자리 주차 공간 탐색
  • 빈 자리 안내 : 사용자에게 가장 가까운 빈 자리 안내
  • 잘못된 주차 안내 : 지정된 영역 내 정상 주차 여부 확인
  • 차량 출차 인식 : 차량 감지 해제 시, 해당 주차 공간을 빈 자리로 갱신

시스템 아키텍처

AI 모델 설계

  • YOLO v5 : 이미지 전체에서 번호판 위치를 박스 형태로 정의하여 인식
  • YOLO v8 : 주차 공간 탐색(객체 탐지) 및 주차 상태 체크(BBOX 기울기 계산, 중심점 판단)
  • CRNN : CNN + RNN + CTC Loss 구조로 문자 분할 없이 전체 문자열 인식
  • EasyOCR : Detection + Recognition 통합 OCR로 미리 학습된 PyTorch 모델

온디바이스


1. OCR_GPIO_Entrace.py


2. find_empty_place.py


3. GPIO 핀을 통한 라즈베리파이 통신

  • RPI A
    • GPIO 0 (입력): 2초 동안 HIGH 검출 시 등록된 차량 진입으로 인식
    • GPIO 1 (출력): 빈 자리가 없을 시 HIGH
  • RPI B
    • GPIO 0 (출력): 등록된 차량 진입 시 3초 동안 HIGH
    • GPIO 1 (입력): HIGH → 빈 자리가 없다고 판단


3. GPIO 핀을 통한 라즈베리파이 통신

  • RPI A
    • GPIO 0 (입력): 2초 동안 HIGH 검출 시 등록된 차량 진입으로 인식
    • GPIO 1 (출력): 빈 자리가 없을 시 HIGH
  • RPI B
    • GPIO 0 (출력): 등록된 차량 진입 시 3초 동안 HIGH
    • GPIO 1 (입력): HIGH → 빈 자리가 없다고 판단


최종 결과

1. 실제 동작 환경

2. 시연 영상


트러블 슈팅

1. YOLO 모델 학습 실패

  • 원인 분석
    • YOLO는 객체의 시각적 특징을 기반으로 bounding box.
    • 학습 데이터 셋에서 번호판 전체가 모자이크 되어 있음.
    • YOLO가 객체의 특징을 찾지 못함.
  • 해결 과정 : 온전한 번호판이 나와있는 데이터 셋 사용. (해외)

2. YOLO 모델 버전 호환성 문제

  • 원인 분석 : 라이브러리 상호 호환성 충돌.
  • 해결 방법 : 팀원들과의 소통 후 사용 모델 및 라이브러리 호환성 체크.

3. CRNN

  • 문제 상황 : YOLOv5는 번호판 영역을 정확하게 탐지했지만, 우분투 환경 내 CRNN 한글 폰트 깨짐 현상 발견.
  • 원인 분석
    • charset.json에 한글 미포함 → CRNN이 index 탐색 불가.
    • 디코딩 과정에서 해당 문자 자리에 □ 출력.
  • 해결 과정
    • charset.json에 한글이 있는지 확인.
    • ImageFont에 한글 폰트 경로 지정.
    • CRNN 모델이 한글을 인식할 수 있는지 테스트.

4. OCR

  • 문제 상황 : OCR 동작의 신뢰성 문제.
  • 원인 분석
    • Raspberrypi5 내에서 OCR동작 느리고 부정확.
    • 한번의 OCR 동작으로 정확히 인식할 확률 매우 낮음.
    • 여러 번의 동작 결과 중 어떤 문자열이 정확한지 판별 X.
  • 해결 과정
    • 번호판 detect시 1초 간격으로 10번의 OCR동작.
    • 동작 중 가장 많이 인식된 문자열을 최종 선택.
    • 일정 길이 이하의 문자열은 제외.

고찰

1. 온디바이스 실행 성능 한계

  • 딥러닝 연산의 높은 연산 부하
    • OCR/YOLOv8 연산은 CPU 사용이 높아 동작 속도 느림.
    • Raspberry Pi 5에서도 실시간 프레임 처리에 한계.
  • PyTorch 기반 YOLOv8
    • Ultralytics 라이브러리 기반 → GPU 가속 필요.
    • Pi 환경에선 CPU-only 추론 → FPS 저하 불가피.
  • 차량 입차 탐지 모델 (YOLOv8)
    • YOLO 기반 차량 탐지 / 입차 여부 판단은 실시간 수준은 0.3초 정도로 충분.

2. CRNN vs EasyOCR 모델 학습 과정에서 느낀 점

  • 프로젝트 목적 : 대한민국 차량 번호판 문자 (한글 포함)를 정확히 인식하는 OCR 모델 개발.
  • CRNN 학습 성능과 한계
    • 학습 데이터 : 5000장 이상 실제 번호판 이미지.
    • 문제점 : 웹캠 인식 이미지 문자열 정확도 낮음.
  • EasyOCR 전환 및 비교 분석
    • 학습 데이터 : 100만장 이상의 대규모 학습 모델.
    • 성능 : 웹캠 인식 이미지 문자열 정확도 높음.

GitHub Source