Python OpenCV calls the camera to detect the face and take a screenshot
- 2021-07-24 11:30:02
- OfStack
In this article, we share the specific code of Python OpenCV calling the camera to detect faces and take screenshots for your reference. The specific contents are as follows
Note: The OpenCV library needs to be installed in python, and the OpenCV face recognition model haarcascade_frontalface_alt. xml needs to be downloaded. The model can be downloaded in OpenCV-PCA-KNN-SVM_face_recognition.
Use OpenCV to call the camera to detect the face and take 100 consecutive screenshots
#-*- coding: utf-8 -*-
# import Advance openCV Library of
import cv2
### Call the computer camera to detect the face and take a screenshot
def CatchPICFromVideo(window_name, camera_idx, catch_pic_num, path_name):
cv2.namedWindow(window_name)
# Video source, which can come from 1 Saved video, or directly from USB Camera
cap = cv2.VideoCapture(camera_idx)
# Tell OpenCV Using a face recognition classifier
classfier = cv2.CascadeClassifier("haarcascade_frontalface_alt.xml")
# The color of the border to be drawn after recognizing the face, RGB Format , color Yes 1 An array that cannot be added or deleted
color = (0, 255, 0)
num = 0
while cap.isOpened():
ok, frame = cap.read() # Read 1 Frame data
if not ok:
break
grey = cv2.cvtColor(frame, cv2.COLOR_BGR2GRAY) # Converts the current frame image to a grayscale image
# Face detection, 1.2 And 2 They are the scaling ratio of the picture and the number of effective points to be detected
faceRects = classfier.detectMultiScale(grey, scaleFactor = 1.2, minNeighbors = 3, minSize = (32, 32))
if len(faceRects) > 0: # Greater than 0 A face is detected
for faceRect in faceRects: # Box each separately 1 Zhang Face
x, y, w, h = faceRect
# Save the current frame as a picture
img_name = "%s/%d.jpg" % (path_name, num)
#print(img_name)
image = frame[y - 10: y + h + 10, x - 10: x + w + 10]
cv2.imwrite(img_name, image,[int(cv2.IMWRITE_PNG_COMPRESSION), 9])
num += 1
if num > (catch_pic_num): # Exit the loop if the specified maximum save quantity is exceeded
break
# Draw a rectangular frame
cv2.rectangle(frame, (x - 10, y - 10), (x + w + 10, y + h + 10), color, 2)
# Shows how many face images you've captured so you can stand there and be photographed with a count in mind, without having to look at your eyes 1 Smear and wait
font = cv2.FONT_HERSHEY_SIMPLEX
cv2.putText(frame,'num:%d/100' % (num),(x + 30, y + 30), font, 1, (255,0,255),4)
# End the program beyond the specified maximum number of saves
if num > (catch_pic_num): break
# Display image
cv2.imshow(window_name, frame)
c = cv2.waitKey(10)
if c & 0xFF == ord('q'):
break
# Release the camera and destroy all windows
cap.release()
cv2.destroyAllWindows()
if __name__ == '__main__':
# Continuous section 100 Image, save in image In the folder
CatchPICFromVideo("get face", 0, 99, "/image")