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

目录

设计思路

核心代码


设计思路

核心代码

#CV:基于keras利用训练好的hdf5模型进行目标检测实现输出模型中的表情或性别的gradcam——Jason Niuimport sysimport 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 = 0offsets = (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:continuegray_face = preprocess_input(gray_face, True) #preprocess_input函数先将gray_face转换为'float32'然后 /255.0gray_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_gradCAMexcept:continuedraw_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:continueif cv2.waitKey(1) & 0xFF == ord('q'):break

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

  1. CV:基于Keras利用CNN主流架构之mini_XCEPTION训练性别分类模型hdf5并保存到指定文件夹下

    CV:基于Keras利用CNN主流架构之mini_XCEPTION训练性别分类模型hdf5并保存到指定文件夹下 目录 图示过程 核心代码 图示过程 核心代码 from keras.callbacks ...

  2. CV:基于Keras利用CNN主流架构之mini_XCEPTION训练情感分类模型hdf5并保存到指定文件夹下

    CV:基于Keras利用CNN主流架构之mini_XCEPTION训练情感分类模型hdf5并保存到指定文件夹下 目录 图示过程 核心代码 图示过程 核心代码 def mini_XCEPTION(inp ...

  3. CV:基于keras利用cv2自带两步检测法对《跑男第六季第五期》之如花片段(或调用摄像头)进行实时性别脸部表情检测

    CV:基于keras利用cv2自带两步检测法对<跑男第六季第五期>之如花片段(或调用摄像头)进行实时性别&脸部表情检测 目录 输出结果 设计思路 核心代码 输出结果 设计思路 核心 ...

  4. Keras之CNN:基于Keras利用cv2建立训练存储卷积神经网络模型(2+1)并调用摄像头进行实时人脸识别

    Keras之CNN:基于Keras利用cv2建立训练存储卷积神经网络模型(2+1)并调用摄像头进行实时人脸识别 目录 输出结果 设计思路 核心代码 输出结果 设计思路 核心代码 # -*- codin ...

  5. DL之MaskR-CNN:基于类MaskR-CNN算法(RetinaNet+mask head)利用数据集(resnet50_coco_v0.2.0.h5)实现目标检测和目标图像分割(语义分割)

    DL之MaskR-CNN:基于类MaskR-CNN算法(RetinaNet+mask head)利用数据集(resnet50_coco_v0.2.0.h5)实现目标检测和目标图像分割(语义分割) 目录 ...

  6. 基于昇腾AI异构计算架构CANN的通用目标检测与识别一站式方案初体验

    前言 强大的社会粘性不断催温数字化发展,目标检测与识别作为计算机视觉领域的一项关键技术,应用场景广泛,前景十分广阔,从城市治理.楼宇园区.互联网等领域,延伸至智能家居.金融.医疗影像等更多创新领域.随 ...

  7. Win10下用TensorFlow训练自己的数据集来做目标检测

    本文主要来源于YouTube博主 EdjeElectronics的视频https://www.youtube.com/watch?v=Rgpfk6eYxJA (对于视频看不了的朋友,我把视频录制下来放 ...

  8. Object Detection with Discriminatively Trained Part Based Models(使用判别训练的部件模型进行目标检测 )

    目录(?)[-] 摘要 关键词 引言 相关研究工作 模型 1 可变形部件模型 2 匹配 3 混合模型 隐藏变量SVM 1 半凸规划 2 最优化 3 随机梯度下降 4 难例挖掘SVM版 5 难例挖掘LS ...

  9. 基于多视角融合的夜间无人车三维目标检测

    基于多视角融合的夜间无人车三维目标检测 人工智能技术与咨询 来源:<应用光学>,作者王宇岚等 摘 要:为了提高无人车在夜间情况下对周围环境的物体识别能力,提出一种基于多视角通道融合网络的无 ...

最新文章

  1. Java基础学习总结(23)——GUI编程
  2. 解决main.o(.data) type RW incompatible with bsp.o(.ARM.__AT_0x24001000) type ZI in er RW_IRAM2.
  3. 好的MongoDB中文文档
  4. php如何制定跳转到app原生页面,js实现界面向原生界面发消息并跳转功能
  5. dj电商-数据表的设计-购物车表与订单表设计
  6. 跨域请求/SpringMVC拦截器
  7. ios笔记-单例文字代码详解
  8. 向数据库插入数据时出现乱码 --设置连接数据库的编码
  9. rsync and inotify
  10. 大恒水星相机硬触发测试
  11. 【项目总结】订单性质识别
  12. 最小生成树:Kruskal算法
  13. 十字线阵---CBF,传统波束形成
  14. 企业私有云搭建与作用
  15. 如何给PDF文件添加水印?
  16. 《JavaScript DOM编程艺术》笔记1
  17. 出走海报,立体感搞出来
  18. 还在纠结芯片引脚需要加多大容值的电容吗?
  19. 做了一个艰难的决定--
  20. BitmapFactory.decodeStream接收servlet传回的图片数据流慢、卡死、延迟问题

热门文章

  1. apache配置CA证书通过https通信
  2. idea + maven + profile + tomcat 调试 javaee 和js
  3. stm32 can bus 总结
  4. 【深度学习篇】--神经网络中解决梯度弥散问题
  5. 要素图层范围查询属性arcgis api for js
  6. ASP导出Excel数据的四种方法
  7. Serverless的4种错误打开方式
  8. “算法复杂度”——其实并没有那么复杂
  9. 代码对比工具,我就用这 6 个!
  10. 电商系统设计之商品(下)