Skip to content

JJeunbin/face-tracker

Repository files navigation

Face-Tracking Smartphone Holder

본 프로젝트는 실시간 영상 스트리밍, YOLOv8(face 전용) 얼굴 인식, UDP 통신을 통한 ESP32 서보 제어를 결합한 얼굴 추적 시스템입니다. 카메라 영상에서 얼굴을 검출하고, 얼굴 위치 및 크기에 따라 3개의 서보 모터(th1, th2, th3)를 실시간으로 제어합니다.

❗ 주요 구성 요소

사용 라이브러리

  • OpenCV (cv2) : 영상 캡처 및 시각화
  • ultralytics.YOLO : YOLOv8 얼굴 검출 모델
  • socket : ESP32와 UDP 통신
  • time : FPS 계산

⚡ 제어 파라미터 설정

제어 게인 (Gain)

  • GAIN_X : 좌우 회전 민감도
  • GAIN_Y : 상하 회전 민감도
  • GAIN_Z : 거리 조절 민감도

데드존 (Deadzone)

  • 작은 오차에 대해 불필요한 서보 움직임을 방지
  • 각 축별로 허용 오차 범위 설정

✔️ 통신 설정

영상 스트리밍

  • 스마트폰의 "IPWebcam" 앱을 이용하여 실시간 영상 전송
  • 스마트폰과 동일한 WI-FI에 연결된 PC에서 스마트폰의 IP 주소를 이용하여 영상 수신

최신 프레임 유지 클래스 (FrameGetter)

  • 카메라 버퍼 지연(latency) 최소화
  • 항상 가장 최신 프레임만 처리

UPD 통신

  • 시작 시 ESP32로부터 초기 서보 각도 수신
  • UDP 소켓을 사용하여 ESP32로 서보 각도 명령 전송

➰ 메인 루프 동작 과정

1. 프레임 수신

  • 최신 프레임을 읽어와 처리
  • 프레임이 없을 경우 skip

2. 얼굴 검출 (YOLO 추론)

  • 프레임에서 모든 얼굴 bounding box 탐색
  • 크기가 가장 큰 얼굴을 주 타겟(face target) 으로 선택
  • 너무 작은 얼굴은 노이즈로 간주하여 제외

3. 얼굴 위치 및 크기 기반 오차 계산

  • 화면 중심: (320, 240)
  • 계산 항목:
    • del_x : 좌우 오차
    • del_y : 상하 오차
    • size_error : 얼굴 크기 오차 (거리 추정)

4. 서보 제어 로직

  • 좌우 회전 (th1)

    • 얼굴 중심의 x 좌표 오차를 기준으로 제어
    • 오차 크기에 따라 Gain 조절
    • Deadzone 적용
  • 상하 회전 (th3)

    • 얼굴 중심의 y 좌표 오차를 기준으로 제어
    • Deadzone 및 Gain 적용
    • 서보 안전 범위 제한 (50~130) 적용
  • 거리 조절 (th2)

    • 얼굴 크기를 기준으로 거리 추정
    • 얼굴이 작으면 전진, 크면 후진
    • Deadzone 및 Gain 적용

5. 서보 각도 제한

  • 모든 서보 각도를 0~180도 범위로 클램핑 -> 기계적 손상 방지

6. ESP32로 명령 전송

  • UDP 메시지로 서보 각도 실시간 전송
th1:<angle>, th2:<angle>, th3:<angle>

💻 시각화 요소

  • 얼굴 bounding box 표시
  • 얼굴 중심 좌표 표시
  • 화면 중심 기준점 표시
  • 실시간 FPS 출력

🔚 종료 처리

  • ESC 키 입력 시 루프 종료
  • 카메라 스트림 해제
  • OpenCV 윈도우 종료

About

2025-2 종합설계 프로젝트

Topics

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages