콘텐츠로 이동

Object Detection

examples/object-detection.ipynb는 Line Tracing의 골격을 그대로 두고 색 필터를 신경망으로 교체합니다. 사전학습된 YOLOv8 모델이 카메라 영상에서 물체를 찾고, 차는 그중 하나를 쫓아갑니다 — 타깃 클래스(기본: sports ball)의 가장 큰 검출을 향해 조향하고, 가까워지면 멈추고, 놓치면 제자리에서 돌며 탐색합니다. 인식 → 제어 루프는 같고, '보는 일'만 달라졌습니다.

모델은 예제에 동봉되어 있습니다(examples/assets/object-detection/models/): COCO 80 클래스로 학습된 YOLOv8n을 로봇 CPU에서 가장 빠른 백엔드인 NCNN으로 내보낸 것입니다. 다운로드도, GPU도 필요 없습니다.

노트북 구성

하는 일
1. Setup camera()·drive() 헬퍼와 스냅샷 한 장
2. Detect 모델 로드, 80개 클래스 이름 출력, 한 프레임 검출 후 박스 그리기
3. Chase 검출 박스가 오버레이된 실시간 웹 뷰, 이어서 초당 약 10회의 추격 루프

실행

  1. examples/object-detection.ipynb를 열고 Python 3 (PhysiCar AI) 커널을 선택하세요.
  2. 셀을 위에서 아래로 실행하세요. 추격 셀은 ⏹ (인터럽트) 를 누를 때까지 돌고, 그때 차를 대신 멈춰 줍니다.
  3. app.physicarMYAPP 탭에서 모든 검출이 박스로 표시되고 타깃이 강조된 카메라를 지켜보세요. 타깃 클래스의 물체가 실제로 월드에 있어야 합니다 — 기본 sports ball이라면 축구공.

추격 원리

  • 모델에 타깃 클래스만 요청합니다(classes=[...]) — 비슷한 물체 옆에서도 타깃이 결과에서 밀려나지 않습니다.
  • 가장 큰 박스 → 그 중심의 화면 중앙 대비 오프셋 → 비례 조향(STEER_GAIN 30).
  • 속도는 전부 아니면 전무: 박스가 프레임 높이의 NEAR_HEIGHT(45%)를 채울 때까지 SPEED 0.8 m/s — 채우면 도착으로 보고 멈춥니다.
  • 놓쳤을 때? 한 프레임 깜빡임은 놓친 게 아닙니다 — LOST_TIMEOUT(1.0초)이 지나야 제자리에서 돌며 탐색합니다.
  • 신뢰도는 일부러 낮게(conf=0.15) — 멀리 있는 작은 물체도 잡히게. imgsz=320은 약간의 정확도를 내주고 프레임당 연산을 약 4배 아낍니다.

고쳐보기

  • TARGET — 2번 셀이 출력하는 80개 클래스 이름 중 아무거나. person으로 바꾸면 실물 키트에서 follow-me 로봇이 됩니다.
  • NEAR_HEIGHT(0.45) — 얼마나 가까이 가서 도착 판정을 할지.
  • conf(0.15) — 배경의 엉뚱한 물체가 잡히면 올리세요.
  • SPEED / STEER_GAIN — Line Tracing과 같은 P 제어 감각.

주의

  • 아무것도 검출되지 않는다면? 타깃 클래스가 실제로 화면에 보여야 합니다 — 루프를 의심하기 전에 2번 셀의 단일 프레임 테스트부터 확인하세요.
  • 모델 로드 직후 첫 프레임들은 느립니다 — 몇 초 지나면 안정됩니다.
  • 5000 포트가 사용 중이면 웹 뷰만 건너뜁니다(안내 출력) — 추격은 그대로 동작합니다.

🛠 미션: 시뮬레이터 뷰어에서 추격 중인 공을 드래그해 다른 곳으로 옮기고, 탐색 동작이 공을 다시 찾아내는 것을 지켜보세요. 그다음 TARGET을 바꿔 다른 것을 쫓아가 보세요.

더 알아보기

사전학습 모델 활용 → AI & LLM. 카메라와 센서 → 로봇 구조 & 센서. 로봇 엔드포인트 → Web API.

AI