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

TSINGSEE 2021-10-29 13:51:29
人工智能 Python 深度学习 人脸识别 ide

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

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

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

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

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

关于dlib的人脸识别:

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

项目准备:

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

pip3 install dlib
pip3 install face_recognition
  • 1.
  • 2.

下载源代码:

人脸识别源代码

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

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

  • embedding.py:在这一步中,我们将以人的图像作为输入。 我们将对这些图像进行人脸嵌入。
  • recognition.py:现在,我们将从相机帧中识别出那个特定的人。

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

1. embedding.py:

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

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

  • 导入相关的库:
import sys
import cv2
import face_recognition
import pickle
  • 1.
  • 2.
  • 3.
  • 4.
  • 要识别 pickle 文件中的人,请将其姓名和唯一 id 作为输入:
name=input("enter name")
ref_id=input("enter id")
  • 1.
  • 2.
  • 创建一个pickle文件和字典来存储人脸编码:
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={}
  • 1.
  • 2.
  • 3.
  • 4.
  • 5.
  • 6.
  • 7.
  • 8.
  • 9.
  • 10.
  • 11.
  • 12.
  • 13.
  • 14.
  • 15.
  • 16.
  • 17.
  • 18.
  • 19.
  • 20.
  • 21.
  • 打开网络摄像头和一个人的 5 张照片作为输入并创建其嵌入:

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

在这里,我们将特定人的嵌入存储在 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
  • 1.
  • 2.
  • 3.
  • 4.
  • 5.
  • 6.
  • 7.
  • 8.
  • 9.
  • 10.
  • 11.
  • 12.
  • 13.
  • 14.
  • 15.
  • 16.
  • 17.
  • 18.
  • 19.
  • 20.
  • 21.
  • 22.
  • 23.
  • 24.
  • 25.
  • 26.
  • 27.
  • 28.
  • 29.
  • 30.
  • 31.
  • 32.
  • 使用面部嵌入更新 pickle 文件。

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

f=open("ref_embed.pkl","wb")
pickle.dump(embed_dictt,f)
f.close()
  • 1.
  • 2.
  • 3.
  • 现在是时候执行 python 项目的第一部分了。

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

python3 embedding.py
  • 1.

2.recognition.py:

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

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

  • 导入库:
import face_recognition
import cv2
import numpy as np
import glob
import pickle
  • 1.
  • 2.
  • 3.
  • 4.
  • 5.
  • 加载存储的 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()
  • 1.
  • 2.
  • 3.
  • 4.
  • 5.
  • 6.
  • 7.
  • 创建两个列表,一个用于存储 ref_id,另一个用于各自的嵌入:
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]
  • 1.
  • 2.
  • 3.
  • 4.
  • 5.
  • 6.
  • 7.
  • 8.
  • 启动网络摄像头以识别此人:
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()
  • 1.
  • 2.
  • 3.
  • 4.
  • 5.
  • 6.
  • 7.
  • 8.
  • 9.
  • 10.
  • 11.
  • 12.
  • 13.
  • 14.
  • 15.
  • 16.
  • 17.
  • 18.
  • 19.
  • 20.
  • 21.
  • 22.
  • 23.
  • 24.
  • 25.
  • 26.
  • 27.
  • 28.
  • 29.
  • 30.
  • 31.
  • 32.
  • 33.
  • 34.
  • 35.
  • 36.
  • 37.
  • 38.
  • 39.
  • 40.
  • 41.
  • 42.
  • 43.
  • 44.
  • 45.
  • 46.
  • 47.
  • 48.
  • 49.
  • 50.
  • 51.
  • 52.
  • 53.

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

python3 recognise.py
  • 1.

概括:

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

  • 在第一部分中,我们已经看到了如何存储有关人脸结构的信息,即人脸嵌入。 然后我们学习如何存储这些嵌入。
  • 在第二部分中,我们已经看到了如何通过将新的人脸嵌入与存储的人脸嵌入进行比较来识别人。

人脸识别技术的应用

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

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

版权声明
本文为[TSINGSEE]所创,转载请带上原文链接,感谢
https://blog.51cto.com/tsingsee/4372774

  1. 10 fois plus efficace avec cache dans le développement de Django
  2. 求Python *.svg文件操作方法
  3. 求Python *.svg文件操作方法
  4. Trouver la méthode de fonctionnement du fichier Python *.Svg
  5. 【 python】 Internal Guide for Unit Test Practice
  6. 用Python编程佩尔数列pell数列循环结构
  7. 【 python】 échafaudage fastapi: spécification du développement du projet d'interface arrière fastapi
  8. [Python] restful Specification Practice Based on fastapi
  9. Python代码阅读(第26篇):将列表映射成字典
  10. How to use Python to make a screen color extractor with Exe file
  11. Lecture du Code Python (article 26): cartographie des listes dans les dictionnaires
  12. Python代码阅读(第26篇):将列表映射成字典
  13. Python代碼閱讀(第26篇):將列錶映射成字典
  14. Lecture du Code Python (article 26): cartographie des listes dans les dictionnaires
  15. 使用 Python 进行数据可视化之Seaborn
  16. Real time access to stock data, free—— Python crawler Sina stock actual combat
  17. Seaborn pour la visualisation des données en python
  18. 浅识XPath(熟练掌握XPath的语法)【python爬虫入门进阶】(03)
  19. Python中if else语句进行操作的时候哪里除了错,搞不懂
  20. Python题,我刚学,还不会
  21. Python題,我剛學,還不會
  22. Je viens d'apprendre, pas encore.
  23. 云计算开发:Python3-find()方法详解
  24. Real time access to stock data, free—— Python crawler Sina stock actual combat
  25. Développement de l'informatique en nuage: détails de la méthode Python 3 - find ()
  26. 如何使用Python进行超参调参和调优
  27. 如何使用Python進行超參調參和調優
  28. Comment utiliser Python pour le réglage hyperparamétrique
  29. Première connaissance du module urllib Python
  30. Python入门:看了这篇文章如果1个小时没法入门Python,那么还是换个语言吧!!
  31. Python(day1):Python 3 教程
  32. Python(day3):Python3 安装与环境搭建
  33. Python (day3): installation et environnement Python 3
  34. Python (day1): tutoriel Python 3
  35. Démarrer avec Python: Si vous ne pouvez pas commencer avec Python en une heure, changez de langue!!
  36. Pandas:DataFrame对象的基础操作
  37. 关于#python#的问题:月球上物体的体重在地球上的16.5%,编写程序输出未来10年在地球上和月球上的体重状况
  38. 反转一个3位整数(Python 实现)
  39. Inverse un entier de 3 bits (implémentation Python)
  40. Questions sur # Python #: les objets lunaires pèsent 16,5% de la masse de la terre et un programme est programmé pour produire la masse de la terre et de la lune au cours des 10 prochaines années
  41. Compared with Excel, it is easy to learn Python report automation practice!
  42. 7 excellent open source libraries for learning Python Programming
  43. Use of Python pandas!!!!! Explain in detail
  44. Python Qt GUI设计:QPrinter打印图片类(基础篇—21)
  45. Use of Python pandas!!!!! Explain in detail
  46. 2n行输入,Python,判断字母个数
  47. Notes de Python (XV): dérivation de liste
  48. Notes sur Python (XVI): générateur et Itérateur
  49. Notes de Python (18): décorateur
  50. 2n entrée de ligne, Python, nombre de lettres de jugement
  51. Notes Python (17): fermetures
  52. Notes sur Python (20): fonctions d'ordre supérieur intégrées
  53. 想问问这个Python编程咋做呀?
  54. 想問問這個Python編程咋做呀?
  55. Vous voulez savoir ce que fait cette programmation python?
  56. 11.5K Star,一个开源的 Python 静态类型检查库
  57. Sweetviz:让你只需三行代码实现Python探索性数据分析
  58. Sweetviz:讓你只需三行代碼實現Python探索性數據分析
  59. Sweetviz: vous permet d'effectuer une analyse exploratoire des données python avec seulement trois lignes de code
  60. 11.5k Star, une bibliothèque de vérification de type statique Python Open Source