社区所有版块导航
Python
python开源   Django   Python   DjangoApp   pycharm  
DATA
docker   Elasticsearch  
aigc
aigc   chatgpt  
WEB开发
linux   MongoDB   Redis   DATABASE   NGINX   其他Web框架   web工具   zookeeper   tornado   NoSql   Bootstrap   js   peewee   Git   bottle   IE   MQ   Jquery  
机器学习
机器学习算法  
Python88.com
反馈   公告   社区推广  
产品
短视频  
印度
印度  
Py学习  »  Python

如何使用 Python比较两张图像并获得准确度?

小白学视觉 • 12 月前 • 197 次点击  

点击上方小白学视觉”,选择加"星标"或“置顶

重磅干货,第一时间送达

本文,将带你了解如何使用 Python、OpenCV 和人脸识别模块比较两张图像并获得这些图像之间的准确度水平。

首先,你需要了解我们是如何比较两个图像的。我们正在使用Face Recognition python 模块来获取两张图像的128 个面部编码,我们将比较这些编码。比较结果返回 True 或 False。如果结果为True ,那么两个图像将是相同的。如果是False,则两个图像将不相同。

128 种面部编码将如下所示👇🏻

128 个人脸编码(人脸标志)

仅当比较结果返回 True 值时,才会打印准确度级别。

现在,让我们进入本主题的编码部分,

为了实现这一点,我们需要安装几个 python 模块。为此,只需打开命令提示符或终端,键入以下内容。

pip install opencv-python
pip install face-recognition

安装后,现在是时候导入这些模块了。然后,我们需要创建一个名为 find_face_encodings(image_path) 的新函数,它获取图像位置(路径)并返回 128 个面部编码,这在比较图像时非常有用。

find_face_encodings(image_path) 函数将使用 OpenCV 模块,从我们作为参数传递的路径中读取图像,然后返回使用 face_recognition 模块中的 face_encodings() 函数获得的 128 个人脸编码。

import cv2
import face_recognition
def find_face_encodings(image_path):
    # reading image
    image = cv2.imread(image_path)
    
    # get face encodings from the image
    face_enc = face_recognition.face_encodings(image)
    
    # return face encodings
    return face_enc[0]

现在,使用两个不同的图像路径调用 find_face_encodings(image_path) 函数,并将其存储在两个不同的变量中,image_1image_2

# getting face encodings for first image
image_1 = find_face_encodings("image_1.jpg")

# getting face encodings for second image
image_2  = find_face_encodings( "image_2.jpg")

现在,我们可以使用编码执行比较和查找这些图像的准确性等操作。

  • 比较将通过使用 face_recognition 中的 compare_faces() 函数来完成。
  • 通过找到 100 和 face_distance 之间的差异来确定准确性。
# checking both images are same
is_same = face_recognition.compare_faces([image_1], image_2)[0]
print(f"Is Same: {is_same}")
if is_same:
    # finding the distance level between images
    distance = face_recognition.face_distance([image_1], image_2)
    distance = round(distance[0] * 100)
    
    # calcuating accuracy level between images
    accuracy = 100 - round(distance)
    
    print("The images are same")
    print(f"Accuracy Level: {accuracy}%")
else:
    print("The images are not same")

输出——案例 1

Is Same: True
The images are same
Accuracy Level: 64%

输出——案例 2

Is Same: False
The images are not same


下载1:OpenCV-Contrib扩展模块中文版教程
在「小白学视觉」公众号后台回复:扩展模块中文教程即可下载全网第一份OpenCV扩展模块教程中文版,涵盖扩展模块安装、SFM算法、立体视觉、目标跟踪、生物视觉、超分辨率处理等二十多章内容。

下载2:Python视觉实战项目52讲
小白学视觉公众号后台回复:Python视觉实战项目即可下载包括图像分割、口罩检测、车道线检测、车辆计数、添加眼线、车牌识别、字符识别、情绪检测、文本内容提取、面部识别等31个视觉实战项目,助力快速学校计算机视觉。

下载3:OpenCV实战项目20讲
小白学视觉公众号后台回复:OpenCV实战项目20讲即可下载含有20个基于OpenCV实现20个实战项目,实现OpenCV学习进阶。

交流群


欢迎加入公众号读者群一起和同行交流,目前有SLAM、三维视觉、传感器自动驾驶、计算摄影、检测、分割、识别、医学影像、GAN算法竞赛等微信群(以后会逐渐细分),请扫描下面微信号加群,备注:”昵称+学校/公司+研究方向“,例如:”张三 + 上海交大 + 视觉SLAM“。请按照格式备注,否则不予通过。添加成功后会根据研究方向邀请进入相关微信群。请勿在群内发送广告,否则会请出群,谢谢理解~


Python社区是高质量的Python/Django开发社区
本文地址:http://www.python88.com/topic/169263
 
197 次点击