CV:基于Keras利用训练好的hdf5模型进行目标检测实现输出模型中的脸部表情或性别的gradcam(可视化)-阿里云开发者社区

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

CV:基于Keras利用训练好的hdf5模型进行目标检测实现输出模型中的脸部表情或性别的gradcam(可视化)

简介: CV:基于Keras利用训练好的hdf5模型进行目标检测实现输出模型中的脸部表情或性别的gradcam(可视化)
+关注继续查看

设计思路

image.png


核心代码

#CV:基于keras利用训练好的hdf5模型进行目标检测实现输出模型中的表情或性别的gradcam——Jason Niu

import sys

import cv2

import numpy as np

from keras.models import load_model

# getting the correct model given the input

#1、首先指定想实现人脸灰凸特征图像(salient region detection)a检测的是emotion还是gender

# task = sys.argv[1]

# class_name = sys.argv[2]

task = 'emotion'

# task = 'gender'

#2、if条件判断给定的是性别模型还是表情模型

if task == 'gender':

   model_filename = '../trained_models/gender_models/gender_mini_XCEPTION.21-0.95.hdf5'

   class_to_arg = get_class_to_arg('imdb')

#     predicted_class = class_to_arg[class_name]

   predicted_class = 0

   offsets = (0, 0)

elif task == 'emotion':

   model_filename = '../trained_models/emotion_models/fer2013_mini_XCEPTION.102-0.66.hdf5'  #默认开启

#     model_filename = '../trained_models/fer2013_big_XCEPTION.54-0.66.hdf5'

   class_to_arg = get_class_to_arg('fer2013')

#     predicted_class = class_to_arg[class_name]

   predicted_class = 1

#     predicted_class = 'fear'

   offsets = (0, 0)

#3、加载模型、梯度函数,指导模型、凸函数(灰凸化特征)

model = load_model(model_filename, compile=False)

gradient_function = compile_gradient_function(model, predicted_class, 'conv2d_7') #调用compile_gradient_function编译梯度函数,返回名称为conv2d_7的卷积层

register_gradient()

guided_model = modify_backprop(model, 'GuidedBackProp', task) #调用modify_backprop函数,修改CNN更新为一个新的模型

saliency_function = compile_saliency_function(guided_model, 'conv2d_7') #调用compile_saliency_function函数,激活层采用conv2d_7层;saliency是指灰色图像下凸出特征

# parameters for loading data and images 加载人脸检测识别默认库haarcascade_frontalface_default.xml

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

face_detection = load_detection_model(detection_model_path)

color = (0, 255, 0) #绿色

# getting input model shapes for inference获取输入模型形状进行推理(输入hadf5库内张量集合中的下标1~3)

target_size = model.input_shape[1:3]  #输入hadf5库内张量集合中的下标1~3

# starting lists for calculating modes表情窗口列表初始化:通过计算模型,开始列表

emotion_window = []

#4、打开本地摄像头,进行实时捕捉实现salient region detection灰凸特征图像(绘制面部方框)

# starting video streaming 第一步、先定义摄像头窗口名称,再打开摄像头,并开始实时读取画面

cv2.namedWindow('window_frame')

video_capture = cv2.VideoCapture(0)

#第二步、while循环间隔刷新图像实时捕获人脸,实现人脸变为凸优化特征图像

while True:

   bgr_image = video_capture.read()[1] #从摄像设备中实时读入图像数据,(第一个参数[0]表示读取是否成功,第二个参数[1]是读取的图像)

   gray_image = cv2.cvtColor(bgr_image, cv2.COLOR_BGR2GRAY) #分别将读取的图像进行灰化、RGB化处理

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

   faces = detect_faces(face_detection, gray_image) #detect_faces函数:调用detectMultiScale函数进行识别人脸(检测出图片中所有的人脸),并将人脸用vector保存各个人脸的坐标、大小(用矩形表示),函数由分类器对象调用

   for face_coordinates in faces: #for循环对人脸表情进行实时将图像进行灰凸化特征

       x1, x2, y1, y2 = apply_offsets(face_coordinates, offsets)#apply_offsets函数:大概是根据图像实时偏移( HoG检测窗口移动时的步长,原图外围添加像素)

       gray_face = gray_image[y1:y2, x1:x2] #[坐标参数,尺寸参数]

       try:

           gray_face = cv2.resize(gray_face, (target_size))#cv2.resize(image, image2,dsize) 图像缩放方法;即(输入原始图像,输出新图像,图像的大小)

       except:

           continue

       gray_face = preprocess_input(gray_face, True) #preprocess_input函数先将gray_face转换为'float32'然后 /255.0

       gray_face = np.expand_dims(gray_face, 0) #在标签数据上增加一个维度,0是增加在第一个轴上

       gray_face = np.expand_dims(gray_face, -1)

       guided_gradCAM = calculate_guided_gradient_CAM(gray_face,

                           gradient_function, saliency_function) #calculate_guided_gradient_CAM函数?

       guided_gradCAM = cv2.resize(guided_gradCAM, (x2-x1, y2-y1))

       try:

           rgb_guided_gradCAM = np.repeat(guided_gradCAM[:, :, np.newaxis],

                                                               3, axis=2)

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

       except:

           continue

       draw_bounding_box((x1, y1, x2 - x1, y2 - y1), rgb_image, color) #draw_bounding_box函数:在人脸区域画一个正方形出来

       

       

   #输出图像先颜色空间转换,然后命名窗口、显示窗口、结束程序条件:cv2.waitKey函数用来检测特定键q是否被按下,则break直接跳出当前循环,也就是结束了

   bgr_image = cv2.cvtColor(rgb_image, cv2.COLOR_RGB2BGR)  #颜色空间转换

   #命名窗口、显示窗口、结束程序条件:cv2.waitKey函数用来检测特定键q是否被按下,则break退出程序

   try:

       cv2.imshow('window_frame', bgr_image)

   except:

       continue

   if cv2.waitKey(1) & 0xFF == ord('q'):

       break


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

相关文章
阿里云服务器怎么设置密码?怎么停机?怎么重启服务器?
如果在创建实例时没有设置密码,或者密码丢失,您可以在控制台上重新设置实例的登录密码。本文仅描述如何在 ECS 管理控制台上修改实例登录密码。
4067 0
CV:基于深度学习实现目标检测之GUI界面产品设计并实现图片识别、视频识别、摄像头识别(准确度非常高)
CV:基于深度学习实现目标检测之GUI界面产品设计并实现图片识别、视频识别、摄像头识别(准确度非常高)
5 0
分享实录 | 阿里巴巴代码缺陷检测探索与实践
3月3日,阿里巴巴算法工程师别象在云效DevOps交流群中分享了《阿里巴巴代码缺陷检测探索与实践》。从阿里巴巴代码平台在探索缺陷检测和补丁推荐问题时遇到的挑战入手,介绍了目前业界和学术界较为流行的缺陷检测手段,并针对其局限性,提出PRECFIX方法。
4307 0
YOLO: 3 步实时目标检测安装运行教程 [你看那条狗,好像一条狗!]
封面图是作者运行图,我在 ubuntu 环境下只有文字预测结果。 Detection Using A Pre-Trained Model 使用训练好的模型来检测物体 运行一下命令来下载和编译模型 git clone https://github.
1167 0
CV:基于keras利用cv2自带两步检测法对《跑男第六季第五期》之如花片段(或调用摄像头)进行实时性别&脸部表情检测
CV:基于keras利用cv2自带两步检测法对《跑男第六季第五期》之如花片段(或调用摄像头)进行实时性别&脸部表情检测
22 0
阿里云服务器端口号设置
阿里云服务器初级使用者可能面临的问题之一. 使用tomcat或者其他服务器软件设置端口号后,比如 一些不是默认的, mysql的 3306, mssql的1433,有时候打不开网页, 原因是没有在ecs安全组去设置这个端口号. 解决: 点击ecs下网络和安全下的安全组 在弹出的安全组中,如果没有就新建安全组,然后点击配置规则 最后如上图点击添加...或快速创建.   have fun!  将编程看作是一门艺术,而不单单是个技术。
4478 0
直线目标检测技术
Boofcv研究:直线目标检测 public class LineDetection { private static final float edgeThreshold = 25; private static final int m...
648 0
CV:基于keras利用cv2自带两步检测法对《跑男第六季第五期》之如花片段(或调用摄像头)进行实时脸部表情检测
CV:基于keras利用cv2自带两步检测法对《跑男第六季第五期》之如花片段(或调用摄像头)进行实时脸部表情检测
24 0
+关注
一个处女座的程序猿
国内互联网圈知名博主、人工智能领域优秀创作者,全球最大中文IT社区博客专家、CSDN开发者联盟生态成员、中国开源社区专家、华为云社区专家、51CTO社区专家、Python社区专家等,曾受邀采访和评审十多次。仅在国内的CSDN平台,博客文章浏览量超过2500万,拥有超过57万的粉丝。
1701
文章
0
问答
文章排行榜
最热
最新
相关电子书
更多
文娱运维技术
立即下载
《SaaS模式云原生数据仓库应用场景实践》
立即下载
《看见新力量:二》电子书
立即下载