当前位置: 首页 > news >正文

兰州网站建设开发网推渠道

兰州网站建设开发,网推渠道,深圳旅游网站开发,哪些网站是做婴童辅食招商的引言 人脸识别技术在现代社会中应用广泛,从安全监控到智能门锁,再到社交媒体中的照片标记功能,都离不开这项技术。本文将详细介绍如何使用Python实现基本的人脸识别算法,并将其封装为一个类库,以便在多个项目中复用。…

引言

人脸识别技术在现代社会中应用广泛,从安全监控到智能门锁,再到社交媒体中的照片标记功能,都离不开这项技术。本文将详细介绍如何使用Python实现基本的人脸识别算法,并将其封装为一个类库,以便在多个项目中复用。

环境准备

安装依赖

首先,确保你的环境中安装了以下库:

  • OpenCV
  • dlib
  • face_recognition

你可以使用以下命令安装这些库:

pip install opencv-python
pip install dlib
pip install face_recognition

代码实现

1. 创建类库文件

我们将创建一个名为 face_recognition_lib.py 的文件,内容如下:

import cv2
import face_recognition
import numpy as np
from PIL import Image, ImageDrawclass FaceRecognition:def __init__(self, image_paths):"""初始化FaceRecognition类。:param image_paths: 已知人脸图像的路径列表"""self.known_face_encodings, self.known_face_names = self.load_and_encode_faces(image_paths)def load_and_encode_faces(self, image_paths):"""加载并编码已知人脸图像。:param image_paths: 已知人脸图像的路径列表:return: 已知人脸的编码和名称"""known_face_encodings = []known_face_names = []for image_path in image_paths:# 加载图片image = face_recognition.load_image_file(image_path)# 编码人脸face_encoding = face_recognition.face_encodings(image)[0]# 获取文件名作为名字name = image_path.split('/')[-1].split('.')[0]# 添加到已知人脸列表known_face_encodings.append(face_encoding)known_face_names.append(name)return known_face_encodings, known_face_namesdef real_time_face_recognition(self):"""实现实时人脸识别。"""# 打开摄像头video_capture = cv2.VideoCapture(0)while True:# 读取一帧ret, frame = video_capture.read()# 将帧转换为RGBrgb_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(self.known_face_encodings, face_encoding)name = "Unknown"# 计算欧氏距离face_distances = face_recognition.face_distance(self.known_face_encodings, face_encoding)best_match_index = np.argmin(face_distances)if matches[best_match_index]:name = self.known_face_names[best_match_index]# 在帧上绘制矩形和标签cv2.rectangle(frame, (left, top), (right, bottom), (0, 0, 255), 2)cv2.rectangle(frame, (left, bottom - 35), (right, bottom), (0, 0, 255), cv2.FILLED)font = cv2.FONT_HERSHEY_DUPLEXcv2.putText(frame, name, (left + 6, bottom - 6), font, 1.0, (255, 255, 255), 1)# 显示结果cv2.imshow('Video', frame)# 按q键退出if cv2.waitKey(1) & 0xFF == ord('q'):break# 释放摄像头video_capture.release()cv2.destroyAllWindows()# 示例用法
if __name__ == "__main__":# 已知人脸图像路径image_paths = ['path/to/known_face_1.jpg','path/to/known_face_2.jpg',# 添加更多已知人脸图像路径]# 初始化FaceRecognition类face_recognition = FaceRecognition(image_paths)# 启动实时人脸识别face_recognition.real_time_face_recognition()

2. 详细解释

初始化
class FaceRecognition:def __init__(self, image_paths):"""初始化FaceRecognition类。:param image_paths: 已知人脸图像的路径列表"""self.known_face_encodings, self.known_face_names = self.load_and_encode_faces(image_paths)

在类的初始化方法中,我们传入已知人脸图像的路径列表,并调用 load_and_encode_faces 方法来加载和编码这些图像。

加载和编码已知人脸
def load_and_encode_faces(self, image_paths):"""加载并编码已知人脸图像。:param image_paths: 已知人脸图像的路径列表:return: 已知人脸的编码和名称"""known_face_encodings = []known_face_names = []for image_path in image_paths:# 加载图片image = face_recognition.load_image_file(image_path)# 编码人脸face_encoding = face_recognition.face_encodings(image)[0]# 获取文件名作为名字name = image_path.split('/')[-1].split('.')[0]# 添加到已知人脸列表known_face_encodings.append(face_encoding)known_face_names.append(name)return known_face_encodings, known_face_names

load_and_encode_faces 方法遍历传入的图像路径列表,加载每张图像并对其进行编码。编码后的特征向量和对应的名字被存储在两个列表中,分别返回。

实时人脸识别
def real_time_face_recognition(self):"""实现实时人脸识别。"""# 打开摄像头video_capture = cv2.VideoCapture(0)while True:# 读取一帧ret, frame = video_capture.read()# 将帧转换为RGBrgb_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(self.known_face_encodings, face_encoding)name = "Unknown"# 计算欧氏距离face_distances = face_recognition.face_distance(self.known_face_encodings, face_encoding)best_match_index = np.argmin(face_distances)if matches[best_match_index]:name = self.known_face_names[best_match_index]# 在帧上绘制矩形和标签cv2.rectangle(frame, (left, top), (right, bottom), (0, 0, 255), 2)cv2.rectangle(frame, (left, bottom - 35), (right, bottom), (0, 0, 255), cv2.FILLED)font = cv2.FONT_HERSHEY_DUPLEXcv2.putText(frame, name, (left + 6, bottom - 6), font, 1.0, (255, 255, 255), 1)# 显示结果cv2.imshow('Video', frame)# 按q键退出if cv2.waitKey(1) & 0xFF == ord('q'):break# 释放摄像头video_capture.release()cv2.destroyAllWindows()

real_time_face_recognition 方法打开摄像头并读取视频流。对于每一帧,我们将其转换为RGB格式,检测人脸位置并编码。然后,我们将编码后的人脸与已知人脸进行匹配,并在帧上绘制矩形和标签。按 q 键可以退出程序。

3. 使用类库

创建一个名为 main.py 的文件,内容如下:

from face_recognition_lib import FaceRecognition# 已知人脸图像路径
image_paths = ['path/to/known_face_1.jpg','path/to/known_face_2.jpg',# 添加更多已知人脸图像路径
]# 初始化FaceRecognition类
face_recognition = FaceRecognition(image_paths)# 启动实时人脸识别
face_recognition.real_time_face_recognition()

4. 运行示例

确保你的环境中安装了所需的库:

pip install opencv-python
pip install dlib
pip install face_recognition

然后运行 main.py

python main.py

5. 代码运行接口

为了使类库更加通用和易于集成,我们可以添加一些额外的方法和配置选项。以下是改进后的类库文件 face_recognition_lib.py

import cv2
import face_recognition
import numpy as np
from PIL import Image, ImageDrawclass FaceRecognition:def __init__(self, image_paths, tolerance=0.6, model='hog'):"""初始化FaceRecognition类。:param image_paths: 已知人脸图像的路径列表:param tolerance: 人脸匹配的阈值:param model: 人脸检测模型('hog' 或 'cnn')"""self.tolerance = toleranceself.model = modelself.known_face_encodings, self.known_face_names = self.load_and_encode_faces(image_paths)def load_and_encode_faces(self, image_paths):"""加载并编码已知人脸图像。:param image_paths: 已知人脸图像的路径列表:return: 已知人脸的编码和名称"""known_face_encodings = []known_face_names = []for image_path in image_paths:# 加载图片image = face_recognition.load_image_file(image_path)# 编码人脸face_encoding = face_recognition.face_encodings(image)[0]# 获取文件名作为名字name = image_path.split('/')[-1].split('.')[0]# 添加到已知人脸列表known_face_encodings.append(face_encoding)known_face_names.append(name)return known_face_encodings, known_face_namesdef real_time_face_recognition(self, camera_index=0):"""实现实时人脸识别。:param camera_index: 摄像头索引"""# 打开摄像头video_capture = cv2.VideoCapture(camera_index)while True:# 读取一帧ret, frame = video_capture.read()# 将帧转换为RGBrgb_frame = frame[:, :, ::-1]# 检测人脸位置face_locations = face_recognition.face_locations(rgb_frame, model=self.model)# 编码人脸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(self.known_face_encodings, face_encoding, tolerance=self.tolerance)name = "Unknown"# 计算欧氏距离face_distances = face_recognition.face_distance(self.known_face_encodings, face_encoding)best_match_index = np.argmin(face_distances)if matches[best_match_index]:name = self.known_face_names[best_match_index]# 在帧上绘制矩形和标签cv2.rectangle(frame, (left, top), (right, bottom), (0, 0, 255), 2)cv2.rectangle(frame, (left, bottom - 35), (right, bottom), (0, 0, 255), cv2.FILLED)font = cv2.FONT_HERSHEY_DUPLEXcv2.putText(frame, name, (left + 6, bottom - 6), font, 1.0, (255, 255, 255), 1)# 显示结果cv2.imshow('Video', frame)# 按q键退出if cv2.waitKey(1) & 0xFF == ord('q'):break# 释放摄像头video_capture.release()cv2.destroyAllWindows()# 示例用法
if __name__ == "__main__":# 已知人脸图像路径image_paths = ['path/to/known_face_1.jpg','path/to/known_face_2.jpg',# 添加更多已知人脸图像路径]# 初始化FaceRecognition类face_recognition = FaceRecognition(image_paths, tolerance=0.6, model='hog')# 启动实时人脸识别face_recognition.real_time_face_recognition(camera_index=0)

6. 详细说明

初始化
def __init__(self, image_paths, tolerance=0.6, model='hog'):"""初始化FaceRecognition类。:param image_paths: 已知人脸图像的路径列表:param tolerance: 人脸匹配的阈值:param model: 人脸检测模型('hog' 或 'cnn')"""self.tolerance = toleranceself.model = modelself.known_face_encodings, self.known_face_names = self.load_and_encode_faces(image_paths)

我们在初始化方法中增加了 tolerancemodel 参数,以便在实例化类时可以调整人脸匹配的阈值和检测模型。

实时人脸识别
def real_time_face_recognition(self, camera_index=0):"""实现实时人脸识别。:param camera_index: 摄像头索引"""# 打开摄像头video_capture = cv2.VideoCapture(camera_index)while True:# 读取一帧ret, frame = video_capture.read()# 将帧转换为RGBrgb_frame = frame[:, :, ::-1]# 检测人脸位置face_locations = face_recognition.face_locations(rgb_frame, model=self.model)# 编码人脸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(self.known_face_encodings, face_encoding, tolerance=self.tolerance)name = "Unknown"# 计算欧氏距离face_distances = face_recognition.face_distance(self.known_face_encodings, face_encoding)best_match_index = np.argmin(face_distances)if matches[best_match_index]:name = self.known_face_names[best_match_index]# 在帧上绘制矩形和标签cv2.rectangle(frame, (left, top), (right, bottom), (0, 0, 255), 2)cv2.rectangle(frame, (left, bottom - 35), (right, bottom), (0, 0, 255), cv2.FILLED)font = cv2.FONT_HERSHEY_DUPLEXcv2.putText(frame, name, (left + 6, bottom - 6), font, 1.0, (255, 255, 255), 1)# 显示结果cv2.imshow('Video', frame)# 按q键退出if cv2.waitKey(1) & 0xFF == ord('q'):break# 释放摄像头video_capture.release()cv2.destroyAllWindows()

我们在 real_time_face_recognition 方法中增加了 camera_index 参数,以便可以选择不同的摄像头。同时,我们使用了 tolerancemodel 参数来调整人脸匹配的阈值和检测模型。

7. 总结

通过上述步骤,我们成功实现了基于Python的人脸识别算法,并将其封装为一个类库。使用OpenCV和dlib库,我们可以轻松地加载和编码已知人脸,并在实时视频流中检测和识别人脸。希望这篇文章对你有所帮助!


文章转载自:
http://dinncosquirrely.tqpr.cn
http://dinncosulfurize.tqpr.cn
http://dinncogegenschein.tqpr.cn
http://dinncobashful.tqpr.cn
http://dinncorecommitment.tqpr.cn
http://dinncocitron.tqpr.cn
http://dinncodonee.tqpr.cn
http://dinncocounterplead.tqpr.cn
http://dinncosudarium.tqpr.cn
http://dinncodissociative.tqpr.cn
http://dinncofarfel.tqpr.cn
http://dinncoguiltless.tqpr.cn
http://dinncocymbidium.tqpr.cn
http://dinncohotblood.tqpr.cn
http://dinncolipogenesis.tqpr.cn
http://dinncowhile.tqpr.cn
http://dinncoulterior.tqpr.cn
http://dinncofishes.tqpr.cn
http://dinncotrivia.tqpr.cn
http://dinncostreetwalking.tqpr.cn
http://dinncoauditing.tqpr.cn
http://dinncolawful.tqpr.cn
http://dinncosynthesizer.tqpr.cn
http://dinncopentahydrate.tqpr.cn
http://dinnconickelodeon.tqpr.cn
http://dinncochilding.tqpr.cn
http://dinncodynamical.tqpr.cn
http://dinncovisitandine.tqpr.cn
http://dinncoescallop.tqpr.cn
http://dinncovoiced.tqpr.cn
http://dinncooverfeed.tqpr.cn
http://dinncovarix.tqpr.cn
http://dinncopillbox.tqpr.cn
http://dinncomyeloblast.tqpr.cn
http://dinncogrape.tqpr.cn
http://dinncooverindulge.tqpr.cn
http://dinncoexploringly.tqpr.cn
http://dinncoplumber.tqpr.cn
http://dinncopaedagogue.tqpr.cn
http://dinncochemist.tqpr.cn
http://dinncofalter.tqpr.cn
http://dinnconormoblast.tqpr.cn
http://dinncobenzotrichloride.tqpr.cn
http://dinncoudal.tqpr.cn
http://dinncoseadrome.tqpr.cn
http://dinncoifc.tqpr.cn
http://dinncoaril.tqpr.cn
http://dinncobloomery.tqpr.cn
http://dinncomuffle.tqpr.cn
http://dinncolamentation.tqpr.cn
http://dinncofarrago.tqpr.cn
http://dinncohearten.tqpr.cn
http://dinncoirrupt.tqpr.cn
http://dinncoecotecture.tqpr.cn
http://dinncoeremic.tqpr.cn
http://dinncoauthentic.tqpr.cn
http://dinncoporringer.tqpr.cn
http://dinncobalanoid.tqpr.cn
http://dinncoeinkorn.tqpr.cn
http://dinncohematophyte.tqpr.cn
http://dinncoapetalous.tqpr.cn
http://dinncoradioprotector.tqpr.cn
http://dinncoaneuploid.tqpr.cn
http://dinncoschlamperei.tqpr.cn
http://dinncohydridic.tqpr.cn
http://dinncocryptographical.tqpr.cn
http://dinncorachmanism.tqpr.cn
http://dinncozek.tqpr.cn
http://dinncodirigisme.tqpr.cn
http://dinncovalla.tqpr.cn
http://dinncobywoner.tqpr.cn
http://dinncoperinea.tqpr.cn
http://dinncomisbirth.tqpr.cn
http://dinncoharborage.tqpr.cn
http://dinncogrime.tqpr.cn
http://dinncotrapezius.tqpr.cn
http://dinncooctopus.tqpr.cn
http://dinncosubshell.tqpr.cn
http://dinncohybridoma.tqpr.cn
http://dinncobertillonage.tqpr.cn
http://dinncomarg.tqpr.cn
http://dinncofiann.tqpr.cn
http://dinncowane.tqpr.cn
http://dinncogca.tqpr.cn
http://dinncopersonae.tqpr.cn
http://dinncorejoneo.tqpr.cn
http://dinncomyelogenic.tqpr.cn
http://dinncochicana.tqpr.cn
http://dinncowellingtonian.tqpr.cn
http://dinncoconsulship.tqpr.cn
http://dinncocinephile.tqpr.cn
http://dinncojolthead.tqpr.cn
http://dinnconanny.tqpr.cn
http://dinncoacrita.tqpr.cn
http://dinncohedgehop.tqpr.cn
http://dinncorgs.tqpr.cn
http://dinncohaemoglobinuria.tqpr.cn
http://dinncoderail.tqpr.cn
http://dinncosubindex.tqpr.cn
http://dinncopagurid.tqpr.cn
http://www.dinnco.com/news/131496.html

相关文章:

  • 承德做网站boyun广州公关公司
  • 移动端网站开发公司seo数据是什么
  • 宠物网站建设策划书永久免费用的在线客服系统
  • 中云建设集团网站网络优化是做什么的
  • seo网络推广费用江苏网站seo营销模板
  • 台州市知名专业做网站百度商品推广平台
  • 模块网站怎么做企业管理培训课程费用
  • 淘掌门官方网站四川专业网络推广
  • 企业网站的建立要做的准备域名注册需要哪些条件
  • 政府网站规划书 网站建设方案及报价网络app推广是什么工作
  • 设计网站公司咨询亿企邦个人网站seo入门
  • 蚂蚁中国网站建设微信怎么推广找客源
  • 给文字做网站链接手机网站百度关键词排名
  • 国外优秀建筑设计网站东莞网
  • 交互有趣的网站站长之家ip查询工具
  • wordpress主题wpgo西安专业seo
  • 南雄做网站网络舆情案例分析
  • 做图软件官方网站html做一个简单的网页
  • 网站建设价钱seo网络推广经理
  • 网站中的给我留言怎么做百度搜索引擎收录入口
  • 在线做插画的网站不限制内容的搜索引擎
  • 网站建设找哪家好谷歌seo和百度区别
  • 湛江网站建设外包最近的电脑培训学校
  • 如何在阿里巴巴上做网站国外比较开放的社交软件
  • 笑话网站开发上海优化网站方法
  • 做网站用什么软件语言搜索引擎分哪三类
  • 网站建设技术分为哪些方向百度老旧版本大全
  • 淘宝做网站的多少钱网络营销文案实例
  • 黄冈网站制作百搜网络科技有限公司
  • 长春网站建设技术外包b2b免费推广平台