Rumah pembangunan bahagian belakang Tutorial Python python3+dlib实现人脸识别和情绪分析

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

May 30, 2018 pm 02:10 PM
mood mengenalpasti

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

一、介绍

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

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

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

按照自己的想法与思路设计识别方式。目前也比较火的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:\download\xxx.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

三、实施思路

四、具体步骤

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

import cv2
import dlib
from skimage import io

# 使用特征提取器get_frontal_face_detector
detector = 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))
Salin selepas log masuk

然后实例化一个 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)
Salin selepas log masuk

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

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

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

下面是截取对人眉毛的数据处理方法,对左边眉毛上面的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)  # 拟合出曲线的斜率和实际眉毛的倾斜方向是相反的
Salin selepas log masuk

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

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

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

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

# 分情况讨论
            # 张嘴,可能是开心或者惊讶
            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 <= -0.3:
                cv2.putText(im_rd, "angry", (d.left(), d.bottom() + 20), cv2.FONT_HERSHEY_SIMPLEX, 0.8,
                      (0, 0, 255), 2, 4)
              else:
                cv2.putText(im_rd, "nature", (d.left(), d.bottom() + 20), cv2.FONT_HERSHEY_SIMPLEX, 0.8,
                      (0, 0, 255), 2, 4)
Salin selepas log masuk

五、实际运行效果:

识别之后:


Atas ialah kandungan terperinci python3+dlib实现人脸识别和情绪分析. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn

Alat AI Hot

Undresser.AI Undress

Undresser.AI Undress

Apl berkuasa AI untuk mencipta foto bogel yang realistik

AI Clothes Remover

AI Clothes Remover

Alat AI dalam talian untuk mengeluarkan pakaian daripada foto.

Undress AI Tool

Undress AI Tool

Gambar buka pakaian secara percuma

Clothoff.io

Clothoff.io

Penyingkiran pakaian AI

AI Hentai Generator

AI Hentai Generator

Menjana ai hentai secara percuma.

Artikel Panas

R.E.P.O. Kristal tenaga dijelaskan dan apa yang mereka lakukan (kristal kuning)
2 minggu yang lalu By 尊渡假赌尊渡假赌尊渡假赌
Repo: Cara menghidupkan semula rakan sepasukan
4 minggu yang lalu By 尊渡假赌尊渡假赌尊渡假赌
Hello Kitty Island Adventure: Cara mendapatkan biji gergasi
4 minggu yang lalu By 尊渡假赌尊渡假赌尊渡假赌

Alat panas

Notepad++7.3.1

Notepad++7.3.1

Editor kod yang mudah digunakan dan percuma

SublimeText3 versi Cina

SublimeText3 versi Cina

Versi Cina, sangat mudah digunakan

Hantar Studio 13.0.1

Hantar Studio 13.0.1

Persekitaran pembangunan bersepadu PHP yang berkuasa

Dreamweaver CS6

Dreamweaver CS6

Alat pembangunan web visual

SublimeText3 versi Mac

SublimeText3 versi Mac

Perisian penyuntingan kod peringkat Tuhan (SublimeText3)

Bagaimana untuk melaksanakan pengecaman pertuturan dan sintesis pertuturan dalam C++? Bagaimana untuk melaksanakan pengecaman pertuturan dan sintesis pertuturan dalam C++? Aug 26, 2023 pm 02:49 PM

Bagaimana untuk melaksanakan pengecaman pertuturan dan sintesis pertuturan dalam C++? Pengecaman pertuturan dan sintesis pertuturan ialah salah satu hala tuju penyelidikan yang popular dalam bidang kecerdasan buatan hari ini, dan ia memainkan peranan penting dalam banyak senario aplikasi. Artikel ini akan memperkenalkan cara menggunakan C++ untuk melaksanakan pengecaman pertuturan dan fungsi sintesis pertuturan berdasarkan platform terbuka Baidu AI, dan menyediakan contoh kod yang berkaitan. 1. Pengecaman pertuturan Pengecaman pertuturan ialah teknologi yang menukar pertuturan manusia kepada teks Ia digunakan secara meluas dalam pembantu suara, rumah pintar, pemanduan autonomi dan bidang lain. Berikut ialah pelaksanaan pengecaman pertuturan menggunakan C++

Teknologi pengesanan dan pengecaman muka dilaksanakan menggunakan Java Teknologi pengesanan dan pengecaman muka dilaksanakan menggunakan Java Jun 18, 2023 am 09:08 AM

Dengan perkembangan berterusan teknologi kecerdasan buatan, teknologi pengesanan dan pengecaman muka telah menjadi semakin meluas digunakan dalam kehidupan seharian. Teknologi pengesanan dan pengecaman muka digunakan secara meluas dalam pelbagai keadaan, seperti sistem kawalan akses muka, sistem pembayaran muka, enjin carian muka, dsb. Sebagai bahasa pengaturcaraan yang digunakan secara meluas, Java juga boleh melaksanakan teknologi pengesanan dan pengecaman muka. Artikel ini akan memperkenalkan cara menggunakan Java untuk melaksanakan teknologi pengesanan dan pengecaman muka. 1. Teknologi pengesanan muka Teknologi pengesanan muka merujuk kepada teknologi yang mengesan wajah dalam imej atau video. dalam J

Sebuah artikel bercakap tentang sistem pengecaman tanda trafik dalam pemanduan autonomi Sebuah artikel bercakap tentang sistem pengecaman tanda trafik dalam pemanduan autonomi Apr 12, 2023 pm 12:34 PM

Apakah sistem pengecaman tanda lalu lintas? Sistem pengecaman tanda lalu lintas bagi sistem keselamatan kereta, yang terjemahan bahasa Inggerisnya ialah: Pengecaman Tanda Lalu Lintas, atau singkatannya TSR, menggunakan kamera menghadap ke hadapan digabungkan dengan mod untuk mengecam tanda lalu lintas biasa (had laju, tempat letak kereta, pusingan U, dll.). Ciri ini memberi amaran kepada pemandu tentang papan tanda lalu lintas di hadapan supaya mereka boleh mematuhinya. Fungsi TSR mempertingkatkan keselamatan dengan mengurangkan kemungkinan pemandu tidak akan mematuhi undang-undang jalan raya seperti papan tanda berhenti dan mengelak belok kiri haram atau pelanggaran lalu lintas lain yang tidak disengajakan. Sistem ini memerlukan platform perisian yang fleksibel untuk meningkatkan algoritma pengesanan dan menyesuaikan diri dengan tanda lalu lintas di kawasan yang berbeza. Prinsip pengecaman tanda lalu lintas Pengecaman tanda lalu lintas juga dipanggil TS

Win10 mengiktiraf penyelesaian kerana tidak dapat menyambung ke internet Win10 mengiktiraf penyelesaian kerana tidak dapat menyambung ke internet Jul 11, 2023 pm 06:21 PM

Apabila anda menggunakan komputer win10, pernahkah anda menghadapi situasi di mana anda tidak dapat menyambung ke Internet? Jika anda tidak tahu bagaimana untuk menyelesaikan masalah ini, mari kita lihat artikel ini. 1. Gunakan kombinasi kekunci Win+I untuk membuka tetingkap tetapan, klik untuk memilih Rangkaian dan Internet. 2. Klik Ethernet di sebelah kiri tetingkap Rangkaian dan INTERNET, dan kemudian klik Tukar Pilihan Penyesuai dalam tetingkap kanan. 3. Dalam tetingkap Sambungan Rangkaian, klik kanan Ethernet (desktop, sila layan peranti mudah alih mengikut kesesuaian), dan klik Lumpuhkan dalam menu. 4. Selepas ia dipaparkan sebagai dilumpuhkan, klik kanan tetikus Ethernet dan laksanakan arahan dayakan. Setelah Ethernet didayakan, masalah itu harus diselesaikan. Berikut ialah pengenalan kepada pengenalan segera kegagalan rangkaian Win10 tanpa

Cara menggunakan Apple Health untuk menjejaki mood anda - iOS 17 Cara menggunakan Apple Health untuk menjejaki mood anda - iOS 17 Sep 23, 2023 pm 01:41 PM

Dalam iOS17, Apple telah menambah keupayaan untuk menjejaki emosi setiap hari dalam Apl Kesihatan, memberikan anda pemahaman menyeluruh tentang kesihatan mental anda. Melalui pemberitahuan Apl Kesihatan atau Apple Watch, anda boleh merakam mood anda pada masa yang berbeza dalam sehari dan memasukkan keseluruhan mood anda untuk hari itu. Merakam mood memaparkan peluncur dengan pilihan daripada sangat tidak menyenangkan kepada neutral kepada menyenangkan. Pilihan adalah berkod warna (sangat tidak menyenangkan adalah ungu, neutral adalah biru, sangat menyenangkan adalah oren) dan ideanya adalah untuk menyeret peluncur ke perwakilan terdekat mood semasa anda. Dari situ, Apple bertanya kepada anda perkara yang paling menggambarkan perasaan dan menyediakan senarai kata sifat berkaitan emosi yang boleh anda pilih. Sebagai contoh, emosi "sangat menyenangkan" mempunyai kejutan

Huawei akan melancarkan sistem penderiaan Xuanji dalam bidang boleh pakai pintar, yang boleh menilai keadaan emosi pengguna berdasarkan kadar denyutan jantung Huawei akan melancarkan sistem penderiaan Xuanji dalam bidang boleh pakai pintar, yang boleh menilai keadaan emosi pengguna berdasarkan kadar denyutan jantung Aug 29, 2024 pm 03:30 PM

Baru-baru ini, Huawei mengumumkan bahawa ia akan melancarkan produk boleh pakai pintar baharu yang dilengkapi sistem penderiaan Xuanji pada bulan September, yang dijangka menjadi jam tangan pintar terbaru Huawei. Produk baharu ini akan menyepadukan fungsi pemantauan kesihatan emosi termaju Sistem Persepsi Xuanji menyediakan pengguna dengan penilaian kesihatan yang komprehensif dengan enam cirinya - ketepatan, kekomprehensif, kelajuan, fleksibiliti, keterbukaan dan skalabiliti. Sistem ini menggunakan modul penderiaan super dan mengoptimumkan teknologi seni bina laluan optik berbilang saluran, yang meningkatkan ketepatan pemantauan penunjuk asas seperti kadar jantung, oksigen darah dan kadar pernafasan. Selain itu, Sistem Penderiaan Xuanji juga telah mengembangkan penyelidikan mengenai keadaan emosi berdasarkan data kadar jantung Ia tidak terhad kepada penunjuk fisiologi, tetapi juga boleh menilai keadaan emosi dan tahap tekanan pengguna. Ia menyokong pemantauan lebih daripada 60 sukan penunjuk kesihatan, meliputi kardiovaskular, pernafasan, neurologi, endokrin,

Bagaimana untuk mengenal pasti apabila jadual dikunci dalam pangkalan data Oracle? Bagaimana untuk mengenal pasti apabila jadual dikunci dalam pangkalan data Oracle? Mar 09, 2024 pm 01:09 PM

Dalam pangkalan data Oracle, jadual dikunci adalah situasi biasa Bagaimana untuk mengenal pasti dan menyelesaikan masalah ini adalah salah satu cabaran yang sering dihadapi oleh pentadbir pangkalan data. Artikel ini akan memperkenalkan cara mengenal pasti kunci jadual dalam pangkalan data Oracle, dan memberikan contoh kod khusus untuk membantu pentadbir pangkalan data mencari dan menyelesaikan masalah kunci meja dengan cepat. 1. Bagaimana untuk mengenal pasti apabila meja dikunci? 1. Lihat paparan V$LOCK Paparan V$LOCK ialah pandangan penting yang digunakan untuk melihat maklumat kunci dalam pangkalan data Oracle. kita boleh

Adakah pengecaman muka untuk haiwan peliharaan telah dilaksanakan? Adakah pengecaman muka untuk haiwan peliharaan telah dilaksanakan? Apr 13, 2023 pm 07:52 PM

Penterjemah |. Disemak oleh Cui Hao |. Teknologi yang boleh mengenal pasti haiwan dengan tepat akan membantu pemilik menyatukan semula haiwan peliharaan yang hilang, petani memantau ternakan mereka, dan penyelidik mengkaji haiwan liar. Berdasarkan senario aplikasi di atas, mikrocip adalah kaedah pengenalan haiwan peliharaan yang paling popular. Walau bagaimanapun, menanam cip memerlukan pembedahan invasif, peralatan khusus untuk membaca cip dan risiko pencuri mengeluarkan mikrocip tersebut. Kaedah lain ialah analisis DNA, yang walaupun tepat, juga sangat mahal dan memakan masa. Hari ini saya ingin memperkenalkan kepada anda cara mengenal pasti haiwan melalui pengecaman muka. 1. Pengecaman muka haiwan peliharaan menggunakan perisian penglihatan komputer Pengecaman muka haiwan peliharaan oleh penyelesaian penglihatan komputer boleh digunakan sebagai alternatif kepada penyelesaian di atas. Di sebalik kekurangannya,

See all articles