운전중 도로 교통 법규 위반 차량을 발견해도 즉각 신고가 현실적으로 어려워 자동 감지 및 신고 시스템을 만들고자 함

프로젝트 목표:

  • 실시간 블랙박스 영상속 위반 차량 감지+신고
  • 블랙박스 영상 속에서 실시간으로 특정 위반 사항을 감지하고, 필요한 경우 이를 신고할 수 있는 시스템을 개발

주요 구현 요소:

  • 위반 사항 분류 (Classification of Violations): 신호위반, 안전모 미착용, 중앙선 침범, 차선 변경 위반과 같은 특정 위반 사항을 식별하고 분류
  • Object Tracking (객체 추적): 감지된 객체를 연속적으로 추적하여, 해당 객체의 움직임을 모니터링
  • Object Detection (객체 감지): 블랙박스 영상에서 차량 및 사람과 같은 객체를 감지

시각화용 데이터:

  1. 서울시 법규위반별 교통사고 현황 통계:
  2. 법규위반별 교통사고 현황:

위반 사항 분류:

  1. 신호위반
  2. 안전모 미착용
  3. 중앙선 침범
  4. 차선 변경 위반

image.png

데이터:

  1. [AI HUB]비식별화된 교통법규 위반 상황 데이터

20230222_안전모미착용_0000000010_02.jpg

  1. [Kaggle]traffic violation dataset V.3
  2. [Roboflow]Traffic Violation
  3. [AI HUB]차로 위반 영상 데이터

추가 고려 사항:

  • 모델 훈련 및 평가: Object Detection 및 위반 사항 분류 모델을 구축하고 훈련, 모델의 정확성과 성능을 평가하는 방법을 고려
  • 현장 테스트: 모델을 현장에서 테스트하고 실제 도로 환경에서 어떻게 동작하는지 확인
  • 신고 시스템: 위반을 감지한 후, 어떻게 신고를 처리할지에 대한 구체적인 계획이 필요. 법 집행 기관과 협력하여 시스템을 구현해야 할 수도 있음
  • 데이터 보안 및 개인정보 보호: 영상 데이터를 다룰 때 개인정보와 관련된 법률 및 보안 문제에 대한 고려가 필요
  • 실시간 처리: 실시간 데이터를 처리하기 위한 높은 처리량 및 낮은 지연 시간을 갖추는 것이 중요
  • UI/UX 디자인: 사용자가 시스템을 효과적으로 활용할 수 있는 사용자 경험 디자인을 고려
  • 법률적 측면: 법적 제약 사항 및 규정 준수를 고려하여 시스템을 구현

《스마트건설 챌린지 2022 - 도로분야 스마트 기술 경연대회 #3》 - 고속도로 교통법규 위반상황 AI 분석 기술

시각화용 데이터:

  1. 서울시 법규위반별 교통사고 현황 통계:

    https://data.seoul.go.kr/dataList/10865/S/2/datasetView.do

  2. 법규위반별 교통사고 현황:

    https://stat.eseoul.go.kr/statHtml/statHtml.do?orgId=201&tblId=DT_201004_L050013&conn_path=I2&obj_var_id=&up_itm_id=

데이터:

  1. [AI HUB]비식별화된 교통법규 위반 상황 데이터

  2. [Kaggle]traffic violation dataset V.3

  3. [Roboflow]Traffic Violation

  4. [AI HUB]차로 위반 영상 데이터 - 사용

  5. [AI HUB]자동차 차종/연식/번호판 인식용 영상 - 사용

  6. [AI HUB]자율주행차의 다양한 주행환경에서의 신호등 신호정보 인식 데이터셋

  7. [AI HUB]신호등/도로표지판 인지 영상(수도권) - 사용

테스트 영상:

  • 새싹 주차장 직촬 영상
  • 영국 8K 고퀄리티 고속도로 영상

어려웠던 점:

  1. 차량 번호 인식 과정에서
    • 한국 데이터이면서 블락박스 영상인 라벨링된 데이터가 많지 않아서, cctv영상으로 대체하였다

시도:

유투브 YOLO8, EasyOCR을 사용한 번포판 인식: https://www.youtube.com/watch?v=fyJB1t0o0ms&t=580s

진행 과정:

  1. 차량 감지(Vehicle Detection)
  2. 번호판 감지(License Plate Detection)
  3. OCR(Optical Character Recognition)

1. 차량 감지(Vehicle Detection)

  • Model: Yolov8n, Yolov8m

  • Dataset: COCO Dataset

    • 330K images (>200K labeled)

    • 1.5 million object instances

    • 80 object categories

  • Classes: Car, Motorcycle, Bus, Truck

YOLO model structure

차량 트래킹(Object Tracking)

2. 번호판 감지(License Plate Detection)

hyper parameters:

task=detect, mode=train, model=yolov8m.pt, data=/content/License_plate_recognition/dataset/License-Plate-Recognition-4/data.yaml, epochs=500, patience=50, batch=16, imgsz=640, save=True, save_period=-1, cache=False, device=None, workers=8, project=license_plate_detection_yolov8m, name=None, exist_ok=False, pretrained=True, optimizer=auto, verbose=True, seed=0, deterministic=True, single_cls=False, rect=False, cos_lr=False, close_mosaic=10, resume=False, amp=True, fraction=1.0, profile=False, freeze=None, overlap_mask=True, mask_ratio=4, dropout=0.0, val=True, split=val, save_json=False, save_hybrid=False, conf=None, iou=0.7, max_det=300, half=False, dnn=False, plots=True, source=None, show=False, save_txt=False, save_conf=False, save_crop=False, show_labels=True, show_conf=True, vid_stride=1, stream_buffer=False, line_width=None, visualize=False, augment=False, agnostic_nms=False, classes=None, retina_masks=False, boxes=True, format=torchscript, keras=False, optimize=False, int8=False, dynamic=False, simplify=False, opset=None, workspace=4, nms=False, lr0=0.01, lrf=0.01, momentum=0.937, weight_decay=0.0005, warmup_epochs=3.0, warmup_momentum=0.8, warmup_bias_lr=0.1, box=7.5, cls=0.5, dfl=1.5, pose=12.0, kobj=1.0, label_smoothing=0.0, nbs=64, hsv_h=0.015, hsv_s=0.7, hsv_v=0.4, degrees=0.0, translate=0.1, scale=0.5, shear=0.0, perspective=0.0, flipud=0.0, fliplr=0.5, mosaic=1.0, mixup=0.0, copy_paste=0.0, cfg=None, tracker=botsort.yaml, save_dir=license_plate_detection_yolov8m/train

model summary:

from n params module arguments 0 -1 1 1392 ultralytics.nn.modules.conv.Conv [3, 48, 3, 2] 1 -1 1 41664 ultralytics.nn.modules.conv.Conv [48, 96, 3, 2] 2 -1 2 111360 ultralytics.nn.modules.block.C2f [96, 96, 2, True] 3 -1 1 166272 ultralytics.nn.modules.conv.Conv [96, 192, 3, 2] 4 -1 4 813312 ultralytics.nn.modules.block.C2f [192, 192, 4, True] 5 -1 1 664320 ultralytics.nn.modules.conv.Conv [192, 384, 3, 2] 6 -1 4 3248640 ultralytics.nn.modules.block.C2f [384, 384, 4, True] 7 -1 1 1991808 ultralytics.nn.modules.conv.Conv [384, 576, 3, 2] 8 -1 2 3985920 ultralytics.nn.modules.block.C2f [576, 576, 2, True] 9 -1 1 831168 ultralytics.nn.modules.block.SPPF [576, 576, 5] 10 -1 1 0 torch.nn.modules.upsampling.Upsample [None, 2, 'nearest'] 11 [-1, 6] 1 0 ultralytics.nn.modules.conv.Concat [1] 12 -1 2 1993728 ultralytics.nn.modules.block.C2f [960, 384, 2] 13 -1 1 0 torch.nn.modules.upsampling.Upsample [None, 2, 'nearest'] 14 [-1, 4] 1 0 ultralytics.nn.modules.conv.Concat [1] 15 -1 2 517632 ultralytics.nn.modules.block.C2f [576, 192, 2] 16 -1 1 332160 ultralytics.nn.modules.conv.Conv [192, 192, 3, 2] 17 [-1, 12] 1 0 ultralytics.nn.modules.conv.Concat [1] 18 -1 2 1846272 ultralytics.nn.modules.block.C2f [576, 384, 2] 19 -1 1 1327872 ultralytics.nn.modules.conv.Conv [384, 384, 3, 2] 20 [-1, 9] 1 0 ultralytics.nn.modules.conv.Concat [1] 21 -1 2 4207104 ultralytics.nn.modules.block.C2f [960, 576, 2] 22 [15, 18, 21] 1 3776275 ultralytics.nn.modules.head.Detect [1, [192, 384, 576]] Model summary: 295 layers, 25856899 parameters, 25856883 gradients

optimizer: SGD(lr=0.01, momentum=0.9) with parameter groups 77 weight(decay=0.0), 84 weight(decay=0.0005), 83 bias(decay=0.0)

Image sizes: 640 train, 640 val

WandB

3. OCR(Optical Character Recognition)

Model: EasyOCR

Preprocessing steps:

  1. Grayscale Conversion: This simplifies the image by removing color information, making further processing faster and focusing on intensity.

  2. Contrast Enhancement with CLAHE (Contrast Limited Adaptive Histogram Equalization): Improves the contrast of the image, making details more distinct, especially useful in varying lighting conditions.

  3. Gaussian Blur: Reduces noise and smoothes the image, which can help in reducing false edges detected in the subsequent edge detection step.

  4. Canny Edge Detection: Identifies edges in the image. This is useful for finding the boundaries of objects, in this case, the license plate.

  5. Finding Contours and Perspective Transformation: Identifies contours in the image and, if a rectangular contour (assumed to be the license plate) is found, applies a perspective transformation to get a front-facing view of the license plate.

Original Image:

Detected Car:

Grayscale:

CLAHE:

Gaussian Blur:

Canny Edge Detection:

Attempts and Failure:

  • Tracking cars with yolov8:

    • worse outputs compared to Sort, took longer time→ attempted at early stages, improved output expected
  • Clips from Dashboard cam:

    • Car and License Plates were well detected, but video quality too low for OCR

    • phenomenon occurred more frequently when relative speed of vehicle was faster

Room for Improvements:

  • Try variety of Object Detection models for comparison

  • Try variety of OCR models for comparison(TesseractOCR, PaddleOCR)

  • Enhance Video Quality for better detection and recognition

  • Try Segmentation