使用 OpenCV 在 Python 中进行人脸识别

在本文中,我们将讨论使用OpenCV在 Python 中进行人脸识别我们将研究它与技术的勾结以及它如何让我们的生活变得轻松。之后,我们将跳入Python并实现代码。

什么是面部识别?

面部识别是通过面部特征识别个人的能力。这是一种使用面部来关联或证明现有身份的方式。这些系统可用于识别人的图像和视频,或实时验证任何面部。

面部识别是生物识别安全的一个顺序。其他形式的生物识别软件包括语音识别和眼睛视网膜或虹膜识别。该技术主要用于安全执行,但人们对其他领域的使用也越来越感兴趣。人脸识别技术用于多种应用,包括安全、人脸识别软件和营销。

了解面部识别的工作原理

主要有两种广泛用于面部识别的方法。

方法一:将人脸转换为矩阵值/像素。

想象一下在您的手机上设置面部登录。如果您以前做过此操作,您就会知道手机会尝试从各个角度获取您的面部结构。一旦保存了面部的完整结构,它就会作为矩阵存储在后端。
下次解锁手机时,这些矩阵中所做的一切都只是搜索。这不是人工智能(大多数电话公司声称)。基于此,它提供二进制形式的输出(True/False)

方法二:利用深度学习做人脸识别

深度学习算法需要大量数据,我们需要训练模型来检测人脸,但它们没有经过训练来检测新主人,所以它们会失败。

不过,这项技术可用于面部识别。最好的例子是 Facebook 自动标记。如果您是新用户,Facebook 算法很难在新上传的内容中识别您的身份。但一旦 Facebook 收集到足够的数据(或者它的算法经过训练可以识别你的面部),它很快就能识别我们,即使是在集体照片中。

什么是 OpenCV?

OpenCV(开源计算机视觉库)是一个Python库,顾名思义是开源的,使用机器学习功能来解决计算机视觉问题。它的开发目的是为基于商业产品的公司提供计算机视觉应用和机器学习见解的通用工具。

在幕后,使用 Berkeley Source Distribution (BSD) 许可证对软件代码库的使用和修改施加最低限度的限制,使得 OpenCV 非常方便此类公司根据其要求使用和更改代码。所有OpenCV算法都是用C++语言实现的,但算法也可以用PythonJavaMatlab等语言使用。

OpenCV 库正在使用大约 2500 种优化算法。

这是使用 OpenCV 读取图像的快速教程,它将让您对该库有一个基本的了解。

该库的用户群也非常庞大,并且一直在以惊人的速度增长。该库的下载量超过 1800 万次。这些算法可用于实时视觉应用、人脸识别、识别物体、图像处理、提取物体的 3D 模型等等。

谷歌微软英特尔等大公司也在其生产环境中依赖 OpenCV,并广泛利用该软件的强大功能。各种政府组织还使用 OpenCV 来执行其项目,例如监视、监控景观、导航 AI 机器人执行任务、灾难管理,甚至执行救援行动。

简而言之,OpenCV 凭借其强大的功能,继续成为顶级软件库,在当前技术场景中发挥其所有荣耀。

使用 OpenCV 在 Python 中实现面部识别

在这里,我们将使用Python中的OpenCV来实现人脸识别。首先,我们将安装实现面部识别所需的库。

  • OpenCV: OpenCV(开源计算机视觉库)是一个软件库,顾名思义是开源的,使用机器学习功能来解决计算机视觉问题,如前所述。
  • dlib: dlib 库包含“深度度量学习”的实现,用于创建实际识别过程中使用的人脸嵌入。
  • Face_recognition: face_recognition 库非常易于使用,我们将在代码中使用它。它识别并操纵面孔。

1. 安装库

#Install the libraries
pip install opencv-python
conda install -c conda-forge dlib
pip install face_recognition

2. 第一张图像人脸编码

需要注意的是,OpenCV 使用 BGR(蓝、绿、红)图像格式。因此,当它使用它读取图像时,cv2.imread()默认情况下总是将其解释为 BGR 格式。我们还可以使用cvtColor()该方法将 BGR 图像转换为 RGB,反之亦然。

提取图像(在本例中为Elon_musk.png )并使用正常的 OpenCV 程序将其转换为 RGB 颜色格式。然后利用人脸识别库的特征进行“人脸编码”。

#defing the variable and reading the file
image_1 = cv2.imread("Elon_musk.png")
#it is interpreting the image in BGR format
rgb_img = cv2.cvtColor(img, cv2.COLOR_BGR2RGB)
img_encoding = face_recognition.face_encodings(rgb_img)[0]

3.第二张图像人脸编码

对第二个图像执行相同的步骤,仅更改变量的名称,当然还有第二个图像的路径。在本例中为 images/Elon_musk.png。

#accessing the image in the file from we have to match
image_2 = cv2.imread("images/Elon_musk.png")
rgb_img2 = cv2.cvtColor(img2, cv2.COLOR_BGR2RGB)
img_encoding2 = face_recognition.face_encodings(rgb_img2)[0]

4.检查img_encoding_1和img_encoding_2是否是同一个人

为了匹配的目的,我们将分两种情况

在第一种情况下,我们会将 image_1 放入要查找图像的定义文件夹中,而在第二种情况下,我们不会将 image_1 放入该文件夹中。因此,基于此,我们将在第一种情况下将True作为输出,在第二种情况下将False作为输出。

为了匹配图像,我们必须在图像之间进行比较

第一个案例

final_result = face_recognition.compare_faces([img_encoding], img_encoding2)
print("final_result: ", final_result)

输出

我附上我的文件夹屏幕截图以便更好地理解。

文件夹的图像(Images)

在上面的例子中,你可以看到这个文件夹中有 Elon_musk 的图像,这就是为什么我们得到的输出为True

案例二

我附上我的文件夹屏幕截图以便更好地理解。

文件夹的图像(Images)

在上面的情况下,您无法在此文件夹中看到 Elon_musk 的图像,这就是我们得到输出为False的原因。

使用Python OpenCV实现人脸识别的完整代码

#Install the libraries
pip install opencv-python
conda install -c conda-forge dlib
pip install face_recognition
 
 
#defing the variable and reading the file
image_1 = cv2.imread("Elon_musk.png")
#it is interpreting the image in BGR format
rgb_img = cv2.cvtColor(img, cv2.COLOR_BGR2RGB)
img_encoding = face_recognition.face_encodings(rgb_img)[0]
 
 
#accessing the image in the file from we have to match
image_2 = cv2.imread("images/Elon_musk.png")
rgb_img2 = cv2.cvtColor(img2, cv2.COLOR_BGR2RGB)
img_encoding2 = face_recognition.face_encodings(rgb_img2)[0]
 
 
#For Matching the images for cases
final_result = face_recognition.compare_faces([img_encoding], img_encoding2)
print("final_result: ", final_result)

结论

在本文中,我们介绍了如何使用OpenCV 库在 python 中进行人脸识别,以及不同行业如何使用该技术来获得更好的体验。

参考

https://pypi.org/project/opencv-python/