CV:基于Keras利用cv2+自定义(加载人脸识别xml文件)+keras的load_model(加载表情hdf5、性别hdf5)实现标注脸部表情和性别label-阿里云开发者社区

开发者社区> 一个处女座的程序猿> 正文

CV:基于Keras利用cv2+自定义(加载人脸识别xml文件)+keras的load_model(加载表情hdf5、性别hdf5)实现标注脸部表情和性别label

简介: CV:基于Keras利用cv2+自定义(加载人脸识别xml文件)+keras的load_model(加载表情hdf5、性别hdf5)实现标注脸部表情和性别label
+关注继续查看

输出结果

image.png


设计思路

image.png


核心代码

#CV:基于Keras利用cv2+自定义load_detection_model(加载人脸识别xml文件及detectMultiScale函数得到人脸列表)+keras的load_model(加载表情hdf5、性别hdf5)实现标注脸部表情和性别label——Jason Niu

import sys

import cv2

from keras.models import load_model

import numpy as np

image_path ="F:/File_Python/Resources/hezhao05.jpg"

detection_model_path = '../trained_models/detection_models/haarcascade_frontalface_default.xml'

emotion_model_path = '../trained_models/emotion_models/fer2013_mini_XCEPTION.102-0.66.hdf5'

gender_model_path = '../trained_models/gender_models/simple_CNN.81-0.96.hdf5'

emotion_labels = get_labels('fer2013')

gender_labels = get_labels('imdb')      

font = cv2.FONT_HERSHEY_SIMPLEX  

gender_offsets = (30, 60)

gender_offsets = (10, 10)  

emotion_offsets = (20, 40)

emotion_offsets = (0, 0)

face_detection = load_detection_model(detection_model_path)

emotion_classifier = load_model(emotion_model_path, compile=False)

gender_classifier = load_model(gender_model_path, compile=False)

emotion_target_size = emotion_classifier.input_shape[1:3]

gender_target_size = gender_classifier.input_shape[1:3]

rgb_image = load_image(image_path, grayscale=False)  

gray_image = load_image(image_path, grayscale=True)

gray_image = np.squeeze(gray_image)

gray_image = gray_image.astype('uint8')

faces = detect_faces(face_detection, gray_image)

for face_coordinates in faces:

   x1, x2, y1, y2 = apply_offsets(face_coordinates, gender_offsets)

   rgb_face = rgb_image[y1:y2, x1:x2]    

   x1, x2, y1, y2 = apply_offsets(face_coordinates, emotion_offsets)

   gray_face = gray_image[y1:y2, x1:x2]  

   try:

       rgb_face = cv2.resize(rgb_face, (gender_target_size))

       gray_face = cv2.resize(gray_face, (emotion_target_size))

   except:

       continue

   rgb_face = preprocess_input(rgb_face, False)

   rgb_face = np.expand_dims(rgb_face, 0)  

   gender_prediction = gender_classifier.predict(rgb_face)  

   gender_label_arg = np.argmax(gender_prediction)

   gender_text = gender_labels[gender_label_arg]  

   gray_face = preprocess_input(gray_face, True)

   gray_face = np.expand_dims(gray_face, 0)

   gray_face = np.expand_dims(gray_face, -1)

   emotion_label_arg = np.argmax(emotion_classifier.predict(gray_face))

   emotion_text = emotion_labels[emotion_label_arg]

   if gender_text == gender_labels[0]:

       color = (255, 255, 0)

   else:

       color = (255, 0, 0)

   draw_bounding_box(face_coordinates, rgb_image, color)  

   draw_text(face_coordinates, rgb_image, gender_text, color, 0, -20, 1, 2)

   draw_text(face_coordinates, rgb_image, emotion_text, color, 0, -50, 1, 2)

bgr_image = cv2.cvtColor(rgb_image, cv2.COLOR_RGB2BGR)

save_img='F:/File_Python/Resources/hezhao041.jpg'

cv2.imwrite(save_img, bgr_image)

cv2.imshow('Emotion and Gender test', rgb_image)  

cv2.waitKey(0)

cv2.destroyAllWindows()  


版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。

相关文章
LoadRunner上传及下载文件
(1)LoadRunner上传文件            web_submit_data("importStudent.do",                    "Action=https://testserver/console/importStudent.
666 0
使用webpack loader加载器
了解webpack请移步webpack初识! 什么是loader loaders 用于转换应用程序的资源文件,他们是运行在nodejs下的函数 使用参数来获取一个资源的来源并且返回一个新的来源(资源的位置),例如:你可以使用loader来告诉webpack去加载一个coffeescript或者j...
718 0
linux如何修改文件或目录的权限(chmod)
chmod命令是linux上用于改变权限的命令,-R 是递归遍历子目录,因为你要操作的文件使用的*通配符。777,第一个7代表文件所属者的权限,第二个7代表文件所属者所在组的权限,第三个7代表其它用户的权限,7=4+2+1,在linux中权限是可以通过数字来描述的。
654 0
visual studio编写C#代码时“未能从程序集.....中加载类型”和“找不到方法”的一种可能的解决办法
编译前报错:$exception    {"未能从程序集“XSW.MySQLDAL, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null”中加载类型“XSW.MySQLDAL.EnterpriseLibraryProductDAL”。
1205 0
.net如何自定义config配置文件节点
本文转载:http://www.cnblogs.com/lori/archive/2013/04/03/2997617.html 对于小型项目来说,配置信息可以通过appSettings进行配置,而如果配置信息太多,appSettings显得有些乱,而且在开发人员调用时,也不够友好,节点名称很容易...
572 0
使用Dialog实现全局Loading加载框
Dialog实现全局Loading加载框 很多人在实现Loading加载框的时候,都是在当前的页面隐藏一个Loading布局,需要加载的时候,显示出来,加载完再隐藏 使用Dialog实现Loading框可以实现低耦合。
1307 0
[Cocos2d-x] loading加载动画
相信大家在玩游戏的过程中都会遇到一个loading的界面,loading界面的作用主要是为了加载游戏中需要用到的资源。在比较大型的游戏中,资源通常会占用很大的空间,如果不做一个预加载,在切换界面的过程中很容易造成卡屏的现象。
897 0
模拟提交有文件上传的表单(通过http模拟上传文件)
通过HTTP模拟GET或POST请求,提交数据到服务端获取响应,比较常见些;但如上传文件到服务端,使用html form当然简单了,而因环境所限有时需要使用模拟方法去提交有附件(文件上传)的表单。我们暂且不说如何去模拟数据,通过一个简单的form看看当请求发生时,客户端提交了什么样的数据给服务端。
1016 0
+关注
一个处女座的程序猿
国内互联网圈知名博主、人工智能领域优秀创作者,全球最大中文IT社区博客专家、CSDN开发者联盟生态成员、中国开源社区专家、华为云社区专家、51CTO社区专家、Python社区专家等,曾受邀采访和评审十多次。仅在国内的CSDN平台,博客文章浏览量超过2500万,拥有超过57万的粉丝。
1701
文章
0
问答
文章排行榜
最热
最新
相关电子书
更多
文娱运维技术
立即下载
《SaaS模式云原生数据仓库应用场景实践》
立即下载
《看见新力量:二》电子书
立即下载