[机器学习][face recognition] 一个视频人脸识别实现
2024-08-30 04:31:50
开发环境和用到的库:
- Ubuntu
- jupyter notebook(python3.6)
- OpenCV
- Dlib
- face_recognition
实现效果如下(视频截图):
#coding=utf-8
#人脸识别类 - 使用face_recognition模块
import cv2
import face_recognition
import os path = "img/face_recognition" # 模型数据图片目录
cap = cv2.VideoCapture(0)
total_image_name = []
total_face_encoding = []
for fn in os.listdir(path): #fn 表示的是文件名q
print(path + "/" + fn)
total_face_encoding.append(
face_recognition.face_encodings(
face_recognition.load_image_file(path + "/" + fn))[0])
fn = fn[:(len(fn) - 4)] #截取图片名(这里应该把images文件中的图片名命名为为人物名)
total_image_name.append(fn) #图片名字列表
while (1):
ret, frame = cap.read()
# 发现在视频帧所有的脸和face_enqcodings
face_locations = face_recognition.face_locations(frame)
face_encodings = face_recognition.face_encodings(frame, face_locations)
# 在这个视频帧中循环遍历每个人脸
for (top, right, bottom, left), face_encoding in zip(
face_locations, face_encodings):
# 看看面部是否与已知人脸相匹配。
for i, v in enumerate(total_face_encoding):
match = face_recognition.compare_faces(
[v], face_encoding, tolerance=0.5)
name = "Unknown"
if match[0]:
name = total_image_name[i]
break
# 画出一个框,框住脸
cv2.rectangle(frame, (left, top), (right, bottom), (0, 255, 255), 2)
# 画出一个带名字的标签,放在框下
cv2.rectangle(frame, (left, bottom - 35), (right, bottom), (0, 255, 255),
cv2.FILLED)
font = cv2.FONT_HERSHEY_DUPLEX
cv2.putText(frame, name, (left + 6, bottom - 6), font, 1.0,
(255, 255, 255), 1)
# 显示结果图像
cv2.imshow('Video', frame)
if cv2.waitKey(1) & 0xFF == ord('q'):
break cap.release()
cv2.destroyAllWindows()
最新文章
- Spket在Eclipse下的安装和配置(图文教程)
- ueditor .net版本上传图片功能配置
- Mac Pro Office Word 2011 个性化设置
- django 模版语法及使用
- (DFS)hdoj1241-Oil Deposit
- SQLite在多线程环境下的应用
- Samsung Galaxy S II GT-I9100 指令全集 部分指令请慎用
- HDU4864:Task(贪心)
- 在eclipse中将java导出为可执行文件.
- [IDEs]Eclipse自动格式化代码
- vc操作电脑之常用命令
- windows server 2012 R2汉化 -- 玩转Microsoft Azure
- redis 一些操作命令
- 我的idea突然没有SVN了是怎么回事
- git的介绍
- SharePoint 中时间轴 Timeline的实现
- box-shadow 边框样式
- autocomplete 自动填充 combobox
- 微软Silverlight欲攻占iPhone和Android手机
- Jupyter notebook用法