当前位置:首页 > 科技  > 软件

基于 Python 的人脸检测 :人脸识别的前提

来源: 责编: 时间:2024-06-12 17:28:51 256观看
导读人脸检测是一种识别数字图像中人类面孔的技术。人脸检测是一项相对成熟的技术,还记得在您的数码相机的旧日子里,当您通过取景器看时?您会看到围绕在取景器中的人们脸部的矩形框。在进行人脸识别之前,您需要学习的技术就是

人脸检测是一种识别数字图像中人类面孔的技术。人脸检测是一项相对成熟的技术,还记得在您的数码相机的旧日子里,当您通过取景器看时?您会看到围绕在取景器中的人们脸部的矩形框。在进行人脸识别之前,您需要学习的技术就是人脸检测,也就是试图给脸部赋予一个名字。0Jj28资讯网——每日最新资讯28at.com

0Jj28资讯网——每日最新资讯28at.com

对于人脸检测,其中最著名的算法之一是被称为Viola-Jones人脸检测技术,通常称为Haar级联。Haar级联在深度学习流行之前就被发明了,是最常用于检测人脸的技术之一。0Jj28资讯网——每日最新资讯28at.com

0Jj28资讯网——每日最新资讯28at.com

0Jj28资讯网——每日最新资讯28at.com

人脸检测/识别的道德考虑

0Jj28资讯网——每日最新资讯28at.com

尽管检测和识别人脸的能力确实很酷,但它肯定涉及很多道德问题。在将面部识别应用到项目中之前,您需要注意一些关切事项。这些关切事项包括隐私(人脸检测可用于在未经同意的情况下追踪人们的活动)、偏见(人脸检测可能对不同种族、性别或年龄的个体存在偏见)以及滥用(捕捉到的面部可能被用于其他非法用途或恶意目的)。因此,尽管本文侧重于人脸检测的技术能力,但在将其应用到工作中之前,您应该仔细考虑道德和伦理问题。0Jj28资讯网——每日最新资讯28at.com

0Jj28资讯网——每日最新资讯28at.com

以下是一些低风险项目,可以在其中实施人脸检测/识别:0Jj28资讯网——每日最新资讯28at.com

  • 考勤跟踪 —— 您可以在学校或工作场所使用人脸识别进行考勤。
  • 个性化 —— 使用人脸识别来个性化服务。一个很好的例子是在娱乐服务中,根据用户的观看历史推荐特定的电视节目。
  • 安全 —— 使用人脸识别来解锁非关键系统,如智能手机和计算机。

0Jj28资讯网——每日最新资讯28at.com

然而,在某些应用中使用人脸识别具有严重的道德影响。以下是一些例子:0Jj28资讯网——每日最新资讯28at.com

  • 执法 —— 尽管人脸识别对执法可能有用,但人们对其不准确性和偏见存在一些严重的担忧。
  • 监视 —— 人脸识别技术已经在一些国家用于监视和追踪其公民,特别是持不同政见者。一些公司还使用人脸识别来监视员工的生产力,这直接侵犯了他们的隐私。

0Jj28资讯网——每日最新资讯28at.com

如何做Haar级联

0Jj28资讯网——每日最新资讯28at.com

Haar级联分类器用于检测其经过训练的对象。以下是Haar面部分类器的工作原理的高级概述:0Jj28资讯网——每日最新资讯28at.com

  • 首先,使用一组正图像(包含面部的图像)和一组负图像(不包含面部的图像)对分类器进行训练。
  • 然后从图像中提取特征。以下图显示了从包含面部图像中提取的一些特征。

0Jj28资讯网——每日最新资讯28at.com

  • 为了从图像中检测人脸,您需要寻找通常在人脸上找到的各种特征的存在(见下图),例如眉毛,其中眉毛上方的区域比下方的区域亮。

0Jj28资讯网——每日最新资讯28at.com

  • 当一幅图像包含所有这些特征的组合时,它被认为包含一个人脸。

幸运的是,不需要知道Haar级联是如何工作的,OpenCV可以直接使用预训练的Haar级联进行人脸检测,以及用于识别其他对象的其他Haar级联。预定义的Haar级联列表可在GitHub上找到,链接为:https://github.com/opencv/opencv/tree/master/data/haarcascades。0Jj28资讯网——每日最新资讯28at.com

0Jj28资讯网——每日最新资讯28at.com

开源计算机视觉(OpenCV)是由英特尔最初开发的开源计算机视觉和机器学习软件库。它旨在为计算机视觉应用程序提供共同的基础架构,并加速机器感知在商业产品中的使用。OpenCV附带了几个预训练的Haar级联,可以检测眼睛、脸部、俄罗斯车牌、微笑等。对于人脸检测,您将需要`haarcascade_frontalface_default.xml`文件,可以从上文的GitHub链接中下载。0Jj28资讯网——每日最新资讯28at.com

0Jj28资讯网——每日最新资讯28at.com

安装OpenCV

让我们尝试使用OpenCV进行人脸检测。首先,您需要使用以下命令进行安装:0Jj28资讯网——每日最新资讯28at.com

!pip install opencv-python

对于本文示例,您需要创建一个名为`face_detection.py`的文件。首先,通过以下语句导入OpenCV库:0Jj28资讯网——每日最新资讯28at.com

import cv2

0Jj28资讯网——每日最新资讯28at.com

从Webcam读取

接下来要做的是连接到您的网络摄像头并在屏幕上显示图像:0Jj28资讯网——每日最新资讯28at.com

import cv2# default webcamstream = cv2.VideoCapture(0)while(True):    # Capture frame-by-frame    (grabbed, frame) = stream.read()    # Show the frame    cv2.imshow("Image", frame)    key = cv2.waitKey(1) & 0xFF        if key == ord("q"):    # Press q to break out of the loop        break# Cleanupstream.release()cv2.waitKey(1)cv2.destroyAllWindows()cv2.waitKey(1)

为引用您的网络摄像头,请使用`VideoCapture`类并传递一个数字,表示您的摄像头实例(0表示第一个摄像头,1表示第二个摄像头,依此类推)。0Jj28资讯网——每日最新资讯28at.com

stream = cv2.VideoCapture(0)

为了持续捕获来自网络摄像头的输入,使用一个无限循环(`while(True)`)读取每一帧然后显示它:0Jj28资讯网——每日最新资讯28at.com

 # Capture frame-by-frame    (grabbed, frame) = stream.read()    # Show the frame    cv2.imshow("Image", frame)

为了使程序能够优雅地退出,等待用户在键盘上按键。当按下"q"键时,循环终止:0Jj28资讯网——每日最新资讯28at.com

   key = cv2.waitKey(1) & 0xFF        if key == ord("q"):    # Press q to break out of the loop        break

然后进行清理工作:0Jj28资讯网——每日最新资讯28at.com

# Cleanupstream.release()cv2.waitKey(1)cv2.destroyAllWindows()cv2.waitKey(1)

要运行程序,请转到终端并键入:0Jj28资讯网——每日最新资讯28at.com

$ python face_detection.py

现在您应该看到您的脸:0Jj28资讯网——每日最新资讯28at.com

0Jj28资讯网——每日最新资讯28at.com

检测到脸部

0Jj28资讯网——每日最新资讯28at.com

现在来玩个有趣的部分 —— 检测脸部。首先,创建`CascadeClassifier`类的一个实例,并将`haarcascade_frontalface_default.xml`文件传递给它:0Jj28资讯网——每日最新资讯28at.com

import cv2# for face detectionface_cascade = cv2.CascadeClassifier('haarcascade_frontalface_default.xml')

您需要复制`haarcascade_frontalface_default.xml`文件并将其放在与`face_detection.py`文件相同的文件夹中。您可以从https://github.com/opencv/opencv/tree/master/data/haarcascades下载XML文件。现在,您可以使用`detectMultiScale()`函数来检测脸部:0Jj28资讯网——每日最新资讯28at.com

while(True):    # Capture frame-by-frame    (grabbed, frame) = stream.read()    #===============DETECTING FACES============    # Convert to grayscale    gray = cv2.cvtColor(frame, cv2.COLOR_BGR2GRAY)    # Try to detect faces in the webcam    faces = face_cascade.detectMultiScale(gray,                                           scaleFactor=1.3,                                           minNeighbors=5)        # for each faces found    for (x, y, w, h) in faces:                # Draw a rectangle around the face        color = (0, 255, 255) # in BGR        stroke = 5            cv2.rectangle(frame, (x, y), (x + w, y + h),             color, stroke)    #===============DETECTING FACE=============    # Show the frame    cv2.imshow("Image", frame)    key = cv2.waitKey(1) & 0xFF        if key == ord("q"):    # Press q to break out of the loop        break

请注意`detectMultiScale()`函数中的以下参数:0Jj28资讯网——每日最新资讯28at.com

  • scaleFactor` 参数允许您将捕获图像重新缩放到新的尺寸,以便算法能够检测到人脸。
  • minNeighbors` 参数指定每个候选矩形应具有多少邻居才能保留它。此参数影响检测到的人脸的质量。较高的值导致更少的检测,但质量更高。通常,4到6是一个不错的数字。

您可以变化这两个参数的值以确保正确检测到人脸。0Jj28资讯网——每日最新资讯28at.com

0Jj28资讯网——每日最新资讯28at.com

当检测到脸部时,您希望在它们周围画出矩形:0Jj28资讯网——每日最新资讯28at.com

# for each faces found    for (x, y, w, h) in faces:                # Draw a rectangle around the face        color = (0, 255, 255) # in BGR        stroke = 5            cv2.rectangle(frame, (x, y), (x + w, y + h),             color, stroke)

当您重新运行`face_detection.py`文件时,现在应该能够检测到脸部了。0Jj28资讯网——每日最新资讯28at.com

0Jj28资讯网——每日最新资讯28at.com

`face_detection.py`文件的完整内容如下:0Jj28资讯网——每日最新资讯28at.com

import cv2# for face detectionface_cascade = cv2.CascadeClassifier('haarcascade_frontalface_default.xml')# default webcamstream = cv2.VideoCapture(0)while(True):    # Capture frame-by-frame    (grabbed, frame) = stream.read()    # Convert to grayscale    gray = cv2.cvtColor(frame, cv2.COLOR_BGR2GRAY)    # Try to detect faces in the webcam    faces = face_cascade.detectMultiScale(gray, scaleFactor=1.3, minNeighbors=5)        # for each faces found    for (x, y, w, h) in faces:                # Draw a rectangle around the face        color = (0, 255, 255) # in BGR        stroke = 5            cv2.rectangle(frame, (x, y), (x + w, y + h),             color, stroke)    # Show the frame    cv2.imshow("Image", frame)    key = cv2.waitKey(1) & 0xFF        if key == ord("q"):    # Press q to break out of the loop        break# Cleanupstream.release()cv2.waitKey(1)cv2.destroyAllWindows()cv2.waitKey(1)

0Jj28资讯网——每日最新资讯28at.com

总结

希望这篇简短的文章为您提供了一种使用Python和您的网络摄像头检测脸部的简单方法。确保下载`haarcascade_frontalface_default.xml`文件并将其放入与您的Python文件相同的文件夹中。0Jj28资讯网——每日最新资讯28at.com

本文链接:http://www.28at.com/showinfo-26-93353-0.html基于 Python 的人脸检测 :人脸识别的前提

声明:本网页内容旨在传播知识,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。邮件:2376512515@qq.com

上一篇: ASP.NET Core 十大优秀第三方中间件推荐

下一篇: 事务中存在多线程,怎么处理?

标签:
  • 热门焦点
  • Mate60手机壳曝光 致敬自己的经典设计

    8月3日消息,今天下午博主数码闲聊站带来了华为Mate60的第三方手机壳图,可以让我们在真机发布之前看看这款华为全新旗舰的大致轮廓。从曝光的图片看,Mate 60背后摄像头面积依然
  • 7月安卓手机性价比榜:努比亚+红魔两款新机入榜

    7月登场的新机有努比亚Z50S Pro和红魔8S Pro,除了三星之外目前唯二的两款搭载超频版骁龙8Gen2处理器的产品,而且努比亚和红魔也一贯有着不错的性价比,所以在本次的性价比榜单
  • 使用LLM插件从命令行访问Llama 2

    最近的一个大新闻是Meta AI推出了新的开源授权的大型语言模型Llama 2。这是一项非常重要的进展:Llama 2可免费用于研究和商业用途。(几小时前,swyy发现它已从LLaMA 2更名为Lla
  • 雅柏威士忌多款单品价格大跌,泥煤顶流也不香了?

    来源 | 烈酒商业观察编 | 肖海林今年以来,威士忌市场开始出现了降温迹象,越来越多不断暴涨的网红威士忌也开始悄然回归市场理性。近日,LVMH集团旗下苏格兰威士忌品牌雅柏(Ardbeg
  • 慕岩炮轰抖音,百合网今何在?

    来源:价值研究所 作者:Hernanderz“难道就因为自己的一个产品牛逼了,从客服到总裁,都不愿意正视自己产品和运营上的问题,选择逃避了吗?”这一番话,出自百合网联合创
  • 梁柱接棒两年,腾讯音乐闯出新路子

    文丨田静 出品丨牛刀财经(niudaocaijing)7月5日,企鹅FM发布官方公告称由于业务调整,将于9月6日正式停止运营,这意味着腾讯音乐长音频业务走向消亡。腾讯在长音频领域还在摸索。为
  • 得物宠物生意「狂飙」,发力“它经济”

    作者|花花小萌主近日,得物宣布正式上线宠物鉴别,通过得物App内的“在线鉴别”,可找到鉴别宠物的选项。通过上传自家宠物的部位细节,就能收获拥有专业资质认证的得物鉴
  • 支持aptX Lossless无损传输 iQOO TWS 1赛道版发布限时优惠价369元

    2023年7月4日,“无损音质,声动人心”iQOO TWS 1正式发布,支持aptX Lossless无损传输,限时优惠价369元。iQOO TWS 1耳机率先支持端到端aptX Lossless无
  • iQOO Neo8 Pro评测:旗舰双芯加持 最强性能游戏旗舰

    【Techweb评测】去年10月,iQOO推出了一款Neo7手机,该机搭载了联发科天玑9000+,配备独显芯片Pro+,带来了同价位段最佳的游戏体验,一经上市便受到了诸多用
Top