深度学习项目演练:如何使用python和opencv进行人脸识别(代码片段)

TSINGSEE TSINGSEE     2023-01-24     594

关键词:

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

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

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

 

使用 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文件:

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

 

1. embedding.py:

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

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

  • 导入相关的库:
import sys
import cv2 
import face_recognition
import pickle
  • 要识别 pickle 文件中的人,请将其姓名和唯一 id 作为输入:
name=input("enter name")
ref_id=input("enter id")
  • 创建一个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=
  • 打开网络摄像头和一个人的 5 张照片作为输入并创建其嵌入:

 

在这里,我们将特定人的嵌入存储在 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

  • 使用面部嵌入更新 pickle 文件。

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

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

运行 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
  • 加载存储的 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()
  • 创建两个列表,一个用于存储 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]
  • 启动网络摄像头以识别此人:
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人脸识别、车牌识别、语音对讲、云台控制、声光告警、监控视频分析与数据汇总的能力。

谁有深度学习书单和学习路线?

人工智能行业要大爆发了,想学一下机器学习技术。谁有深度学习书单和学习路线,可以分享一下吗?参考技术A推荐5本深度学习相关的书籍。1.《深度学习》(DeepLearning)出自Goodfellow、Bengio和Courville三位大牛之手的《深度学习... 查看详情

springboot项目怎么调用深度算法

您好,springboot项目调用深度算法的具体方法如下:SpringBoot是一个快速开发的Java框架,它可以让开发者快速构建Web应用程序。深度学习算法是一种机器学习算法,它可以处理大量的数据并从中学习。要在SpringBoot项目中调用深度学... 查看详情

谁有深度学习书单和学习路线?求赐

...验也没有扎实理论基础。对于零基础小白,怎样快速入门深度学习呢?在这里精选了5本深度学习相关的书籍,帮助小白更好的入门。1.《深度学习》(DeepLearning)出自Goodfellow、Bengio和Courville三位大牛之手的《深度学习》(DeepLear... 查看详情

深度学习与爬虫实例教学--深度学习模型构建和训练

深度学习与爬虫实例教学声明:该教程不会直接贴代码,以免凌乱,你需要先下载项目代码(第一章)并结合来看,教程中会告诉你具体代码放在什么位置,以及作用,用法深度学习实现验证码自动识别,爬虫自动认证防ban我们... 查看详情

手把手写深度学习(11):用pix2pixgans实现sketch-to-image跨模态任务(实战演练)

前言:上一篇讲了很多Pix2PixGANs的基础,没想到越写越多,最后写了将近4w字,所以拆分成两篇:理论基础和实战演练分别介绍。这篇讲怎样用pix2pixGANs完成sketch-to-image任务,重点放在代码演练上。目录计算对抗损失和L1损失总体... 查看详情

如何使用 Python 制作 Minecraft Java 深度学习机器人

】如何使用Python制作MinecraftJava深度学习机器人【英文标题】:HowtousePythontomakeMinecraftJavaDeepLearningbots【发布时间】:2020-10-1002:01:45【问题描述】:好的,我有一个理论化的想法。我在看这个paper,我看到他们使用了一个叫做Malmo的... 查看详情

深度学习之初识篇——小白也能跑通的深度学习万能框架交通标识牌检测(代码片段)

目录环境下载;点击即可数据集下载;点击即可深度学习环境配置点击下载深度学习环境数据集准备使用自己标注的数据集使用标注软件数据准备VOC标签格式转yolo格式并划分训练集和测试集部署和训练深度学习项目克隆... 查看详情

想深度学习写作,应该看啥书

...没有扎实理论基础。  对于零基础小白,怎样快速入门深度学习呢?在这里精选了5本深度学习相关的书籍,帮助小白更好的入门。  1.《深度学习》(DeepLearning)  出自Goodfellow、Bengio和Courville三位大牛之手的《深度学习》(Deep... 查看详情

如何通过python进行深度学习?

作者|ViharKurama编译|荷叶来源|云栖社区摘要:深度学习背后的主要原因是人工智能应该从人脑中汲取灵感。本文就用一个参考技术A作者|ViharKurama编译|荷叶来源|云栖社区摘要:深度学习背后的主要原因是人工智能应该从人脑中汲... 查看详情

给大家推荐:五个python小项目,github上的人气很高的

1.深度学习框架Pytorchhttps://github.com/pytorch/pytorchPyTorch是一个Torch7团队开源的Python优先的深度学习框架,提供两个高级功能:●强大的GPU加速Tensor计算(类似numpy)●构建基于tape的自动升级系统上的深度神经网络●你可以重用你喜... 查看详情

深度学习进阶,keras视频分类(代码片段)

...频分类在此教程中,您将学习如何使用Keras、Python和深度学习执行视频分类。具体来说,您将学习:视频分类与标准图像分类的区别如何使用Keras进行图像分类来训练一个旋转神经网络如何采取CNN,然后使用它的视... 查看详情

动手教你学故障诊断:python实现tensorflow+cnn深度学习的轴承故障诊断(西储大学数据集)(含完整代码)(代码片段)

...目名称动手教你学故障诊断:Python实现基于Tensorflow+CNN深度学习的轴承故障诊断(西储大学数据集)(含完整代码)项目介绍该项目使用tensorflow和keras搭建深度学习CNN网络,并使用西储大学数据集作为训练集... 查看详情

python深度学习之路-1机器学习概论

【Python深度学习之路】-1机器学习概论1.1机器学习简介机器学习火热的原因是:人类无论如何也做不到在短时间内实现从大量数据中自动地计算出正确结果的操作。所谓机器学习:通过对数据进行反复的学习,来找出... 查看详情

ai人工智能机器学习深度学习学习路径及推荐书籍

...熟悉Python编程语言。线性代数和微积分:Pytorch主要用于深度学习领域,深度学习是基于线性代数和微积分的,因此需要具备线性代数和微积分的基础知识。机器学习基础知识:了解机器学习的基本概念和算法,如线性回归、逻... 查看详情

在生产环境中使用kerasredisflask和apache进行深度学习(代码片段)

今天我们演示如何在生产环境中使用Keras、Redis、Flask和Apache进行深度学习项目结构keras-complete-rest-api├──helpers.py├──jemma.png├──keras_rest_api_app.wsgi├──run_model_server.py├──run_web_server.py├──settings.py├──simple_request.py 查看详情

这6段代码,成就了如今的深度学习

从代码中追溯深度学习的历史深度学习发展到如今的地位,离不开下面这6段代码。本文介绍了这些代码的创作者及其完成这些突破性成就的故事背景。每个故事都有简单的代码示例,读者们可以在FloydHub和GitHub找到相关代码。&nb... 查看详情

[深度学习][环境配置]关于windows上如何使用cuda10.2支持onnxruntime的python版本

打开网址:onnxruntime-gpu·PyPI如图: 可以看到从1.6.0版本开始windows上只有python3.7支持,而linux却支持python3.7和python3.8两个版本,因此当你的windows上安装cuda10.2后,python不能是3.8及其以上,只能安装<=3.7... 查看详情

深度学习python怎么入门知乎

自学深度学习是一个漫长而艰巨的过程。您需要有很强的线性代数和微积分背景,良好的Python编程技能,并扎实掌握数据科学、机器学习和数据工程。即便如此,在你开始将深度学习应用于现实世界的问题,并有可能找到一份深... 查看详情