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


壮观就魔镜
壮观就魔镜 2022-09-20 09:29:25 53455
分类专栏: 资讯

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

目录

设计思路

核心代码


设计思路

核心代码

  1. CV:基于keras利用训练好的hdf5模型进行目标检测实现输出模型中的表情或性别的gradcam——Jason Niu
  2. import sys
  3. import cv2
  4. import numpy as np
  5. from keras.models import load_model
  6. getting the correct model given the input
  7. 1、首先指定想实现人脸灰凸特征图像(salient region detection)a检测的是emotion还是gender
  8. task = sys.argv[1]
  9. class_name = sys.argv[2]
  10. task = 'emotion'
  11. task = 'gender'
  12. 2、if条件判断给定的是性别模型还是表情模型
  13. if task == 'gender':
  14. model_filename = '../trained_models/gender_models/gender_mini_XCEPTION.21-0.95.hdf5'
  15. class_to_arg = get_class_to_arg('imdb')
  16. predicted_class = class_to_arg[class_name]
  17. predicted_class = 0
  18. offsets = (0, 0)
  19. elif task == 'emotion':
  20. model_filename = '../trained_models/emotion_models/fer2013_mini_XCEPTION.102-0.66.hdf5' 默认开启
  21. model_filename = '../trained_models/fer2013_big_XCEPTION.54-0.66.hdf5'
  22. class_to_arg = get_class_to_arg('fer2013')
  23. predicted_class = class_to_arg[class_name]
  24. predicted_class = 1
  25. predicted_class = 'fear'
  26. offsets = (0, 0)
  27. 3、加载模型、梯度函数,指导模型、凸函数(灰凸化特征)
  28. model = load_model(model_filename, compile=False)
  29. gradient_function = compile_gradient_function(model, predicted_class, 'conv2d_7') 调用compile_gradient_function编译梯度函数,返回名称为conv2d_7的卷积层
  30. register_gradient()
  31. guided_model = modify_backprop(model, 'GuidedBackProp', task) 调用modify_backprop函数,修改CNN更新为一个新的模型
  32. saliency_function = compile_saliency_function(guided_model, 'conv2d_7') 调用compile_saliency_function函数,激活层采用conv2d_7层;saliency是指灰色图像下凸出特征
  33. parameters for loading data and images 加载人脸检测识别默认库haarcascade_frontalface_default.xml
  34. detection_model_path = '../trained_models/detection_models/haarcascade_frontalface_default.xml'
  35. face_detection = load_detection_model(detection_model_path)
  36. color = (0, 255, 0) 绿色
  37. getting input model shapes for inference获取输入模型形状进行推理(输入hadf5库内张量集合中的下标1~3)
  38. target_size = model.input_shape[1:3] 输入hadf5库内张量集合中的下标1~3
  39. starting lists for calculating modes表情窗口列表初始化:通过计算模型,开始列表
  40. emotion_window = []
  41. 4、打开本地摄像头,进行实时捕捉实现salient region detection灰凸特征图像(绘制面部方框)
  42. starting video streaming 第一步、先定义摄像头窗口名称,再打开摄像头,并开始实时读取画面
  43. cv2.namedWindow('window_frame')
  44. video_capture = cv2.VideoCapture(0)
  45. 第二步、while循环间隔刷新图像实时捕获人脸,实现人脸变为凸优化特征图像
  46. while True:
  47. bgr_image = video_capture.read()[1] 从摄像设备中实时读入图像数据,(第一个参数[0]表示读取是否成功,第二个参数[1]是读取的图像)
  48. gray_image = cv2.cvtColor(bgr_image, cv2.COLOR_BGR2GRAY) 分别将读取的图像进行灰化、RGB化处理
  49. rgb_image = cv2.cvtColor(bgr_image, cv2.COLOR_BGR2RGB)
  50. faces = detect_faces(face_detection, gray_image) detect_faces函数:调用detectMultiScale函数进行识别人脸(检测出图片中所有的人脸),并将人脸用vector保存各个人脸的坐标、大小(用矩形表示),函数由分类器对象调用
  51. for face_coordinates in faces: for循环对人脸表情进行实时将图像进行灰凸化特征
  52. x1, x2, y1, y2 = apply_offsets(face_coordinates, offsets)apply_offsets函数:大概是根据图像实时偏移( HoG检测窗口移动时的步长,原图外围添加像素)
  53. gray_face = gray_image[y1:y2, x1:x2] [坐标参数,尺寸参数]
  54. try:
  55. gray_face = cv2.resize(gray_face, (target_size))cv2.resize(image, image2,dsize) 图像缩放方法;即(输入原始图像,输出新图像,图像的大小)
  56. except:
  57. continue
  58. gray_face = preprocess_input(gray_face, True) preprocess_input函数先将gray_face转换为'float32'然后 /255.0
  59. gray_face = np.expand_dims(gray_face, 0) 在标签数据上增加一个维度,0是增加在第一个轴上
  60. gray_face = np.expand_dims(gray_face, -1)
  61. guided_gradCAM = calculate_guided_gradient_CAM(gray_face,
  62. gradient_function, saliency_function) calculate_guided_gradient_CAM函数?
  63. guided_gradCAM = cv2.resize(guided_gradCAM, (x2-x1, y2-y1))
  64. try:
  65. rgb_guided_gradCAM = np.repeat(guided_gradCAM[:, :, np.newaxis],
  66. 3, axis=2)
  67. rgb_image[y1:y2, x1:x2, :] = rgb_guided_gradCAM
  68. except:
  69. continue
  70. draw_bounding_box((x1, y1, x2 - x1, y2 - y1), rgb_image, color) draw_bounding_box函数:在人脸区域画一个正方形出来
  71. 输出图像先颜色空间转换,然后命名窗口、显示窗口、结束程序条件:cv2.waitKey函数用来检测特定键q是否被按下,则break直接跳出当前循环,也就是结束了
  72. bgr_image = cv2.cvtColor(rgb_image, cv2.COLOR_RGB2BGR) 颜色空间转换
  73. 命名窗口、显示窗口、结束程序条件:cv2.waitKey函数用来检测特定键q是否被按下,则break退出程序
  74. try:
  75. cv2.imshow('window_frame', bgr_image)
  76. except:
  77. continue
  78. if cv2.waitKey(1) & 0xFF == ord('q'):
  79. break

网站声明:如果转载,请联系本站管理员。否则一切后果自行承担。

本文链接:https://www.xckfsq.com/news/show.html?id=3969
赞同 0
评论 0 条
壮观就魔镜L0
粉丝 0 发表 6 + 关注 私信
上周热门
如何使用 StarRocks 管理和优化数据湖中的数据?  2962
【软件正版化】软件正版化工作要点  2881
统信UOS试玩黑神话:悟空  2848
信刻光盘安全隔离与信息交换系统  2740
镜舟科技与中启乘数科技达成战略合作,共筑数据服务新生态  1274
grub引导程序无法找到指定设备和分区  1239
华为全联接大会2024丨软通动力分论坛精彩议程抢先看!  169
2024海洋能源产业融合发展论坛暨博览会同期活动-海洋能源与数字化智能化论坛成功举办  168
点击报名 | 京东2025校招进校行程预告  164
华为纯血鸿蒙正式版9月底见!但Mate 70的内情还得接着挖...  161
本周热议
我的信创开放社区兼职赚钱历程 40
今天你签到了吗? 27
信创开放社区邀请他人注册的具体步骤如下 15
如何玩转信创开放社区—从小白进阶到专家 15
方德桌面操作系统 14
我有15积分有什么用? 13
用抖音玩法闯信创开放社区——用平台宣传企业产品服务 13
如何让你先人一步获得悬赏问题信息?(创作者必看) 12
2024中国信创产业发展大会暨中国信息科技创新与应用博览会 9
中央国家机关政府采购中心:应当将CPU、操作系统符合安全可靠测评要求纳入采购需求 8

加入交流群

请使用微信扫一扫!