博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
face_recognition 实时人脸识别
阅读量:7155 次
发布时间:2019-06-29

本文共 3064 字,大约阅读时间需要 10 分钟。

目标

  • 识别进入摄像头的人是谁

face_recognition

face_recognition 是github上一个非常有名气的人脸识别开源工具包,我们可以通过以下指令安装到python环境内

$ pip install face_recognition

代码的设计思路

加载认识的人脸图

ray_image = face_recognition.load_image_file("ray.jpg")ray_face_encoding = face_recognition.face_encodings(ray_image)[0]

将认识的人脸变量加到数组内

known_face_encodings = [ ray_face_encoding ]known_face_names = [ "Ray" ]

全部代码如下所示:

import face_recognitionimport cv2video_capture = cv2.VideoCapture(0)ray_image = face_recognition.load_image_file("ray.jpg")ray_face_encoding = face_recognition.face_encodings(ray_image)[0]pinky_image = face_recognition.load_image_file("pinky.jpg")pinky_face_encoding = face_recognition.face_encodings(ray_image)[0]# Create arrays of known face encodings and their namesknown_face_encodings = [    ray_face_encoding,    pinky_face_encoding]known_face_names = [    "Ray",    "Pinky"]# Initialize some variablesface_locations = []face_encodings = []face_names = []process_this_frame = Truewhile True:    # Grab a single frame of video    ret, frame = video_capture.read()    # Resize frame of video to 1/4 size for faster face recognition processing    small_frame = cv2.resize(frame, (0, 0), fx=0.25, fy=0.25)    # Convert the image from BGR color (which OpenCV uses) to RGB color (which face_recognition uses)    rgb_small_frame = small_frame[:, :, ::-1]    # Only process every other frame of video to save time    if process_this_frame:        # Find all the faces and face encodings in the current frame of video        face_locations = face_recognition.face_locations(rgb_small_frame)        face_encodings = face_recognition.face_encodings(rgb_small_frame, face_locations)        face_names = []        for face_encoding in face_encodings:            # See if the face is a match for the known face(s)            matches = face_recognition.compare_faces(known_face_encodings, face_encoding)            name = "Unknown"            # If a match was found in known_face_encodings, just use the first one.            if True in matches:                first_match_index = matches.index(True)                name = known_face_names[first_match_index]            face_names.append(name)    process_this_frame = not process_this_frame    # Display the results    for (top, right, bottom, left), name in zip(face_locations, face_names):        # Scale back up face locations since the frame we detected in was scaled to 1/4 size        top *= 4        right *= 4        bottom *= 4        left *= 4        # Draw a box around the face        cv2.rectangle(frame, (left, top), (right, bottom), (0, 0, 255), 2)        # Draw a label with a name below the face        cv2.rectangle(frame, (left, bottom - 35), (right, bottom), (0, 0, 255), cv2.FILLED)        font = cv2.FONT_HERSHEY_DUPLEX        cv2.putText(frame, name, (left + 6, bottom - 6), font, 1.0, (255, 255, 255), 1)    # Display the resulting image    cv2.imshow('Video', frame)    # Hit 'q' on the keyboard to quit!    if cv2.waitKey(1) & 0xFF == ord('q'):        break# Release handle to the webcamvideo_capture.release()cv2.destroyAllWindows()

转载地址:http://nfrgl.baihongyu.com/

你可能感兴趣的文章
Live555源代码解读(5-2)
查看>>
tomcat admin
查看>>
llvm每日谈之四 Pass初探
查看>>
触发器、存储过程和函数三者 区别
查看>>
xmake高级特性之合并静态库
查看>>
xmake 描述语法和作用域详解
查看>>
openstack测试工具使用二 --- tempest 的部署和使用
查看>>
CHGRP(1)
查看>>
我的友情链接
查看>>
实战LVS_DR模式(手把手了)
查看>>
LC3视角:Kubernetes下日志采集、存储与处理技术实践
查看>>
K8s中Pod健康检查源代码分析
查看>>
ansible命令(二)
查看>>
手机QQ轻聊版,3.2.0升级3.3.1区别
查看>>
OpenvSwitch概念和原理
查看>>
UE设置,不生成.bak文件
查看>>
Zabbix监控redis 状态
查看>>
Webdriver-PageObject模式之PageFactory 测试组 Tomi
查看>>
Objective-C中实现“多继承”
查看>>
Mysql--error:no query specified
查看>>