欢迎来真孝善网,为您提供真孝善正能量书籍故事!

高效部署深度学习网络:表情识别演示教程

时间:11-03 现代故事 提交错误

图像预处理一般包括数字化、归一化、几何变化、平滑、恢复和增强等步骤。

在边缘检测之前,通常会进行灰度处理、噪声处理、二值化、开闭运算等。

二、图片检测

首先,运行所需的库:

导入系统

将numpy 导入为np

导入库

导入CV2

导入os和检测68个关键点所需的参数模型:shape_predictor_68_face_landmarks.dat

链接:https://pan.baidu.com/s/1Xkh17Wdmn9dfx33yA8ghRw

提取码:rxwh

人体表情检测参数模型(这个是我自己训练的,准确率有待参考~):my_merge_Xception_0807.61-0.669.hdf5

链接:https://pan.baidu.com/s/1zviLruPE3wG4BFQhNSJsyA

提取码:rg3d

当然,您也可以使用自己训练的模型参数。

2.1、检测人脸区域,并标上68个点,按区域连线

导入训练好的模型和相关变量。有7种基本面部表情:“愤怒”、“厌恶”、“害怕”、“高兴”、“悲伤”、“惊讶”、“中性”;

image_file="图片/5.jpg"

检测器=dlib.get_frontal_face_ detector()

预测器=dlib.shape_predictor("face_landmarks/shape_predictor_68_face_landmarks.dat")

情感模型路径="模型/my_merge_Xception_0807.61-0.669.hdf5"

情感分类器=加载模型(情感模型路径,编译=假)

EMOTIONS=["愤怒", "厌恶", "害怕", "快乐", "悲伤", "惊讶", "中性"] 读取图片并显示:

图像=cv2.imread(image_file)

cv2.imshow("origin", image) 处理部分,调整图像大小:

#这个函数中的图像就是我们要检测的图片。

#人脸检测程序结束时,我们会显示检测结果图片进行验证。这里调整大小的目的是为了防止图片太大而超出屏幕范围。

def 调整大小(图像,宽度=1200):

r=宽度* 1.0/image.shape[1]

暗淡=(宽度, int(image.shape[0] * r))

调整大小=cv2.resize(图像,暗淡,插值=cv2.INTER_AREA)

return resized 调用人脸检测模型,在检测前对图像进行灰度处理;

灰度处理的原因:

1、最直接的原因是彩色图像的单个像素为(R,G,B),转换为灰度图像为(L),简化了矩阵,提高了计算速度。

2.首先,梯度信息对于识别物体很重要。所以我们可以把灰度图像看成图像的强度来寻找一些梯度特征。比较常用的有HOG、LBP、SIFT等,下图是行人检测中的hog模型。使用hog来检测成分,最终找到图像中的行人。 (参考:rbgirshick/voc-dpm)注意:可视化是RGB图像,但输入是灰度图像,不要被愚弄。

当前的许多算法需要在处理之前对彩色图像进行灰度化。事实上,你要明白灰度之后你失去了什么,得到了什么。

灰度化后颜色信息会丢失,这对于许多基于颜色的算法来说是不可能的。然而,许多简单的识别算法并不强烈依赖于颜色,手工特征更关注边缘梯度信息。添加颜色信息后,工程中的许多应用的鲁棒性都会降低。灰度化后,矩阵维数降低,运算速度大大提高,并且梯度信息仍然保留。这只是性能和效率之间的权衡。

链接:https://www.zhihu.com/question/24453478

来源:知乎

灰色=cv2.cvtColor(图像, cv2.COLOR_BGR2GRAY)

rects=detector(gray, 1) 那么检测题就说,当我检测到一张图片中所有人脸的相关信息时(都存储在rects中);然后我们就可以根据关键点得到相关的人脸区域图片,方便后面的表情识别。

首先我们看一下如何标记每张脸的关键点(这次是连接68个点击区域),并进一步检测检测到的人脸区域中的器官(眼睛、鼻子等)。嘴、下巴、眉毛)。

划分相关区域;

脸部轮廓=[]

左脸=[]

右脸=[]

左脸眉毛=[]

右脸眉毛=[]

脸部鼻托=[]

脸鼻子=[]

脸嘴=[]

脸唇=[]

我=0

对于形状: 中的(x, y)

我=我+1

# 打印(i,x,y)

如果i=1 且i=17:

# print("脸部轮廓")

Face_outline.append((x, y))

如果i=18 且i=22:

face_eyebrow_left.append((x, y))

如果i=23 且i=27:

face_eyebrow_right.append((x, y))

如果i=37 且i=42:

Face_eye_left.append((x, y))

如果i=43 且i=48:

face_eye_right.append((x, y))

如果i=28 且i=31:

face_nosepiece.append((x, y))

如果i=32 且i=36:

face_nose.append((x, y))

如果i=49 且i=60:

face_mouth.append((x, y))

如果i=61 且i=68:

face_lip.append((x, y)) 连接关键点;

颜色=(225, 225, 225)

厚度=1def draw_line(图像, pixls):

我=0

# 打印(像素)

对于pixls: 中的x、y

如果我len(pixls)-1:

next_x, next_y=pixls[i+1]

cv2.line(图像,(x,y),(next_x,next_y),颜色,厚度)

#else:

# next_x, next_y=pixls[0]

# cv2.line(图像, (x, y), (next_x, next_y), (225, 225, 225), 2)

i=i + 1draw_line(图像, 脸部轮廓)

画线(图像,face_eyebrow_left)

画线(图像,face_eyebrow_right)

画线(图像,face_eye_left)

cv2.line(图像,face_eye_left[0],face_eye_left[-1],颜色,厚度)

画线(图像,face_eye_right)

cv2.line(图像,face_eye_right[0],face_eye_right[-1],颜色,厚度)

画线(图像,脸部鼻子)

画线(图像,face_nosepiece)

cv2.line(图像、face_nose[0]、face_nosepiece[-1]、颜色、厚度)

cv2.line(图像、face_nose[-1]、face_nosepiece[-1]、颜色、厚度)

画线(图像,脸嘴)

cv2.line(图像,face_mouth[0],face_mouth[-1],颜色,厚度)

画线(图像,face_lip)

cv2.line(image,face_lip[0],face_lip[-1],color,thickness)图:原图渲染

2.2、表情识别

导入资源包:

从tensorflow.keras.models导入load_model

from keras.preprocessing.image import img_to_arraydlib 面部特征检测的输出,一个shape包含前面提到的面部特征的68个点

形状=预测器(灰色,矩形)

shape=shape_to_np(shape)#该函数将shape转换为Numpy数组,方便后续处理。

def shape_to_np(形状, dtype="int"):

坐标=np.zeros((68, 2), dtype=dtype)

对于范围(0, 68): 内的i

坐标[i]=(shape.part(i).x, shape.part(i).y)

return coords 取出68个关键点的max_left、max_right、max_top、max_bottom并进行裁剪。

左、右、上、下=顶部(形状)

cropped=grey[top:bottom, left:right] # 裁剪坐标为[y0:y1, x0:x1]def copep(shape):

x, y=形状[0]

左最小值=x

最大右=x

最小顶部=y

最大底部=y

对于形状: 中的(x, y)

如果min_left x:

左最小值=x

如果max_right x:

最大右=x

如果min_top y:

最小顶部=y

如果max_bottom y:

最大底部=y

打印(最小左,最大右,最小顶部,最大底部)

返回min_left、max_right、min_top、max_bottom将对裁剪后的单通道图像进行预处理、调整大小、归一化等。

def preprocess_input(x, v2=True):

# 标准化

x=x.astype("float32")

x=x/255.0

如果v2:

x=x - 0.5

x=x * 2.0

返回xroi=cv2.resize(裁剪,emotion_classifier.input_shape[1:3])

roi=预处理输入(roi)

roi=img_to_array(roi)

roi=np.expand_dims(roi, axis=0)每个表情分类和表情概率。

# 使用模型预测每个类别的概率

preds=情感_分类器.预测(roi)[0]

emotion_probability=np.max(preds) # 最大概率

label=EMOTIONS[preds.argmax()] # 选择概率最大的表情类圈出人脸区域并显示识别结果。

cv2.putText(图像,

"人脸{}".format(i + 1) + ", " + label + ":" + str(round(emotion_probability * 100, 2)) + "%",

(左- 10,上- 10),

cv2.FONT_HERSHEY_TRIPLEX, 0.5, (0, 225, 225), 1) # putText的参数为:图片,添加渲染。另外,如果是多人脸检测,只需要在外层添加一个循环即可。多人渲染

三、视频检测

视频检测其实就是对视频的每一帧进行检测,其中人脸检测和表情识别与图片检测方法相同(可以参考上面的图片检测)。

将numpy 导入为np

导入库

导入CV2

从tensorflow.keras.models导入load_model

from keras.preprocessing.image import img_to_arraycv2.VideoCapture 调用笔记本内置摄像头,所以参数为0。如果有其他摄像头,可以将参数调整为1、2或视频路径;

cap=cv2.VideoCapture("image/7.mp4")

fps=cap.get(cv2.CAP_PROP_FPS) # 调用cv2方法获取cap的视频帧(帧:每秒多少张图片)

# 获取cap视频流每帧的大小

大小=(int(cap.get(cv2.CAP_PROP_FRAME_WIDTH)),

int(cap.get(cv2.CAP_PROP_FRAME_HEIGHT)))

# 定义编码格式mpge-4

# 具有固定参数的视频格式。不同的编码格式对应不同的参数。

fourcc=cv2.VideoWriter_fourcc(*"XVID")

#定义视频文件输入对象

文章分享结束,高效部署深度学习网络:表情识别演示教程和的答案你都知道了吗?欢迎再次光临本站哦!

用户评论

一生荒唐

感觉这个表情识别Demo很有意思!

    有9位网友表示赞同!

北染陌人

我一直想了解一下深度学习是怎么应用在图像识别的上的,这个demo能让我更直观的理解。

    有17位网友表示赞同!

半梦半醒i

现在深度学习的应用越来越多了,比如这类的表情识别技术,未来应该会有更多实际运用吧?

    有7位网友表示赞同!

那伤。眞美

部署模型这块看起来挺复杂的啊,不知道教程里会详细介绍吗?

    有14位网友表示赞同!

枫无痕

希望这个demo能给大家提供一些关于深度学习和图像识别的入门了解。

    有16位网友表示赞同!

最怕挣扎

表情识别技术已经越来越普遍了,想想各种智能设备都可能用到吧。

    有10位网友表示赞同!

身影

这个demo演示可以帮助大家快速上手,感觉还挺简单的。

    有16位网友表示赞同!

秒淘你心窝

做个简单的emoji分类程序也是很有趣的,或许可以参考这个Demo啊!

    有15位网友表示赞同!

铁树不曾开花

深度学习真的是一项很厉害的技术,越来越感觉它能改变很多行业了。

    有9位网友表示赞同!

心悸╰つ

期待看到更多关于深度学习应用在其他领域的演示。

    有6位网友表示赞同!

麝香味

有没有人尝试过用这款模型识别多种情绪的表情呢?

    有18位网友表示赞同!

◆残留德花瓣

这个demo可以作为入门级别的教程很好,希望能有一些更进阶的教材。

    有18位网友表示赞同!

孤独症

部署模型的过程是不是需要专业的硬件支持啊?

    有7位网友表示赞同!

刺心爱人i

不知道这个demo所使用的深度学习网络模型是怎样的结构呢?

    有8位网友表示赞同!

▼遗忘那段似水年华

期待这个demo能够提供更多关于模型训练和调优的信息。

    有15位网友表示赞同!

巷口酒肆

这篇文章能帮助我更好地理解部署深度学习模型的整个过程。

    有19位网友表示赞同!

迷路的男人

我觉得表情识别技术非常实用,可以应用于很多场景之中。

    有12位网友表示赞同!

゛指尖的阳光丶

这个demo展示了深度学习的可塑性,让人期待更多创新应用。

    有11位网友表示赞同!

♂你那刺眼的温柔

希望能够看到更多相关的文章和教程,不断提高我对深度学习的理解。

    有18位网友表示赞同!

在哪跌倒こ就在哪躺下

这个demo是一个很好的资源,可以帮助我入门深度学习。

    有6位网友表示赞同!

【高效部署深度学习网络:表情识别演示教程】相关文章:

1.蛤蟆讨媳妇【哈尼族民间故事】

2.米颠拜石

3.王羲之临池学书

4.清代敢于创新的“浓墨宰相”——刘墉

5.“巧取豪夺”的由来--米芾逸事

6.荒唐洁癖 惜砚如身(米芾逸事)

7.拜石为兄--米芾逸事

8.郑板桥轶事十则

9.王献之被公主抢亲后的悲惨人生

10.史上真实张三丰:在棺材中竟神奇复活