python3+dlib实现人脸识别和情绪分析

本文通过具体代码不步骤给大家详细讲述了python3+dlib实现人脸识别以及情绪分析的方法,有需要的朋友参考下。

一、介绍

我想做的是基于人脸识别的表情(情绪)分析。看到网上也是有很多的开源库提供使用,为开发提供了很大的方便。我选择目前用的比较多的dlib库进行人脸识别与特征标定。使用python也缩短了开发周期。

官网对于dlib的介绍是:Dlib包含广泛的机器学习算法。所有的设计都是高度模块化的,快速执行,并且通过一个干净而现代的C ++ API,使用起来非常简单。它用于各种应用,包括机器人技术,嵌入式设备,手机和大型高性能计算环境。

虽然应用都比较高大上,但是自己在PC上做个情绪分析的小软件还是挺有意思的。

立即学习“Python免费学习笔记(深入)”;

按照自己的想法与思路设计识别方式。目前也比较火的keras好像就是根据嘴型的变化作为情绪分析的一个指标。

而我的想法是利用嘴的张开比例,眼睛的睁开程度,眉毛的倾斜角度作为情绪分析的三个指标。但是由于人与人长相的差异较大,五官的也是千差万别,再加上我的计算方法也比较简单。所以识别效率并不是很高。

识别规则:

1、嘴巴张开距离占面部识别框宽度的比例越大,说明情绪越激动,可能是非常开心,也可能是极度愤怒。

2、眉毛上扬,17-21 或者 22-26 号特征点距离面部识别框顶部与识别框高度的比值越小,说明眉毛上扬越厉害,可表示惊讶、开心。眉毛的倾斜角度,开心时眉毛一般是上扬,愤怒时皱眉,同时眉毛下压的比较厉害。

3、眯眼睛,人在开怀大笑的时候会不自觉的眯起眼睛,愤怒或者惊讶的时候会瞪大眼睛。

系统缺点:不能捕捉细微表情的变化,只能大致的判断出人的情绪,开心、愤怒、惊讶、自然。

系统优点:结构简单,易于上手。

应用领域:微笑抓拍,捕捉瞬间的美好、缓解儿童自闭症、交互式游戏开发。

由于人感情的复杂性,这些表情确实不能完完全全的代表一个人内心深处的情绪波动,如要提高判断的准确性,则需要心率检测、语音处理等综合评价。

二、开发环境搭建:

1、安装VS2015,因为最新版的dlib-19.10需要这个版本的vscode

2、安装opencv(whl方式安装):

从pythonlibs下载需要的版本whl文件,比如(opencv_python?3.3.0+contrib?cp36?cp36m?win_amd64.whl)
然后在本地使用pip install 安装。 注意文件位置下安装(如:C:downloadxxx.whl)

3、安装dlib(whl方式安装):

在这里下载dlib的各种版本的whl文件,然后在根目录下打开cmd直接安装即可。

但是为了学习使用dlib中的各种python实例程序,还是需要下载一个dlib的压缩包。

直接访问dlib官网即可下载:http://dlib.net/ml.html

dlib各种版本的whl文件:https://pypi.python.org/simple/dlib/

4、如果想要使用人脸模型特征标定的话,还需要一个人脸面部形状预测器,这个可以通过自己的照片进行训练,也可以使用dlib作者给出的一个训练好的预测器:         

点击下载:http://dlib.net/files/shape_predictor_68_face_landmarks.dat.bz2

三、实施思路

python3+dlib实现人脸识别和情绪分析

四、具体步骤

首先是利用dlib进行人脸识别:)

import cv2import dlibfrom skimage import io# 使用特征提取器get_frontal_face_detectordetector = dlib.get_frontal_face_detector()# dlib的68点模型,使用作者训练好的特征预测器predictor = dlib.shape_predictor("shape_predictor_68_face_landmarks.dat")# 图片所在路径img = io.imread("2.jpg")# 生成dlib的图像窗口win = dlib.image_window()win.clear_overlay()win.set_image(img)# 特征提取器的实例化dets = detector(img, 1)print("人脸数:", len(dets))for k, d in enumerate(dets):    print("第", k+1, "个人脸d的坐标:",       "left:", d.left(),       "right:", d.right(),       "top:", d.top(),       "bottom:", d.bottom())    width = d.right() - d.left()    heigth = d.bottom() - d.top()    print('人脸面积为:',(width*heigth))

登录后复制

然后实例化一个 shape_predictor 对象,使用dlib作者训练好人脸特征检测器,进行人脸的特征点标定。

标定的时候使用opencv的circle方法,在特征点的坐标上面添加水印,内容就是特征点的序号和位置。

 # 利用预测器预测    shape = predictor(img, d)    # 标出68个点的位置    for i in range(68):      cv2.circle(img, (shape.part(i).x, shape.part(i).y), 4, (0, 255, 0), -1, 8)      cv2.putText(img, str(i), (shape.part(i).x, shape.part(i).y), cv2.FONT_HERSHEY_SIMPLEX, 0.5, (255, 255, 255))    # 显示一下处理的图片,然后销毁窗口    cv2.imshow('face', img)    cv2.waitKey(0)

登录后复制

到此,68个特征点的信息就获取到了,下面就需要跟根据这个68个特征点的坐标信息,进行综合 计算,作为每个表情的判断指标。

python3+dlib实现人脸识别和情绪分析

根据上面说到的我的判断指标,先计算嘴巴的张开比例,由于人离摄像头距离的远近,导致人脸识别框的大小不一,故选择比例来作为判断指标。

在选择指标的标准数值之前,先对多个开心的人脸照片进行分析。计算开心时的嘴巴张卡比例的平均。

下面是截取对人眉毛的数据处理方法,对左边眉毛上面的5个特征点进行线性拟合,拟合出一个一次函数直线,用拟合直线的斜率近似代表眉毛的倾斜程度。

# 眉毛          brow_sum = 0  # 高度之和          frown_sum = 0  # 两边眉毛距离之和          for j in range(17,21):            brow_sum+= (shape.part(j).y - d.top()) + (shape.part(j+5).y- d.top())            frown_sum+= shape.part(j+5).x - shape.part(j).x            line_brow_x.append(shape.part(j).x)            line_brow_y.append(shape.part(j).y)          self.excel_brow_hight.append(round((brow_sum/10)/self.face_width,3))          self.excel_brow_width.append(round((frown_sum/5)/self.face_width,3))          brow_hight[0]+= (brow_sum/10)/self.face_width    # 眉毛高度占比          brow_width[0]+= (frown_sum/5)/self.face_width    # 眉毛距离占比          tempx = np.array(line_brow_x)          tempy = np.array(line_brow_y)          z1 = np.polyfit(tempx, tempy, 1) # 拟合成一次直线          self.brow_k = -round(z1[0], 3)  # 拟合出曲线的斜率和实际眉毛的倾斜方向是相反的

登录后复制

我计算了25个人脸的开心表情的嘴巴张开比例、嘴巴宽度、眼睛张开程度、眉毛倾斜程度,导入excel表格生成折线图:

python3+dlib实现人脸识别和情绪分析

通过折线图能很明显的看出什么参数可以使用,什么参数的可信度不高,什么参数在那个范围内可以作为一个指标。

同样的方法,计算人愤怒、惊讶、自然时的数据折线图。

通过对多个不同表情数据的分析,得出每个指标的参考值,可以写出简单的表情分类标准:

# 分情况讨论            # 张嘴,可能是开心或者惊讶            if round(mouth_higth >= 0.03):              if eye_hight >= 0.056:                cv2.putText(im_rd, "amazing", (d.left(), d.bottom() + 20), cv2.FONT_HERSHEY_SIMPLEX, 0.8,                      (0, 0, 255), 2, 4)              else:                cv2.putText(im_rd, "happy", (d.left(), d.bottom() + 20), cv2.FONT_HERSHEY_SIMPLEX, 0.8,                      (0, 0, 255), 2, 4)            # 没有张嘴,可能是正常和生气            else:              if self.brow_k 

五、实际运行效果:

python3+dlib实现人脸识别和情绪分析

识别之后:

python3+dlib实现人脸识别和情绪分析

登录后复制

以上就是python3+dlib实现人脸识别和情绪分析的详细内容,更多请关注【创想鸟】其它相关文章!

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至253000106@qq.com举报,一经查实,本站将立刻删除。

发布者:PHP中文网,转转请注明出处:https://www.chuangxiangniao.com/p/2263538.html

(0)
上一篇 2025年2月27日 07:39:50
下一篇 2025年2月27日 07:40:11

AD推荐 黄金广告位招租... 更多推荐

相关推荐

  • uniapp中如何实现图像识别和文字识别

    标题:基于uniapp的图像识别和文字识别实现及代码示例 摘要:随着人工智能技术的发展,图像识别和文字识别已经成为了我们生活中的常见应用。本文将介绍如何在uniapp中实现图像识别和文字识别功能,并给出具体代码示例。 一、uniapp简介u…

    2025年3月13日
    200
  • 如何使用ps识别图片上的字体样式

    首先在photoshop中打开想要识别文字的目标图片 然后在上方菜单中点击文字,弹出菜单,点击匹配文字,弹出窗口提示 (免费学习视频教程推荐:ps视频教程) 最后选择目标文字区域,便会自动开始搜索字体,加载完成后,选择字体即可 相关文章教程…

    2025年3月12日 编程技术
    200
  • 得物怎么拍照识物_得物拍照识物的方法

    得物app拍照识物功能使用指南:轻松识别,便捷购物!得物app涵盖潮流鞋履、服饰、腕表等众多品类,所有商品均为正品。本文将详细介绍如何使用得物app的拍照识物功能。 第一步: 打开得物App,点击底部导航栏的“购物”按钮,进入购物页面。 第…

    2025年3月7日 互联网
    200
  • 如何实现C++中的语音识别和语音合成?

    如何实现C++中的语音识别和语音合成? 语音识别和语音合成是当今人工智能领域中的热门研究方向之一,它们在很多应用场景中起到了重要的作用。本文将介绍如何使用C++实现基于百度AI开放平台的语音识别和语音合成功能,并提供相关的代码示例。 一、语…

    2025年3月6日
    200
  • u盘电脑后面能识别

    php小编百草提醒大家,有时候我们在使用u盘连接电脑时,可能会遇到电脑后面的usb接口无法识别u盘的情况。这种问题可能是由于多种原因造成的,比如接口松动、驱动问题等。今天,我们就来一起探讨一下这个问题的解决方法,帮助大家轻松解决这一烦恼。 …

    2025年2月28日 互联网
    200
  • Python+OpenCV人脸识别技术详解

    总在科幻电影里看到人脸识别,现在我们也可以编程来实现啦。哈哈~~opencv是intel®开源计算机视觉库。它由一系列 c 函数和少量 c++ 类构成,实现了图像处理和计算机视觉方面的很多通用算法。opencv 拥有包括 300 多个c函数…

    2025年2月27日
    200
  • 对比分析python下识别二维码用法和识别率

     最近项目中用到二维码图片识别,在python下二维码识别,目前主要有三个模块:zbar 、zbarlight、zxing。 1、三个模块的用法: #-*-coding=utf-8-*-import os import loggingimp…

    编程技术 2025年2月27日
    200
  • Python实现图片识别功能的示例分享

    这篇文章主要介绍了python编程实现的图片识别功能,涉及python pil模块的安装与使用技巧,需要的朋友可以参考下 本文实例讲述了Python编程实现的图片识别功能。分享给大家供大家参考,具体如下: 1. 安装PIL,官方没有WIN6…

    编程技术 2025年2月27日
    200
  • 实例详解Python人脸识别

    最近iphone x博人眼球,其中最绝妙的设计就是人脸识别解锁,本文主要为大家详细介绍了python人脸识别初探的相关资料,具有一定的参考价值,感兴趣的小伙伴们可以参考一下,希望能帮助到大家。 1.利用opencv库 sudo apt-ge…

    2025年2月27日
    200
  • python使用Tesseract库实现识别验证

    一、tesseract简介 Tesseract是一个OCR库(OCR是英文Optical Character Recognition的缩写),它用来对文本资料进行扫描,然后对图像文件进行分析处理,获取文字及版面信息的过程,Tesseract…

    2025年2月27日
    200

发表回复

登录后才能评论