만약 전 포스팅을 보지 않았다면 보고 오는 것이 좋다.
일단 마찬가지로 opencv와 xml 파일을 불러온다
import cv2
face_classifier = cv2.CascadeClassifier('C:\\Users\\gotti\\AppData\\Local\\Programs\\Python\\Python38\\Lib\\site-packages\\cv2\\data\\haarcascade_frontalface_default.xml')
eye_cascade = cv2.CascadeClassifier('C:\\Users\\gotti\\AppData\\Local\\Programs\\Python\\Python38\\Lib\\site-packages\\cv2\\data\\haarcascade_eye.xml')
이미지와 달리 비디오는 .VideoCapture(경로)로 불러온다.
cam = cv2.VideoCapture("video.mp4")
opencv는 영상을 프레임단위로 쪼개서 얼굴을 검출한다.
while(True):
img, frame = cam.read()
grayframe = cv2.cvtColor(frame, cv2.COLOR_BGR2GRAY)
faces = face_classifier.detectMultiScale(gray,1.1,3)
.read는 비디오 상태와 프레임을 받아온다
ctvColor로 이미지를 회색으로 만든다.
그리고 faces에 검출한 얼굴 좌표를 저장한다
for (x,y,w,h) in faces:
cv2.rectangle(frame, (x,y), (x+w, y+h), (255,0,0),2)
roi_gray = gray[y:y+h, x:x+w]
roi_color = frame[y:y+h, x:x+w]
eyes = eye_cascade.detectMultiScale(roi_gray)
for (ex, ey, ew, eh) in eyes:
cv2.rectangle(roi_color, (ex,ey), (ex+ew, ey+eh),(0,255,0),2)
이미지와 마찬가지로 얼굴 좌표에 사각형을 그리고 그 안에서 눈을 검출한다.
cv2.imshow('Face',frame)
if cv2.waitKey(1)==27:
break
cam.release()
cv2.destroyAllWindows()
이제 비디오를 띄운다.
여러 영상에서 테스트해본 결과 얼굴은 잘 검출하지만 눈은 잘 찾지 못한다.
전체 코드
import cv2
face_classifier = cv2.CascadeClassifier('C:\\Users\\gotti\\AppData\\Local\\Programs\\Python\\Python38\\Lib\\site-packages\\cv2\\data\\haarcascade_frontalface_default.xml')
eye_cascade = cv2.CascadeClassifier('C:\\Users\\gotti\\AppData\\Local\\Programs\\Python\\Python38\\Lib\\site-packages\\cv2\\data\\haarcascade_eye.xml')
cam = cv2.VideoCapture("vidoe.mp4")
a = 1
while True:
img, frame = cam.read()
gray = cv2.cvtColor(frame, cv2.COLOR_BGR2GRAY)
faces = face_classifier.detectMultiScale(gray,1.1,3)
for (x,y,w,h) in faces:
cv2.rectangle(frame, (x,y), (x+w, y+h), (255,0,0),2)
roi_gray = gray[y:y+h, x:x+w]
roi_color = frame[y:y+h, x:x+w]
eyes = eye_cascade.detectMultiScale(roi_gray)
for (ex, ey, ew, eh) in eyes:
cv2.rectangle(roi_color, (ex,ey), (ex+ew, ey+eh),(0,255,0),2)
frame = cv2.resize(frame,(int(frame.shape[1]*a), int(frame.shape[0]*a)))
cv2.imshow('Face',frame)
if cv2.waitKey(1)==27:
break
cam.release()
cv2.destroyAllWindows()
'Emotion > 인공지능 기초' 카테고리의 다른 글
mediapipe 관련 1 (0) | 2021.03.20 |
---|---|
Dlib을 이용하여 얼굴 랜드마크 찍기 (0) | 2020.12.01 |
Opencv 얼굴 인식(사진) (0) | 2020.11.27 |
앙상블 학습법(Ensemble Learning) (0) | 2020.09.29 |
로지스틱 회귀(Logistic Regression) (0) | 2020.09.29 |