본문으로 건너뛰기
Roboflow Blog조회 1

렌터카 손상 검사기 만들기

동영상 업로드로 차량 손상 후보를 검출·트래킹하고 타임스탬프와 전자서명한 보고서를 생성한다.

이 요약은 AI가 원문을 분석해 생성했습니다. 정확한 내용은 원문 기준으로 확인하세요.

TL;DR

한 번의 차량 워크어라운드 동영상을 업로드하면 업로드 시작 전에 파일 지문을 타임스탬프하고 RF-DETR로 프레임별 검출을 수행한 뒤 ByteTrack으로 트래킹해 ParallaxFilter로 반사와 실제 손상을 구분한다. 남은 후보는 Gemini가 구조화된 답변으로 유형·심각도·크기·부위를 판별하거나 거부하고, 최종 결과는 ECDSA P-256으로 전자서명한 PDF와 별도 타임스탬프 체인으로 제공되어 브라우저에서 검증 가능하다. 구현 코드는 공개 GitHub 저장소에 있으며 워크플로 파라미터와 거부 게이트를 튜닝하고 필요시 검출기 재학습으로 성능을 개선할 수 있다.

섹션별 상세

시스템 개요는 사용자가 한 번의 천천히 촬영한 차량 외관 동영상을 업로드하면 업로드 시작 전에 파일 지문을 타임스탬프화하고 청크별로 재개 가능한 업로드를 수행한 뒤, 프레임 샘플링으로 RF-DETR 검출을 실행하고 트래커로 후보를 연결해 최종적으로 언어 모델과 서명된 PDF를 생성하는 엔드투엔드 파이프라인이다. 이 파이프라인은 타임스탬프와 전자서명을 결합해 증거 연쇄를 만들며, 워크플로 정의는 Roboflow Workflows에 저장되어 로컬 또는 호스팅 실행으로 옮길 수 있다. 글은 전체 코드와 워크플로 정의를 포함한 GitHub 저장소를 제공해 재현 가능한 구현을 보장한다.
프레임별 인스턴스 검출에는 RF-DETR-small 모델을 사용하고 모델 훈련과 배포는 Roboflow UI에서 진행했다. 저자는 포크한 차량 손상 데이터셋을 사용해 학습을 끝냈고 결과로 mAP50 69.8과 리콜 65.5를 보고했다. 검출 후보는 의도적으로 낮은 신뢰도(0.2)로 통과시켜 재현성 있는 약한 힌트를 여러 프레임에서 모으는 recall 중심 전략을 채택했다.
프레임 간 연결에는 ByteTrack 트래커를 사용해 per-frame 검출을 트랙으로 합치며 트랙 수명과 최소 연속 프레임 수로 일시적 노이즈를 걸러낸다. 이 과정을 통해 한 프레임에서 놓친 덴트가 다른 프레임에서 잡히면 트래커가 이를 하나의 발견으로 합쳐 누락을 줄인다. 글에서는 트래킹이 한 프레임 글리치를 결과로 연결하지 못하도록 설계해 거짓 양성의 확산을 제한한다고 명시되어 있다.
물리적 이동을 바탕으로 반사와 실제 손상을 구분하는 ParallaxFilter 커스텀 Python 블록은 트랙별 주변 패치의 특징점 링을 잡아 optical flow와 homography로 그 패치가 실제로 어떻게 움직였는지를 예측하고, 예측 위치와 트래커가 제공한 위치의 잔차로 판정한다. 저자는 테스트 영상에서 실제 손상이 프레임 대각선 길이 대비 잔차 0.002–0.005 범위를 보였고, 반사는 0.015를 초과하는 경우가 많아 0.015를 거부 임계값으로 사용했다고 밝혔다. 이 블록 때문에 워크플로는 서버리스로는 배포되지 않고 InferencePipeline으로 로컬 또는 관리형 실행을 통해 운영되어야 했다.
발견물의 의미 판정과 최종 거부권은 Gemini LLM에 맡기되 Gemini는 Detector가 제안한 크롭만 판단하도록 구성해 LLM이 새로운 근거 없는 발견을 추가할 수 없게 차단했다. 구조화된 응답 스키마를 프롬프트로 사용해 손상 타입, 심각도, 크기(cm), 영향을 받은 부위, 기존 손상 지시자, false_positive 여부 같은 필드를 얻고 JSON Parser 블록으로 파싱해 보고서 항목을 채운다. 이 설계는 언어 모델의 판단을 증거(검출 크롭과 트랙) 기반으로 제한해 환각 위험을 낮춘다.
완성된 보고서는 ECDSA P-256으로 전자서명하고 별도 타임스탬프 토큰을 붙여 PDF와 타임스탬프 체인을 공개 검증 페이지에서 브라우저로 재검증하도록 처리한다. 실행 비용은 로컬 GPU 가속 환경에서 1080p 기준 10초 영상당 약 2분의 분석 시간이 들며 Gemini 호출은 Roboflow의 관리 키를 경유해 워크스페이스 크레딧으로 결제되므로 별도 Google 계정이나 청구 설정이 불필요하다. 사용자는 워크플로 파라미터(config.py)와 거부 게이트를 자신의 영상으로 튜닝하고 검출기가 놓친 패턴을 재라벨해 재학습하는 순환 작업으로 성능을 개선할 수 있다.

이미지 분석

워크플로 전체 흐름 다이어그램
Diagram

수평 타임라인 형태의 다이어그램으로 업로드 요청, 객체 검출, 패럴랙스 분석, 평가/거부, 최종 검증의 순서를 시각화한다. 각 단계 아래에는 Data Transfer, Object Tracking, Decision Point 같은 하위 블록이 배치되어 있어 파이프라인의 모듈 구성을 한눈에 파악할 수 있다. 이 그림은 시스템 설계와 논리적 단계 분할을 이해하는 데 핵심적이다.

워크플로 전체 흐름 다이어그램

Roboflow Workflows 편집기에서의 검출→트래커→패럴랙스 블록 연결 스크린샷
Screenshot

세로 레이아웃의 워크플로 편집 화면으로 Inputs, damage_detector, tracker, parallax 블록이 순서대로 연결된 모습을 보여준다. 각 블록 사이에 전달되는 필드(예: det_confidence, track_activation_threshold)가 보이므로 파라미터 주입 방식과 데이터 흐름을 재현하기에 유용하다. 워크플로 정의를 그대로 가져와 재구성할 수 있음을 시사한다.

Roboflow Workflows 편집기에서의 검출→트래커→패럴랙스 블록 연결 스크린샷

검출기 블록의 추가 속성 패널과 커스텀 신뢰도 입력 화면
Screenshot

damage_detector 블록의 속성 패널을 확대해 보여주며 Model 식별자, Confidence Mode, Custom Confidence 필드에 inputs.det_confidence가 연결된 것을 볼 수 있다. 이 스크린샷은 낮은 신뢰도로 후보를 통과시키고 후처리로 여과하는 detect-low-then-filter-later 전략의 구현 디테일을 직접 확인하게 해준다. 또한 워크플로 블록 간 필드 매핑 방식이 명확하다.

검출기 블록의 추가 속성 패널과 커스텀 신뢰도 입력 화면

ByteTrack 트래커 블록의 속성 화면과 트랙 관련 임계값들
Screenshot

tracker 블록의 필드 패널에 Minimum IoU Threshold, Minimum Consecutive Frames, Lost Track Buffer 값이 표시되어 트랙 유지와 ID 관리 방식이 드러난다. 왼쪽 Additional Properties에 Track Activation Threshold가 inputs.track_activation_threshold로 연결된 점은 검출 신뢰도 기준으로 트랙 활성화를 조절하는 설계를 보여준다. 이 정보는 트래커 튜닝과 거짓 양성 제어에 직접적으로 활용된다.

ByteTrack 트래커 블록의 속성 화면과 트랙 관련 임계값들

입력 이미지→Gemini 평가자→JSON Parser→Outputs로 이어지는 보강 워크플로 스크린샷
Screenshot

assessor 블록이 Gemini로 표기된 워크플로 화면으로, Gemini가 구조화된 응답 스키마로 손상 속성과 false_positive 여부를 반환하고 JSON Parser가 이를 Outputs로 연결하는 흐름을 보여준다. 이 이미지는 LLM 기반 보강 단계가 증거 기반 판정을 위해 어떻게 구조화되어 있는지를 명확히 한다. Gemini 결과가 파싱되어 차량 정보·평가에 반영되는 전체 루프를 시각적으로 확인할 수 있다.

입력 이미지→Gemini 평가자→JSON Parser→Outputs로 이어지는 보강 워크플로 스크린샷

용어 해설

시차 기반 필터(Parallax Filter)
카메라가 차량을 따라 이동할 때 패널 표면 위의 물리적 손상과 반사광의 움직임을 구분하기 위해 추적된 박스 주변의 특징점을 추출하고 광류 및 호모그래피로 예측 이동 위치와 실제 트랙 위치의 잔차를 계산하는 절차로, 잔차가 작으면 고정된 손상으로 간주하고 크면 반사로 배제한다. 구현은 트랙별로 패치의 특징점 링을 추출하고 연속 프레임 간 optical flow와 homography로 이동을 예측한 뒤 잔차 임계값과 비교하는 방식으로 작동한다. 글에서 제시한 테스트 수치로는 실제 덴트 잔차 0.002–0.005, 거부선 0.015가 있었다.
인증된 비디오 타임스탬프(Authenticated Video Timestamping)
업로드 시작 전에 비디오의 해시를 계산해 독립 타임스탬프 기관에 전송하고 업로드된 파일이 동일한 해시와 일치하는지를 서버에서 검증해 증거 연쇄를 만드는 방식으로, 타임스탬프는 비디오가 특정 시각에 존재했음을 외부에서 검증 가능하게 만든다. 본 파이프라인은 업로드 시작 전에 약 백 바이트의 지문만 타임스탬프 기관에 보내고, 이후 청크 업로드 완료 시 서버가 파일 해시와 대조해 일치 여부를 확인한다. 최종 보고서 PDF에도 별도 타임스탬프 토큰을 추가해 비디오 존재 시각과 보고서 생성 시각을 분리해 기록한다.
재개 가능한 청크 업로드(Resumable Chunk Upload)
대용량 비디오를 작은 청크로 나누어 순차적으로 업로드하고 네트워크 중단 시 중단된 지점부터 재개하도록 설계된 전송 방식으로, 서버는 각 청크를 받아 전체 파일의 무결성을 해시로 확인해 원본과 일치하는지 판정한다. 글에서는 클라이언트가 해시와 타임스탬프를 미리 등록한 뒤 청크 업로드를 시작해 서버가 마지막에 동일한 해시를 확인한다고 명시되어 있다. 이 구조는 모바일 네트워크 환경에서 전송 실패 리스크를 줄이고 업로드 인증을 가능하게 한다.
ECDSA P-256 전자서명(ECDSA P-256)
완성된 보고서를 전자서명하기 위해 ECDSA P-256 곡선을 이용한 공개키 기반 서명 방식을 적용해 PDF 위변조를 방지하고 서명 유효성을 브라우저에서 검증할 수 있게 하는 보안 절차로, 서명과 별도의 타임스탬프 토큰을 함께 보관해 증거 연쇄를 완성한다. 글에서는 openssl 커맨드 한 줄로 서명키를 만들 수 있다고 안내하며, 브라우저 상의 공개 검증 페이지가 보고서 무결성과 타임스탬프를 재확인한다고 적혀 있다. 이 방식은 서버가 아닌 독립 검증자가 PDF와 타임스탬프 체인을 검사하도록 허용한다.

코드 예제

python
pipeline = InferencePipeline.init_with_workflow(
    video_reference=str(video),
    workflow_specification=spec,
    on_prediction=sink,
    workflows_parameters={"det_confidence": 0.2},
)

동영상에서 사용자 정의 Python 블록을 포함한 워크플로를 서버리스 대신 로컬 프로세스에서 실행할 때 사용하는 초기화 호출이다. video_reference로 분석할 영상 경로를 넘기고 workflow_specification에 워크플로 정의를 전달하며 on_prediction 콜백으로 결과를 수집한다. det_confidence 파라미터로 워크플로 내부의 검출기 임계값을 주입해 낮은 신뢰도로 모든 후보를 통과시킨 뒤 후처리로 여과하는 전략을 구현한다.

근거 모음

근거
  • 모델 훈련 성능으로 mAP50 69.8과 리콜 65.5를 얻었다. 본문의 'My model achieved a 69.8 mAP50 with 65.5 recall.' 문장과 train 섹션 출처
  • ParallaxFilter 테스트에서 실제 덴트 잔차는 프레임 대각선 대비 0.002–0.005였고 거부선은 0.015로 설정했다. 패럴랙스 필터 설명 부분의 잔차 수치(0.002–0.005)와 거부선(0.015) 출처
  • 동영상 업로드 지문은 업로드 시작 전에 약 100바이트로 타임스탬프되어 전송된다. 업로드 흐름 설명에서 'about a hundred bytes'로 지문을 타임스탬프한다고 명시된 문장 출처
  • 커스텀 Python 블록을 포함한 워크플로는 Roboflow의 서버리스 API에서 실행되지 않아 InferencePipeline으로 로컬(in-process) 실행해야 한다. Custom Python blocks don't run on the serverless API 문단과 InferencePipeline.init_with_workflow 코드 스니펫 출처
  • 분석은 M-series 노트북에서 GPU 가속으로 1080p 영상 10초당 약 2분이 소요된다. 비용/실행 시간 단락의 'about two minutes per ten seconds of 1080p footage on an M-series laptop, GPU-accelerated' 문장 출처

기술

  • RF-DETR-small
  • ByteTrack
  • Google Gemini
  • Roboflow Workflows
  • InferencePipeline
  • ECDSA P-256
  • Next.js
  • Python 3.12

활용 사례

  • 렌터카 반환 시점의 손상 증거 수집 및 인증
  • 보험 청구에 대한 자동화된 전자 증거 제공
  • 차량 대여사·플릿 관리의 입출고 손상 기록 자동화
AI 분석 전체 내용 보기

AI 요약 · 북마크 · 개인 피드 설정 — 무료

출처 · 인용 안내

원문 발행 2026. 08. 07.수집 2026. 08. 07.출처 타입 RSS

인용 시 "요약 출처: AI Trends (aitrends.kr)"를 표기하고, 사실 확인은 원문 보기 기준으로 진행해 주세요. 자세한 기준은 운영 정책을 참고해 주세요.