Skip to content
@Qualcomm-Capstone

Qualcomm-Capstone

Overspeed vehicle detection and alert system - with Qualcomm

v1 : 2025.03.20-2025.05.30
v2 : 2026.12.29-2025.01.30

실시간 과속탐지 및 알림 시스템

Rubik Pi 보드에서 YOLO 기반 객체 감지와 속도 측정을 통해 과속 차량을 탐지하고,
서버로 정보를 전송해 실시간 알림까지 제공하는 스마트 교통 시스템


🖥️ Demo

시연 영상

https://www.youtube.com/watch?v=FDzbjOeika8

메인페이지(과속 차량 목록보기)

과속 차량 개별 보기

알림 확인하기




🏛️ System Architechture

image

자세히 보기

기존 시스템 아키텍처의 문제점

기존 아키텍처는 다음과 위와 같은 구조(Before)를 가지고 있었습니다

이 구조에서 다음과 같은 4가지 핵심 문제가 발생했습니다.

  • OCR 동기 처리로 인한 서버 처리량 저하
  • 느린 응답으로 인한 Edge Device 블로킹
  • HTTP 기반 IoT 통신의 구조적 한계
  • OCR 장애가 전체 서비스에 전파

새로운 아키텍처의 설계

위 문제들을 해결하기 위해 Event Driven Architecture로 전환했습니다.

  • 비동기 이벤트 처리로 서버 처리량 극대화
  • 즉시 응답으로 Edge Device 해방
  • MQTT 프로토콜로 IoT 최적화
  • 완전한 장애 격리와 독립적 확장

정리

Before vs After 비교

문제 영역 Before After
OCR 처리 Django 동기 (블로킹) OCR-Worker 비동기
응답 시간 3초+ < 100ms
IoT 프로토콜 HTTP (오버헤드) MQTT (경량, QoS)
메시지 보장 없음 At least once
장애 격리 전체 영향 컴포넌트 격리
확장성 서버 전체 확장 Worker별 독립 확장
데이터베이스 단일 DB 서비스별 4개 DB

기존 아키텍처의 근본적 한계였던 OCR 동기 처리를 제거하고, Event Driven Architecture로 전환함으로써

  1. 서버 처리량 극대화: API 서버는 이벤트 발행만 담당, OCR은 별도 Worker가 병렬 처리
  2. Edge Device 효율화: 즉시 응답으로 연속 감지 가능, 데이터 유실 방지
  3. IoT 최적화: MQTT 프로토콜로 경량화, 메시지 전달 보장, 오프라인 대응
  4. 운영 안정성: 장애 격리, 독립적 확장, 이벤트 보존으로 시스템 복원력 확보


🛠️ Tech Stack

Frontend



Backend



Infra



etc




Notification System Design

Django - RabbitMQ - Celery - FCM(3rd party Service) feat. Ack & Nack

Dead Letter Queue & Dead Letter Consumer

reference

Rubik Pi 3

Qualcomm 기반 Rubik Pi 하드웨어에서 YOLO 객체 탐지와 GStreamer를 활용해, 실시간으로 과속 차량을 감지하는 완전한 엣지 기반 시스템. 카메라 입력부터 추론, 트래킹, 속도 측정, 과속 차량 촬영까지 모든 과정을 로컬에서 처리하므로 클라우드 연산 불필요.

Rubik Tech Stack

Category Technologies
Hardware Rubik Pi 3, IMX477 image sensor, 10MP HQ Lens(16mm)
Object Detection YOLOv5m
Acceleration Qualcomm SNPE + TFLite delegate
Pipeline GStreamer
Programming Python
Features On-device tracking, speed measurement, snapshot, multithreading

Object Tracking (IoU)

IoU를 계산하여, 다음프레임의 객체가 같은 객체인지 판단

Speed Measurement

Method 1 (Not Used)

프레임간 중심 좌표의 이동거리 변화로 속도를 측정

Method 2 (✅Selected)

가상의 두 선을 그어놓고, 두 선을 동과하는데 걸리는 시간을 측정

하지만, 이 방법은 가상의 두 선 사이의 실제 도로 거리를 알아야 정확히 측정 가능

Multi Threading

병목 현상을 최소화 하기 위해서 멀티 스레딩을 사용

  • 메인 스레드
  • 트래킹, 속도 측정 스레드
  • 사진촬영 및 전송 스레드


📁 API

Swagger

Postman


🔍 Monitoring

Portainer

RabbitMQ

Flower(celery monitoring


📓 How to Start

Clone Repository

docker repository를 클론합니다.

Frontend

Install Packages

패키지 설치를 합니다.

npm install

Add Environment Files

환경 파일을 생성해 줍니다.

.env

VITE_API_BASE_URL=http://localhost:8000/api
VITE_FIREBASE_API_KEY=YOUR_FIREBASE_API_KEY
VITE_FIREBASE_AUTH_DOMAIN=YOUR_FIREBASE_AUTH_DOMAIN
VITE_FIREBASE_PROJECT_ID=YOUR_FIREBASE_PROJECT_ID
VITE_FIREBASE_STORAGE_BUCKET=YOUR_FIREBASE_STORAGE_BUCKET
VITE_FIREBASE_MESSAGING_SENDER_ID=YOUR_SENDER_ID
VITE_FIREBASE_APP_ID=YOUR_FIREBASE_APP_ID
VITE_FIREBASE_VAPID_KEY=YOUR_FIREBASE_VAPID_KEY

Getting Started

마지막으로 개발 서버를 열어줍니다.

npm run dev

See Result

http://localhost:5173 에 접속하여 결과물을 조회합니다.

Backend

Add Environment Files(.env)

/.env

DATABASE_NAME= capstone
DATABASE_USER= sa
DATABASE_PASS= 1234
DATABASE_HOST=
DATABASE_PORT=
SECRET_KEY=





Docker Run Command

백엔드 서비스를 시작하기 위해 다음 Docker Compose 명령어를 실행합니다.

docker-compose -p teaml -f Solomon-Docker/docker-compose.prod.yml up -d -—build

Member

Pictures
Name 이상훈 진민우 최명헌 서정찬
Position Leader
Backend
DevOps
Design
Rubik Pi
Tracking
Calculate
YOLO
Backend
Frontend
GitHub


Popular repositories Loading

  1. detection detection Public archive

    Rubik-Pi object detection

    Python 1 1

  2. backend backend Public

    Python

  3. frontend frontend Public

    TypeScript

  4. depoly depoly Public

    Shell

  5. .github .github Public

Repositories

Showing 5 of 5 repositories

Top languages

Loading…

Most used topics

Loading…