人脸检测(Python)

立山  金牌会员 | 2024-7-10 22:52:54 | 显示全部楼层 | 阅读模式
打印 上一主题 下一主题

主题 692|帖子 692|积分 2076

 

目次
情况:
初始化摄像头: 
初始化FaceDetector对象:
获取摄像头帧: 
获取数据:
绘制数据:
显示图像:
完整代码: 
情况:

    cvzone库:cvzone是一个基于OpenCV的计算机视觉库,它提供了一些方便的功能和工具,用于图像处理、人脸检测、手势识别等应用。cvzone库是由Murtaza Hassan开辟的,目前支持Python语言。
  
  cv2库:cv2是OpenCV(Open Source Computer Vision Library)的Python接口库,它是一种广泛使用的计算机视觉和图像处理库。cv2提供了丰富的函数和工具,用于处理图像、视频、举行特性检测、图像变更等各种计算机视觉任务。
  
  可以通过清华镜像源安装
  初始化摄像头: 

  1. cap = cv2.VideoCapture(0) # 通常 '0' 指的是内置摄像头
  2. cap.set(3,1280)     #设置摄像头的分辨率为 1280x720
  3. cap.set(4,720)
复制代码
初始化FaceDetector对象:

   FaceDetector是一个基于OpenCV的库,它提供了一个简单而强大的人脸检测器。它使用了OpenCV的级联分类器(Cascade Classifier)来检测人脸,并提供了方便易用的接口。FaceDetector可以在静态图像或实时视频中检测出人脸,并返回每个检测到的人脸的位置和界限框。它还可以根据必要举行参数调整,以适应差别场景和要求。FaceDetector在诸如人脸识别、人脸跟踪、心情检测等应用中非常有效。
  1. detector = FaceDetector(minDetectionCon=0.5, modelSelection=1)
  2. # modelSelection: 0 表示短距离检测(2米),1 表示长距离检测(5米)
复制代码
获取摄像头帧: 

  1. # success: 布尔值,表示是否成功捕获了帧
  2.     # img: 捕获的帧
  3.     success, img = cap.read() # 从摄像头读取当前帧
  4.     # 在图像中检测人脸
  5.     # img: 更新后的图像
  6.     # bboxs: 检测到的人脸边界框列表
  7.     img, bboxs = detector.findFaces(img, draw=False) #在图像中检测人脸,并返回更新后的图像和人脸边界框列表
复制代码
获取数据:

  1. # ---- 获取数据 ---- #
  2.             center = bbox["center"]  # 获取人脸中心坐标
  3.             x, y, w, h = bbox['bbox']  # 获取边界框的坐标和大小
  4.             score = int(bbox['score'][0] * 100)  # 获取识别置信度(百分比)
复制代码
绘制数据:

  1.   # ---- 绘制数据 ---- #
  2.             cv2.circle(img, center, 5, (255, 0, 255), cv2.FILLED)  # 绘制圆形标记人脸中心
  3.             cvzone.putTextRect(img, f'{score}%', (x, y - 15), border=5)  # 显示识别置信度文本
  4.             cvzone.cornerRect(img, (x, y, w, h))  # 绘制矩形框
复制代码
显示图像:

  1. # 在名为'Image'的窗口中显示图像
  2.     cv2.imshow("Image", img)
  3.     # 等待1毫秒,如果按下任意键则关闭窗口
  4.     cv2.waitKey(1)
复制代码
完整代码: 

  1. #coding=gbk# 导入必要的库import cvzonefrom cvzone.FaceDetectionModule import FaceDetectorimport cv2import logging# 设置日志记录logging.basicConfig(level=logging.INFO, format='%(asctime)s - %(levelname)s - %(message)s')# 记录日志信息logging.info('这是一条信息日志')logging.warning('这是一条告诫日志')logging.error('这是一条错误日志')# 初始化摄像头cap = cv2.VideoCapture(0) # 通常 '0' 指的是内置摄像头
  2. cap.set(3,1280)     #设置摄像头的分辨率为 1280x720
  3. cap.set(4,720)# 初始化FaceDetector对象# minDetectionCon: 最小检测置信度阈值# modelSelection: 0 表示短距离检测(2米),1 表示长距离检测(5米)detector = FaceDetector(minDetectionCon=0.5, modelSelection=1)# 循环获取摄像头帧while True:    # success: 布尔值,表示是否成功捕获了帧
  4.     # img: 捕获的帧
  5.     success, img = cap.read() # 从摄像头读取当前帧
  6.     # 在图像中检测人脸
  7.     # img: 更新后的图像
  8.     # bboxs: 检测到的人脸边界框列表
  9.     img, bboxs = detector.findFaces(img, draw=False) #在图像中检测人脸,并返回更新后的图像和人脸边界框列表    # 如果检测到人脸    if bboxs:        # 遍历每个界限框        for bbox in bboxs:            # bbox 包含 'id', 'bbox', 'score', 'center'            # ---- 获取数据 ---- #
  10.             center = bbox["center"]  # 获取人脸中心坐标
  11.             x, y, w, h = bbox['bbox']  # 获取边界框的坐标和大小
  12.             score = int(bbox['score'][0] * 100)  # 获取识别置信度(百分比)
  13.             # ---- 绘制数据 ---- #
  14.             cv2.circle(img, center, 5, (255, 0, 255), cv2.FILLED)  # 绘制圆形标记人脸中心
  15.             cvzone.putTextRect(img, f'{score}%', (x, y - 15), border=5)  # 显示识别置信度文本
  16.             cvzone.cornerRect(img, (x, y, w, h))  # 绘制矩形框    # 在名为'Image'的窗口中显示图像
  17.     cv2.imshow("Image", img)
  18.     # 等待1毫秒,如果按下任意键则关闭窗口
  19.     cv2.waitKey(1)
复制代码


免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。
回复

使用道具 举报

0 个回复

倒序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

立山

金牌会员
这个人很懒什么都没写!

标签云

快速回复 返回顶部 返回列表