정지선에서도 신호등이 보이게: trafficlight 앱을 만든 이유

📱 Google Play에서 trafficlight 앱 다운로드 (프로젝트명 LightSignal · Android 전용)
⚠️ 운전 보조 도구입니다. 신호 확인과 운전 판단의 최종 책임은 운전자에게 있습니다.

0. 서론

. 정지선에 맞춰 서면 오히려 신호등이 시야 밖으로 사라지는 구조
. 신호등이 차량 바로 위쪽 각도에 위치, 앞유리 상단 프레임에 가려짐
. 고개를 숙이거나 앞으로 밀고 나가야만 신호 확인이 가능한 상황이 매번 반복
. 이 불편함이 trafficlight 앱 제작의 시작점

운전자 시야에서는 신호등이 잘 보이지 않는 실제 주행 사진
사람 눈에는 신호등이 잘 안 보이는 상황
trafficlight 앱 화면에서는 멀리 있는 빨간 신호등이 Red로 인식되어 표시된 모습
핸드폰 화면에서는 신호등이 인식됨 (Red)

1. 아이디어의 시작 – 벤츠

. 벤츠 일부 모델 – 정지 시 전면 카메라 화면을 UI(클러스터/센터 디스플레이)에 표시. HUD 아님
. 다만 카메라 영상만 보여줄 뿐, 신호등 인식 기능은 없음
. “정지 시 화면으로 앞을 보여준다”는 아이디어에서 착안 → 신호등 인식 기능 추가가 trafficlight 앱의 출발점

벤츠 차량이 정지 시 센터 디스플레이에 전면 카메라 화면과 신호등 표시 기능을 보여주는 사진
벤츠 – 정지 시 센터 디스플레이에 표시되는 전면 카메라 화면 (“신호등 표시” 옵션)

2. 사용법 – 실시간 온디바이스 인식

. 앱 실행 → 카메라 화면에서 실시간으로 신호등 인식 (온디바이스, 서버 전송 없음)
. 인식 결과(빨강/초록)와 신뢰도를 화면에 바로 표시
. 인식이 잘 안 되는 경우 – 화면을 탭하면 해당 화면이 오류 제보 메일로 전송 → 모델 개선에 활용

실제 동작 영상
trafficlight 앱 화면에서 빨간 신호등을 Red 83% 신뢰도로 인식한 화면
빨간불 인식 (Red 83%)
trafficlight 앱 화면에서 초록 신호등을 Green 85% 신뢰도로 인식한 화면
초록불 인식 (Green 85%)

. 화면을 계속 켜두지 않아도 되도록 백그라운드 팝업 모드도 지원 – 네비게이션 등 다른 앱 위에 작은 창으로 오버레이되어 인식 결과를 계속 보여줌

trafficlight 앱이 백그라운드 팝업 형태로 네비게이션 앱 위에 오버레이되어 표시되는 화면
백그라운드 팝업 – 네비게이션 앱 위에 오버레이된 모습

3. Vibe Coding으로 개발

. 이번에도 바이브코딩 방식으로 진행
. 처음부터 완벽한 설계보다, AI와 대화하며 빠른 프로토타입 제작 후 반복 수정하는 방식
. 아이디어에서 실제 앱까지 걸리는 시간 대폭 단축

4. 인식률 개선

. 인식 모델은 YOLO 사용
. 현재 배포 모델(yolov8n, custom_data 재학습) – mAP50-95 0.7141, Red recall 0.9434
. 쉽게 말해, 빨간불은 100번 중 약 94번 잡아내는 수준
. .pt → ONNX → onnx2tf 변환을 거쳐 float16 가중치(float32 입출력)로 온디바이스 배포

4.1 COCO 데이터셋의 함정 – 세로형 vs. 가로형

. 초기 기본 COCO 데이터셋으로 학습 → 정확도 낮음
. 원인 확인 – COCO 신호등 대부분 유럽 기준 세로형, 한국은 가로형 → 형태 불일치가 원인

유럽 세로형 신호등과 한국 가로형 신호등 비교 다이어그램
세로형(유럽) vs 가로형(한국) 신호등 형태 비교

. 한국 신호등 형태에 맞춘 커스텀 데이터셋으로 재구성 → 인식률 개선
. 유럽형 라벨은 cocoTraffic(COCO 서브셋 재라벨링), 한국형 데이터는 Roboflow의 Korean Traffic Light 데이터셋을 활용

5. 모델 갱신 파이프라인 반자동화

. 인식 모델 – 한 번 만들고 끝나는 게 아니라 지속적인 데이터 수집과 재학습이 필요한 작업
. 수동 반복 대신 아래 흐름으로 파이프라인 반자동화 → 모델 갱신 시간과 수고 절감

미인식 사례 접수부터 재학습까지 이어지는 모델 갱신 파이프라인 다이어그램
모델 갱신 파이프라인 (반자동화)
  1. 이메일로 미인식 사례 접수
  2. 신규 모델로 재확인
  3. 그래도 인식이 안 되면 pool에 적재
  4. Cloud AI로 바운딩 박스(경계) 획득
  5. 주기적으로 재학습

. 이 구조 덕분에 수작업 라벨링 없이도, 쌓인 미인식 데이터가 자동으로 다음 학습 사이클에 반영됨
. 새 모델이 나오면 앱에서 바로 업데이트 확인 가능

trafficlight 앱의 신호등 모델 버전 안내 및 업데이트 확인 다이얼로그
새 모델 버전 안내 – 앱 내에서 바로 업데이트 확인 가능

6. 회고 – 나의 역할, 세 가지로 정리해본 리뷰

바이브코딩으로 앱 하나를 통째로 만들고 나니, “그럼 나는 이제 뭘 해야 하지?”라는 질문이 남았다. 코드를 한 줄도 안 짰다고 하면 거짓말이지만, 이번 프로젝트에서 시간을 가장 많이 쓴 곳을 돌아보니 대략 세 가지 역할로 정리가 됐다.

6.1 문제를 정의하는 역할

정지선에서 신호등이 안 보인다는 불편함을 “무엇을 해결해야 하는가”로 바꾸는 일은 AI가 대신해주지 않았다. 벤츠 사례를 참고 삼아 방향을 잡은 것도 이 단계였다.

리뷰: 문제를 명확히 정의하지 못하면, AI는 엉뚱하게 잘 만든 결과물을 내놓는다. 이 역할만큼은 아직 내 몫이라는 확신이 든다.

6.2 판단하고 검증하는 역할

AI가 내놓은 코드와 인식 결과가 실제 주행 상황에서 쓸만한지 확인하는 일. 인식 로직을 어떻게 개선할지, 데이터셋을 다시 구성할지 같은 판단도 여기서 나왔다.

리뷰: 판단 자체도 언젠가 AI가 더 잘하게 될 것 같다는 불안은 있다. 그래도 지금은, “이게 맞다/아니다”를 결정하는 감각까지 넘기고 싶지는 않다.

6.3 다음 방향을 제시하는 역할

인식률이 낮으면 왜 낮은지 파고들고, 파이프라인을 어떻게 자동화할지 방향을 제시하는 일. 코드는 AI가 짜지만, “다음엔 뭘 해야 하는가”는 매번 내가 물었다.

리뷰: 이 역할이 가장 오래 남을 것 같다는 생각이 든다. 다만 이것도 언젠가 AI가 스스로 다음 방향을 제안하게 되면, 그때는 정말로 “나는 뭘 해야 하지?”라는 질문에 다시 부딪힐 것 같다.

그래서 아직 답은 없다. 다만 이 세 가지 역할 중 어디까지가 계속 내 몫으로 남을지, 다음 프로젝트에서도 지켜보는 중이다.

7. 결론

  1. 벤츠의 ‘정지 시 카메라 UI’에서 착안 – 신호등 인식 앱 개발
  2. 바이브코딩으로 빠른 프로토타이핑
  3. 한국형 커스텀 데이터셋 구성 – 인식률 개선
  4. 파이프라인 반자동화 – 모델 갱신 부담 감소

정지선에서도 신호등이 보이게 만드는 것 – 이 한 문장이 목표였습니다.

⚠️ 본 앱은 운전 보조 도구입니다. 신호 확인과 운전 판단의 최종 책임은 항상 운전자에게 있으며, 앱 화면 주시로 인해 전방 주시가 소홀해지지 않도록 주의해 주세요.

👉 Google Play에서 trafficlight 앱 다운로드


참고

답글 남기기

이메일 주소는 공개되지 않습니다. 필수 필드는 *로 표시됩니다