能帮我用Python写一个用两张图片进行的人脸比对程序吗,不能用第三方的api,附上相关代码
时间: 2024-05-04 15:22:45 浏览: 84
当然可以,以下是用 Python 和 OpenCV 实现的简单人脸比对程序,你只需要提供两张图片即可。
```python
import cv2
# 加载图片
img1 = cv2.imread('path/to/image1.jpg')
img2 = cv2.imread('path/to/image2.jpg')
# 创建人脸分类器
face_cascade = cv2.CascadeClassifier('path/to/haarcascade_frontalface_default.xml')
# 检测人脸
gray1 = cv2.cvtColor(img1, cv2.COLOR_BGR2GRAY)
faces1 = face_cascade.detectMultiScale(gray1, 1.3, 5)
gray2 = cv2.cvtColor(img2, cv2.COLOR_BGR2GRAY)
faces2 = face_cascade.detectMultiScale(gray2, 1.3, 5)
# 如果两张图片都没有检测到人脸,则返回未知
if len(faces1) == 0 or len(faces2) == 0:
print('未知')
else:
# 取第一个检测到的人脸
(x1, y1, w1, h1) = faces1[0]
(x2, y2, w2, h2) = faces2[0]
# 提取人脸并缩放到相同大小
face1 = cv2.resize(gray1[y1:y1+h1, x1:x1+w1], (100, 100))
face2 = cv2.resize(gray2[y2:y2+h2, x2:x2+w2], (100, 100))
# 计算两张图片的相似度
diff = cv2.absdiff(face1, face2)
score = (diff < 30).mean()
# 如果相似度大于 0.5,则认为是同一张脸
if score > 0.5:
print('是同一张脸')
else:
print('不是同一张脸')
```
需要注意的是,这只是一个非常简单的实现,可能会有一些误判。如果需要更加准确的人脸比对程序,建议使用现成的第三方库或者服务。
阅读全文