Home 차량 블랙박스 영상속 도로 교통 법규 위반 차량 감지
Post
Cancel

차량 블랙박스 영상속 도로 교통 법규 위반 차량 감지

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

프로젝트 목표:

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

주요 구현 요소:

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

시각화용 데이터:

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

위반 사항 분류:

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

image.png

데이터:

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

![20230222안전모미착용_0000000010_02.jpg](https://file.core.today/editor/image/20231030/20230222%EC%95%88%EC%A0%84%EB%AA%A8%EB%AF%B8%EC%B0%A9%EC%9A%A9_0000000010_02386cd40.jpg)

  1. [Kaggle]traffic violation dataset V.3
    • https://www.kaggle.com/datasets/meliodassourav/traffic-violation-dataset-v3
  2. [Roboflow]Traffic Violation
    • https://universe.roboflow.com/computer-vision-uiivc/traffic-violation-0ufqq/browse?queryText=&pageSize=50&startingIndex=0&browseQuery=true
  3. [AI HUB]차로 위반 영상 데이터
    • https://aihub.or.kr/aihubdata/data/view.do?currMenu=115&topMenu=100&aihubDataSe=data&dataSetSn=628

      추가 고려 사항:

  • 모델 훈련 및 평가: 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

This post is licensed under CC BY 4.0 by the author.

SeSAC 3주년 프로젝트

Docker 실습