python 人脸识别并保存到mysql数据库
时间: 2023-09-15 10:19:08 浏览: 169
以下是一个简单的Python程序,用于从摄像头捕获图像,检测并识别人脸,然后将人脸图像和识别结果保存到MySQL数据库中。
首先,需要安装以下Python库:
1. OpenCV:用于图像处理和人脸检测
2. face_recognition:用于人脸识别
3. mysql-connector-python:用于连接和操作MySQL数据库
```python
import cv2
import face_recognition
import mysql.connector
# 连接MySQL数据库
mydb = mysql.connector.connect(
host="localhost",
user="yourusername",
password="yourpassword",
database="yourdatabase"
)
# 打开摄像头
video_capture = cv2.VideoCapture(0)
# 读取已知人脸图像和姓名
obama_image = face_recognition.load_image_file("obama.jpg")
obama_face_encoding = face_recognition.face_encodings(obama_image)[0]
biden_image = face_recognition.load_image_file("biden.jpg")
biden_face_encoding = face_recognition.face_encodings(biden_image)[0]
known_faces = [
obama_face_encoding,
biden_face_encoding
]
known_names = [
"Barack Obama",
"Joe Biden"
]
while True:
# 读取摄像头捕获的图像
ret, frame = video_capture.read()
# 转换图像为RGB格式
rgb_frame = frame[:, :, ::-1]
# 检测图像中的人脸
face_locations = face_recognition.face_locations(rgb_frame)
face_encodings = face_recognition.face_encodings(rgb_frame, face_locations)
# 遍历检测到的人脸
for (top, right, bottom, left), face_encoding in zip(face_locations, face_encodings):
# 尝试识别人脸
matches = face_recognition.compare_faces(known_faces, face_encoding)
name = "Unknown"
# 找到最佳匹配的人脸
face_distances = face_recognition.face_distance(known_faces, face_encoding)
best_match_index = np.argmin(face_distances)
if matches[best_match_index]:
name = known_names[best_match_index]
# 在图像中标注人脸和姓名
cv2.rectangle(frame, (left, top), (right, bottom), (0, 0, 255), 2)
cv2.putText(frame, name, (left + 6, bottom - 6), cv2.FONT_HERSHEY_SIMPLEX, 1.0, (0, 0, 255), 1)
# 将人脸图像和姓名保存到MySQL数据库
if name != "Unknown":
img = cv2.imencode('.jpg', frame[top:bottom, left:right])[1].tostring()
mycursor = mydb.cursor()
sql = "INSERT INTO faces (name, image) VALUES (%s, %s)"
val = (name, img)
mycursor.execute(sql, val)
mydb.commit()
# 显示图像
cv2.imshow('Video', frame)
# 按下q键退出程序
if cv2.waitKey(1) & 0xFF == ord('q'):
break
# 释放摄像头并关闭窗口
video_capture.release()
cv2.destroyAllWindows()
```
在这个程序中,程序首先连接到MySQL数据库。然后,它打开摄像头并循环读取捕获的图像。对于每个图像,程序首先将其转换为RGB格式,并使用face_recognition库检测其中的人脸。然后,程序尝试识别每个人脸,并在图像中标注人脸位置和姓名。如果成功识别出人脸,则将人脸图像和姓名保存到MySQL数据库中。
在MySQL数据库中创建一个名为“faces”的表,包含两个字段:name(字符串类型)和image(BLOB类型)。在程序运行之前,需要将已知人脸图像保存到硬盘上,并将其路径设置为相应的变量。此外,还需要将MySQL数据库的连接信息设置为正确的值。
注意:本实例代码只是一个简单的示例,可能无法满足实际应用的需求。如果需要在生产环境中使用,请根据实际情况进行修改和优化。
阅读全文