深度学习项目演练:如何使用Python和OpenCV进行人脸识别

本文将和大家一起分享如何使用 Python 进行人脸识别 - 在实时实时视频中检测和识别出一个人。

在这个深度学习项目中,我们将学习如何使用 Python 识别实时视频中的人脸。我们将使用 python dlib 的面部识别网络构建这个项目。Dlib 是一个通用的软件库。 使用 dlib 工具包,我们可以制作真实世界的机器学习应用程序。

在这个项目中,我们将首先了解人脸识别器的工作原理,然后我们将使用 Python 构建人脸识别。

深度学习项目演练:如何使用Python和OpenCV进行人脸识别

使用 Python、OpenCV 和深度学习进行人脸识别

关于dlib的人脸识别:

Python 提供了 face_recognition API,它是通过 dlib 的人脸识别算法构建的。 这个 face_recognition API 允许我们实现人脸检测、实时人脸跟踪和人脸识别应用。

项目准备:

首先,你需要从 PyPI 安装 dlib 库和 face_recognition API:

pip3 install dlib 
pip3 install face_recognition

下载源代码:

人脸识别源代码(私信博主)

用Python实现人脸识别的步骤:

我们将分两部分构建这个 python 项目。 首先,为这两部分构建两个不同的python文件:

深度学习项目演练:如何使用Python和OpenCV进行人脸识别

1. embedding.py:

首先,在您的工作目录中创建一个文件 embedding.py。 在此文件中,我们将创建特定人脸的人脸嵌入。 使用 face_recognition.face_encodings 方法制作人脸嵌入。这些人脸嵌入是一个 128 维的向量。 在这个向量空间中,同一个人图像的不同向量彼此靠近。 进行人脸嵌入后,我们将它们存储在一个pickle文件中。

将以下代码粘贴到此 embedding.py 文件中。

import sys
import cv2 
import face_recognition
import pickle
name=input("enter name")
ref_id=input("enter id")
try:
    f=open("ref_name.pkl","rb")

    ref_dictt=pickle.load(f)
    f.close()
except:
    ref_dictt={}
ref_dictt[ref_id]=name


f=open("ref_name.pkl","wb")
pickle.dump(ref_dictt,f)
f.close()

try:
    f=open("ref_embed.pkl","rb")

    embed_dictt=pickle.load(f)
    f.close()
except:
    embed_dictt={}
深度学习项目演练:如何使用Python和OpenCV进行人脸识别

在这里,我们将特定人的嵌入存储在 embed_dictt 字典中。 我们已经在之前的状态中创建了 embed_dictt。 在这本字典中,我们将使用那个人的 ref_id 作为键。

要拍摄图像,请按“s”五次。 如果要停止相机,请按“q”:

for i in range(5):
    key = cv2. waitKey(1)
    webcam = cv2.VideoCapture(0)
    while True:
       
        check, frame = webcam.read()

        cv2.imshow("Capturing", frame)
        small_frame = cv2.resize(frame, (0, 0), fx=0.25, fy=0.25)
        rgb_small_frame = small_frame[:, :, ::-1]
  
        key = cv2.waitKey(1)

        if key == ord('s') : 
            face_locations = face_recognition.face_locations(rgb_small_frame)
            if face_locations != []:
                face_encoding = face_recognition.face_encodings(frame)[0]
                if ref_id in embed_dictt:
                    embed_dictt[ref_id]+=[face_encoding]
                else:
                    embed_dictt[ref_id]=[face_encoding]
                webcam.release()
                cv2.waitKey(1)
                cv2.destroyAllWindows()     
                break
        elif key == ord('q'):
            print("Turning off camera.")
            webcam.release()
            print("Camera off.")
            print("Program ended.")
            cv2.destroyAllWindows()
            break

在这里,我们将 embed_dictt 存储在 pickle 文件中。 因此,为了识别那个人,我们可以直接从这个文件中加载它的嵌入:

f=open("ref_embed.pkl","wb")
pickle.dump(embed_dictt,f)
f.close()

运行 python 文件并使用人名及其 ref_id 获取五个图像输入:

python3 embedding.py

2.recognition.py:

在这里,我们将再次从相机帧创建人物嵌入。然后,我们将新的嵌入与 pickle 文件中存储的嵌入进行匹配。同一个人的新嵌入将接近其在向量空间中的嵌入。因此,我们将能够识别出这个人。

现在,创建一个新的 python 文件识别.py 并粘贴以下代码:

import face_recognition
import cv2
import numpy as np
import glob
import pickle
f=open("ref_name.pkl","rb")
ref_dictt=pickle.load(f)        
f.close()

f=open("ref_embed.pkl","rb")
embed_dictt=pickle.load(f)      
f.close()
known_face_encodings = []  
known_face_names = []  


for ref_id , embed_list in embed_dictt.items():
    for my_embed in embed_list:
        known_face_encodings +=[my_embed]
        known_face_names += [ref_id]
video_capture = cv2.VideoCapture(0)

face_locations = []
face_encodings = []
face_names = []
process_this_frame = True

while True  :
  
    ret, frame = video_capture.read()

    small_frame = cv2.resize(frame, (0, 0), fx=0.25, fy=0.25)
    rgb_small_frame = small_frame[:, :, ::-1]

    if process_this_frame:

        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:

            matches = face_recognition.compare_faces(known_face_encodings, face_encoding)
            name = "Unknown"

            face_distances = face_recognition.face_distance(known_face_encodings, face_encoding)
            best_match_index = np.argmin(face_distances)
            if matches[best_match_index]:
                name = known_face_names[best_match_index]
            face_names.append(name)

    process_this_frame = not process_this_frame

    for (top_s, right, bottom, left), name in zip(face_locations, face_names):
        top_s *= 4
        right *= 4
        bottom *= 4
        left *= 4

        cv2.rectangle(frame, (left, top_s), (right, bottom), (0, 0, 255), 2)

        cv2.rectangle(frame, (left, bottom - 35), (right, bottom), (0, 0, 255), cv2.FILLED)
        font = cv2.FONT_HERSHEY_DUPLEX
        cv2.putText(frame, ref_dictt[name], (left + 6, bottom - 6), font, 1.0, (255, 255, 255), 1)
    font = cv2.FONT_HERSHEY_DUPLEX

    cv2.imshow('Video', frame)

    if cv2.waitKey(1) & 0xFF == ord('q'):
        break

video_capture.release()
cv2.destroyAllWindows()

现在运行项目的第二部分来识别这个人:

python3 recognise.py

概括:

今天分享的这个深度学习项目教你如何使用python库dlib和face_recognition APIs(OpenCV的)开发人脸识别项目。它介绍了 face_recognition API。 我们分两部分实现了这个python项目:

人脸识别技术的应用

目前,从我国人脸识别技术应用来看,主要集中在三大领域:考勤门禁、安防以及金融。具体如:安防监控、视频中的人脸检测、人脸识别、人流量统计等,广泛应用在小区、楼宇的智能门禁,周界可疑人员徘徊检测、景区人流量统计等等。

TSINGSEE青犀视频基于多年视频领域的技术经验积累,将AI检测、智能识别技术融合到各个应用场景中,典型的示例如EasyCVR视频融合云服务,具有AI人脸识别、车牌识别、语音对讲、云台控制、声光告警、监控视频分析与数据汇总的能力。

展开阅读全文

页面更新:2024-04-20

标签:深度   项目   人流量   向量   门禁   面部   源代码   字典   实时   图像   相机   文件   技术   科技   网络   视频

1 2 3 4 5

上滑加载更多 ↓
推荐阅读:
友情链接:
更多:

本站资料均由网友自行发布提供,仅用于学习交流。如有版权问题,请与我联系,QQ:4156828  

© CopyRight 2020-2024 All Rights Reserved. Powered By 71396.com 闽ICP备11008920号-4
闽公网安备35020302034903号

Top