团队项目需求心得分析与人脸截取

  在人脸情绪识别项目中,我们需要对输入中的人脸进行提取,然后传入训练好的卷积神经网络系统,得到情绪,绘制成图。我们项目的输入可以是一端视频或者是一张图片,也有可能是摄像头实时视频,对于输入,我们都需要对其进行处理去掉背景得到人脸的处理,然后才能传入神经网络系统进行分析得到情绪。在传入卷积神经网络系统之前需要对系统进行训练,用数据集做输入传入系统,数据集中包含图片以及图片对应的信息两个部分,这样系统会根据图片进行分析处理然后得到信息与对应图片信息相比较,最后反复训练就可以得到一个性能比较好的可以供使用的卷积神经网络系统。最后利用神经系统将视频中的图片按帧提取传入得到对应的情绪信息,然后在图表中描点,最后得到完整的情绪曲线图。而对人脸提取这一部分,对于python语言,网上也有许多方法来检测截取人脸,其中用的比较多的是opencv提取人脸的方法:  

  opencv能实现图像处理和计算机视觉方面的很多通用算法,因此得到了广泛的应用。首先我们需要提到的是opencv里面的分类器,opencv提供了许多分类器来方便用户进行图像处理,而我们需要用到的是涉及人脸部分的分类器,包括haarcascade_frontalface_alt、haarcascade_frontalface_alt_tree、haarcascade_frontalface_alt2、haarcascade_frontalface_default,这些虽然都是人脸分类器,但在截取效果上以及使用范围还是有些差异。通过opencv的Cascadeclassifier函数来识别分类器,然后我们用detecMultiscale进行识别裁剪,得到一个涉及人脸的二位矩阵(人脸个数,人脸坐标(x1,y1,h,w)),然后根据矩阵大小就得到人脸截图。

  我们可以看一下代码:

import cv2
import sys
import os

def getface(img):

path = "haarcascade_frontalface_default.xml" #分类器类别,路径与.py一致

hc = cv2.CascadeClassifier(path)#识别分类器

# 人脸区域探测 裁剪 i可以处理 如果一张图像中多个人脸的情况
faces = hc.detectMultiScale(img)#得到人脸个数以及区域
i=0
while i <len(faces): #对每张脸进行输出
imgROI = img[faces[i][1]:faces[i][1] + faces[i][3], faces[i][0]:faces[i][0] + faces[i][2]]# 前者为高度,后者为宽度
cv2.imshow("face_default", imgROI)#创建窗口显示图片
k = cv2.waitKey(0) # 无限期等待输入
i = i + 1


img = cv2.imread("3.jpg")#jpg放在.py路径下
getface(img)
然后看一下3.jpg以及截图效果

 

 

可以看到opencv效果还是可以的,但是在精度上面还是略有不足,因此还是需要寻找其他方法来尝试,同时后期可能需要做人脸摆正处理,所有在提高精度时把两个放在一起来做,也希望在接下来的时间里可以有所收获。

 


 

posted @ 2018-11-19 19:04  软件1605李晓鹏  阅读(236)  评论(0编辑  收藏  举报