资讯专栏INFORMATION COLUMN

Python-OpenCV进行人脸识别

Pines_Cheng / 2825人阅读

摘要:在之前的文章中,我们学习了使用数据集训练出一个识别器。现在,我们将使用这个训练好的文件去识别人脸了。我们把程序改成释放资源记得释放资源测试然后在测试阶段,这个人工智障完美地识别不出我。

在之前的文章中,我们学习了使用数据集训练出一个识别器。本文中,我们将载入这个识别器,然后来看见怎么识别人脸。

如果看过之前的文章,你就已经准备好了一个识别器,它就在trainner文件夹和trainner.yml文件里面。

现在,我们将使用这个训练好的文件去识别人脸了。

导入
import cv2
import numpy as np
加载识别器

接下来,我们用OpenCV库以及我们训练好的数据(yml文件)创建一个识别器对象:

recognizer = cv2.face.LBPHFaceRecognizer_create()
# recognizer = cv2.createLBPHFaceRecognizer() # in OpenCV 2
recognizer.read("trainner/trainner.yml")
# recognizer.load("trainner/trainner.yml") # in OpenCV 2

然后用之前准备好的xml创建一个分类器:

cascade_path = "haarcascade_frontalface_default.xml"
face_cascade = cv2.CascadeClassifier(cascade_path)

获取到摄像头的控制对象:

cam = cv2.VideoCapture(0)

加载一个字体,用于在识别后,在图片上标注出识别对象的名字:

# font = cv2.cv.InitFont(cv2.cv.CV_FONT_HERSHEY_SIMPLEX, 1, 1, 0, 1, 1)
font = cv2.FONT_HERSHEY_SIMPLEX
识别程序的主循环

在程序的主循环中,我们需要做的是:

从摄像头中获取图像

将图像转换为灰度图片

在图片中检测人脸

用识别器识别该人的id

将识别出人脸的id或名称用矩形在图片中标出来

while True:
    ret, im = cam.read()
    gray = cv2.cvtColor(im, cv2.COLOR_BGR2GRAY)
    faces = face_cascade.detectMultiScale(gray, 1.2, 5)
    for (x, y, w, h) in faces:
        cv2.rectangle(im, (x - 50, y - 50), (x + w + 50, y + h + 50), (225, 0, 0), 2)
        img_id, conf = recognizer.predict(gray[y:y + h, x:x + w])
        # cv2.cv.PutText(cv2.cv.fromarray(im), str(Id), (x, y + h), font, 255)
        cv2.putText(im, str(img_id), (x, y + h), font, 0.55, (0, 255, 0), 1)
    cv2.imshow("im", im)
    if cv2.waitKey(10) & 0xFF == ord("q"):
        break

recognizer.predict为预测函数,putText则是在图片上添加文字

更进一步

由于可能识别不出来,或者存在未知的人脸。而且,如果只用id1,id2就会大大地降低了程序的体验。因此,我们可以把id换成名字,把未知的脸标为未知。

我们把程序改成:

        img_id, conf = recognizer.predict(gray[y:y + h, x:x + w])
        if conf > 50:
            if img_id == 1:
                img_id = "jianyujianyu"
            elif img_id == 2:
                img_id = "ghost"
        else:
            img_id = "Unknown"
        # cv2.cv.PutText(cv2.cv.fromarray(im), str(Id), (x, y + h), font, 255)
        cv2.putText(im, str(img_id), (x, y + h), font, 0.55, (0, 255, 0), 1)
释放资源

记得释放资源

cam.release()
cv2.destroyAllWindows()
测试

然后在测试阶段,这个人工智障完美地识别不出我。

我觉得是素材不够丰富,我回头改改。。。

完整代码

现在的目录:

import cv2
import numpy as np

recognizer = cv2.face.LBPHFaceRecognizer_create()
# recognizer = cv2.createLBPHFaceRecognizer() # in OpenCV 2
recognizer.read("trainner/trainner.yml")
# recognizer.load("trainner/trainner.yml") # in OpenCV 2

cascade_path = "haarcascade_frontalface_default.xml"
face_cascade = cv2.CascadeClassifier(cascade_path)
cam = cv2.VideoCapture(0)
# font = cv2.cv.InitFont(cv2.cv.CV_FONT_HERSHEY_SIMPLEX, 1, 1, 0, 1, 1) # in OpenCV 2
font = cv2.FONT_HERSHEY_SIMPLEX

while True:
    ret, im = cam.read()
    gray = cv2.cvtColor(im, cv2.COLOR_BGR2GRAY)
    faces = face_cascade.detectMultiScale(gray, 1.2, 5)
    for (x, y, w, h) in faces:
        cv2.rectangle(im, (x - 50, y - 50), (x + w + 50, y + h + 50), (225, 0, 0), 2)
        img_id, conf = recognizer.predict(gray[y:y + h, x:x + w])
        if conf > 50:
            if img_id == 1:
                img_id = "jianyujianyu"
            elif img_id == 2:
                img_id = "ghost"
        else:
            img_id = "Unknown"
        # cv2.cv.PutText(cv2.cv.fromarray(im), str(Id), (x, y + h), font, 255)
        cv2.putText(im, str(img_id), (x, y + h), font, 0.55, (0, 255, 0), 1)
    cv2.imshow("im", im)
    if cv2.waitKey(10) & 0xFF == ord("q"):
        break

cam.release()
cv2.destroyAllWindows()

先这样吧

原文,若有错误之处请指出,更多地关注煎鱼。

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/41757.html

相关文章

  • Python-OpenCV人脸识别之数据集生成

    摘要:我们把要做的事分成三部分创建数据集训练识别在本文中,我们会尝试写一个程序来生成数据集。生成数据集我们来写一个数据集生成脚本。为了不会将不同的人脸照片弄混,我们需要定一个命名规则,用于给照片命名。 在上一篇文章中,我们学习了如何安装配置OpenCV和Python,然后写了些代码玩玩人脸检测。现在我们要进行下一步了,即搞一个人脸识别程序,就是不只是检测还需要识别到人是谁。 来,搞人脸识别 ...

    ivyzhang 评论0 收藏0
  • Python-OpenCV训练一个人脸识别

    摘要:想要能人脸识别,我们需要训练一个识别器处理。现在,是时候用这个训练集来训练一个人脸识别器了。同目录下,创建一个文件夹,名为,用于存放我们训练后的识别器。训练差不多完成了,现在我们调用一下这个函数,然后将我们的数据喂给识别器去训练吧。 想要能人脸识别,我们需要训练一个识别器处理。训练的话就需要之前已经标注好的训练集,在前一篇文章中,我们创建了一个已经标注好的训练集。现在,是时候用这个训练...

    付永刚 评论0 收藏0
  • 首次公开,整理12年积累的博客收藏夹,零距离展示《收藏夹吃灰》系列博客

    摘要:时间永远都过得那么快,一晃从年注册,到现在已经过去了年那些被我藏在收藏夹吃灰的文章,已经太多了,是时候把他们整理一下了。那是因为收藏夹太乱,橡皮擦给设置私密了,不收拾不好看呀。 ...

    Harriet666 评论0 收藏0
  • 浅谈人脸识别技术的方法和应用

    摘要:人脸识别技术所独具的活性判别能力保证了他人无法以非活性的照片木偶蜡像来欺骗识别系统。人脸识别技术所采用的依据是人脸照片或实时摄取的人脸图像,因而无疑是最容易获得的。 人脸识别是近年来模式识别、图像处理、机器视觉、神经网络以及认知科学等领域研究的热点课题之一,被广泛应用于公共安全(罪犯识别等)...

    Charles 评论0 收藏0
  • 深度学习在人脸识别中的应用 —— 优图祖母模型的「进化」

    摘要:本文着重以人脸识别为例介绍深度学习技术在其中的应用,以及优图团队经过近五年的积累对人脸识别技术乃至整个人工智能领域的一些认识和分享。从年左右,受深度学习在整个机器视觉领域迅猛发展的影响,人脸识别的深时代正式拉开序幕。 腾讯优图隶属于腾讯社交网络事业群(SNG),团队整体立足于腾讯社交网络大平台,专注于图像处理、模式识别、机器学习、数据挖掘、深度学习、音频语音分析等领域开展技术研发和业务落地。...

    546669204 评论0 收藏0

发表评论

0条评论

Pines_Cheng

|高级讲师

TA的文章

阅读更多
最新活动
阅读需要支付1元查看
<