Raspberry Pi, Python3 및 Open CV에서 얼굴 추적 카메라
13034 단어 Raspberrypi3Python3OpenCV
RaspberryPi
초보자입니다.RaspberryPi
, 카메라, 서보 모터를 사용하여 얼굴 추적을 수행합니다.@PonDad 씨의 기사를 참고로 했습니다. @PonDad 감사합니다.
Raspberry Pi 서보 모터와 Open CV에서 얼굴 추적 카메라 (Haar-like)
그러나 자신의 환경에서는 @PonDad의 기사대로 잘 작동하지 않았기 때문에
face_tracking.py
를 다음과 같이 변경했습니다.환경
PCA9685.py
가 필요합니다. 개요
OpenCV
의 Haar-like特徴分類器
를 사용하여 얼굴 인식합니다.haarcascade_frontalface_alt.xml
를 이용한 얼굴 인식을 사용하면, cascade.detectMultiScale()
메소드를 이용해 얼굴의 범위를 나타내는 좌표를 취득할 수가 있습니다.
이 좌표로부터 얼굴의 중심점의 좌표를 계산해, 스트리밍 화면의 중심점과 얼굴의 중심점의 차이가 줄어드는 방향으로, 서보 모터로 카메라를 이동합니다. 이 동작을 반복하면 카메라가 얼굴을 추적할 수 있습니다.
코드 변경
@PonDad 님의 기사에서 변경
@PonDad 님의 기사에서 변경
cap.set(4, 320)
에서 cap.set(4, 240)
로 변경했다. 데스크탑상에 표시되는 스트리밍 이미지의 윈도우 사이즈를 320*240으로 했다. (150+600)/2=375
)로 이동. now_degree_x
와 now_degree_y
를 서보의 중립인 375 로 변경. *0.4
를 *0.06
로 변경했습니다. 곱셈의 값을 여러가지 변경해 가장 움직임이 좋았던 값으로 변경했다. 이 부분은 시행 착오의 결과로 적절하게 결정되었다. 값이 클수록 빨리 움직이지만 너무 크면 지나친다. 자신의 환경에서는 0.04에서 0.06 정도가 좋은 느낌. time.sleep(0.1)
는 없어도 지장이 없었기 때문에 코멘트 아웃. now_degree_x = move_degree_x
와 now_degree_y = move_degree_y
로 변경했다. 코드
흠세_t 등 c 킨 g2. py
face_tracking2.py# -*- coding: UTF-8 -*-
import cv2
import os
import time
import Adafruit_PCA9685
pwm = Adafruit_PCA9685.PCA9685()
pwm.set_pwm_freq(60)
cascade_path = "haarcascade_frontalface_alt.xml"
cascade = cv2.CascadeClassifier(cascade_path)
cap = cv2.VideoCapture(0)
cap.set(3, 320)
cap.set(4, 240)
color = (255, 255, 255)
pwm.set_pwm(0, 0, 375)
time.sleep(1)
pwm.set_pwm(1, 0, 375)
time.sleep(1)
now_degree_x, now_degree_y, move_degree_x, move_degree_y = 375, 375, 0, 0
while(True):
ret, frame = cap.read()
facerect = cascade.detectMultiScale(frame, scaleFactor=1.2, minNeighbors=2, minSize=(10, 10))
for rect in facerect:
img_x = rect[0]+rect[2]/2
img_y = rect[1]+rect[3]/2
print(img_x, img_y)
move_degree_x = now_degree_x - (img_x-160)*0.06
move_degree_y = now_degree_y + (img_y-120)*0.06
print('deg: ', move_degree_x , move_degree_y)
pwm.set_pwm(0, 0, int(move_degree_x))
pwm.set_pwm(1, 0, int(move_degree_y))
#time.sleep(0.1)
now_degree_x = move_degree_x
now_degree_y = move_degree_y
cv2.circle(frame, (int(img_x), int(img_y)), 10, (255,255,255), -1)
cv2.rectangle(frame, tuple(rect[0:2]),tuple(rect[0:2] + rect[2:4]), color, thickness=3)
cv2.imshow("Show FLAME Image", frame)
k = cv2.waitKey(1)
if k == ord('q'):
break
cap.release()
cv2.destroyAllWindows()
감상 등
얼굴 추적을 위한 서보 제어가 꽤 잘 되지 않고, 시행착오하면서 상기의 코드를 변경했습니다.
프로그래밍이 전혀 모르는 초보자이므로 실수가 많이 있을지도 모릅니다. 누군가 지적해 주시면 감사하겠습니다.python face_tracking2.py
그렇다면 python2
에서 작동하기 때문에 python3 face_tracking2.py
에서 실행됩니다.
Reference
이 문제에 관하여(Raspberry Pi, Python3 및 Open CV에서 얼굴 추적 카메라), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://qiita.com/9680lhqv/items/9f8cff5c5894520638c3
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
# -*- coding: UTF-8 -*-
import cv2
import os
import time
import Adafruit_PCA9685
pwm = Adafruit_PCA9685.PCA9685()
pwm.set_pwm_freq(60)
cascade_path = "haarcascade_frontalface_alt.xml"
cascade = cv2.CascadeClassifier(cascade_path)
cap = cv2.VideoCapture(0)
cap.set(3, 320)
cap.set(4, 240)
color = (255, 255, 255)
pwm.set_pwm(0, 0, 375)
time.sleep(1)
pwm.set_pwm(1, 0, 375)
time.sleep(1)
now_degree_x, now_degree_y, move_degree_x, move_degree_y = 375, 375, 0, 0
while(True):
ret, frame = cap.read()
facerect = cascade.detectMultiScale(frame, scaleFactor=1.2, minNeighbors=2, minSize=(10, 10))
for rect in facerect:
img_x = rect[0]+rect[2]/2
img_y = rect[1]+rect[3]/2
print(img_x, img_y)
move_degree_x = now_degree_x - (img_x-160)*0.06
move_degree_y = now_degree_y + (img_y-120)*0.06
print('deg: ', move_degree_x , move_degree_y)
pwm.set_pwm(0, 0, int(move_degree_x))
pwm.set_pwm(1, 0, int(move_degree_y))
#time.sleep(0.1)
now_degree_x = move_degree_x
now_degree_y = move_degree_y
cv2.circle(frame, (int(img_x), int(img_y)), 10, (255,255,255), -1)
cv2.rectangle(frame, tuple(rect[0:2]),tuple(rect[0:2] + rect[2:4]), color, thickness=3)
cv2.imshow("Show FLAME Image", frame)
k = cv2.waitKey(1)
if k == ord('q'):
break
cap.release()
cv2.destroyAllWindows()
얼굴 추적을 위한 서보 제어가 꽤 잘 되지 않고, 시행착오하면서 상기의 코드를 변경했습니다.
프로그래밍이 전혀 모르는 초보자이므로 실수가 많이 있을지도 모릅니다. 누군가 지적해 주시면 감사하겠습니다.
python face_tracking2.py
그렇다면 python2
에서 작동하기 때문에 python3 face_tracking2.py
에서 실행됩니다.
Reference
이 문제에 관하여(Raspberry Pi, Python3 및 Open CV에서 얼굴 추적 카메라), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/9680lhqv/items/9f8cff5c5894520638c3텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)