YOLOv8 + GPS + Civic API를 활용한 대시캠 포트홀 탐지기 제작 과정
요약
본 기사는 대시캠 비디오를 활용하여 포트홀을 탐지하고 공공 민원 API에 자동으로 보고하는 시스템 구축 과정을 다룹니다. YOLOv8로 포트홀을 실시간 탐지한 후, GPS 데이터를 시간 기반으로 매칭하고 지리 해싱 및 클러스터링 기법을 적용해 중복 신고를 방지합니다. 최종적으로 자동화된 파이프라인을 통해 민원 API에 정보를 게시하는 방법을 설명합니다.
핵심 포인트
- YOLOv8과 OpenCV를 활용하여 포트홀을 실시간으로 탐지할 수 있습니다.
- GPS 데이터를 시간 기준으로 매칭하고 보간(interpolation)하는 과정이 중요합니다.
- 클러스터링 기법(geo-hashing 등)을 사용해 중복 민원 제기를 방지해야 합니다.
- 자동화된 파이프라인을 구축하여 공공 민원 API에 직접 정보를 게시할 수 있습니다.
🌐 실시간 데모 (LOOK · UNDERSTAND · BUILD): https://dev48v.infy.uk/solve/day2-pothole-detector.html
SolveFromZero의 2일차 과제입니다. 실제 해커톤 문제를 선정하여 작동하는 솔루션을 만드세요. 오늘의 주제는 Smart India Hackathon에서 가져왔습니다: 인도 도로는 매년 약 9백만 개의 포트홀을 가지고 있습니다. 지방 자치 단체의 민원 제기는 시민들이 각 포트홀을 수동으로 사진 찍어 올리는 것에 의존합니다. 따라서 대시캠 비디오를 모니터링하여 포트홀을 탐지하고, GPS 태그를 지정하며, 이를 공공 민원 API에 게시하는 시스템을 구축해야 합니다.
이 방법은 쓰레기 매립지, 불법 주차, 표지판 누락, 침범 등 모든
- 비디오 메타데이터에 내장됨 (GoPro GMD 원격 측정, Garmin VIRB)
- 병렬 GPX 파일 (대부분의 전용 대시캠)
- 별도의 휴대폰 로그 (휴대폰 기반 녹화기를 사용한 경우)
각 비디오 프레임의 타임스탬프를 가장 가까운 GPS 샘플에 매칭합니다:
import gpxpy
gpx = gpxpy.parse(open("track.gpx"))
points = [(p.time, p.latitude, p.longitude)
...
시간을 기준으로 이진 검색(Binary search)을 수행하고, 가장 가까운 두 GPS 고정점 사이를 보간(interpolate)합니다.
5단계 — 중복 탐지 클러스터링 (Cluster duplicate detections)
한 포트홀을 지나가면 → 연속된 30개 프레임에 걸쳐 나타납니다. 클러스터링 없이는 같은 구멍에 대해 30건의 민원을 제기하게 됩니다. 탐지된 항목들을 약 10m 이내로 그룹화하여 하나의 민원으로 처리하고, 가장 높은 신뢰도를 가진 프레임을 증거로 유지합니다.
간단한 근사치: 위도/경도를 소수점 4자리까지 반올림하면 (적도에서 약 11m) 됩니다. 이 반올림된 튜플을 기준으로 그룹화합니다.
from itertools import groupby
def key(d):
...
실제 서비스에서는 규모에 맞춰 적절한 지리 해싱(geo-hashing, Uber의 H3 라이브러리)을 사용해야 합니다. 해커톤 데모의 경우 반올림으로도 충분합니다.
6단계 — 시빅 API 게시 (Post to civic API)
대부분의 인도 지방 자치 단체는 2023~2024년에 JSON 민원 API를 출시했습니다. MCGM(뭄바이), BBMP(벵갈루루), MCG-Pune, GHMC(하이데라바드) 등이 있습니다. 형식은 다양하지만 구조는 보편적입니다:
import requests
for cluster in clusters:
requests.post("https://api.mcgm.gov.in/v1/complaints", json={
...
지방 자치 단체의 대시보드는 이미 존재합니다. 여러분의 임무는 **자동 민원 제기 파이프라인(auto-filing pipeline)**입니다.
지금 바로 시도해보기
3단계 학습 페이지에는 시뮬레이션된 대시캠 + 실시간 YOLO 바운딩 박스 오버레이 + 실시간으로 접수되는 민원 피드가 있습니다:
https://dev48v.infy.uk/solve/day2-pothole-detector.html
- 확인 (LOOK) — 시뮬레이션된 주행을 시작하고, 신뢰도 임계값(confidence threshold)을 드래그하여 탐지되는 항목이 나타나거나 거부되는 것을 확인합니다.
- 이해하기 (UNDERSTAND) — YOLO, OpenCV, 임계값 조정, GPS 페어링, 클러스터링을 설명하는 9가지 클릭 가능한 단계입니다.
- 구축하기 (BUILD) — 실제
pip install명령어가 포함된 전체 Python 파이프라인입니다.
이것이 제공하는 것
동일한 골격(skeleton)은 모든 프레임별 민간 시설물 탐지(civic detection)에 적용할 수 있습니다:
| 문제 | 모델 교체 |
|---|---|
| 포트홀 탐지 | pothole-yolov8n.pt |
| ... |
비디오 루프 + 탐지(detect) + 임계값(threshold) + GPS + 클러스터링(cluster) + POST 형태는 불변합니다.
SolveFromZero의 다음 계획
Day 3: AI 작물 질병 식별기 (Smart India Hackathon). 잎 사진 → 질병 분류 및 치료법 제안. 마을 농업 지도 담당자 주머니 속 에지 AI(Edge AI).
AI 자동 생성 콘텐츠
본 콘텐츠는 Dev.to AI tag의 원문을 AI가 자동으로 요약·번역·분석한 것입니다. 원 저작권은 원저작자에게 있으며, 정확한 내용은 반드시 원문을 확인해 주세요.
원문 바로가기