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

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

输出结果

image.png


设计思路

image.png


核心代码

from statistics import mode

import cv2

from keras.models import load_model

import numpy as np

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

frame_window = 10  

gender_offsets = (30, 60)

emotion_offsets = (20, 40)

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]

gender_window = []

emotion_window = []

cv2.namedWindow('window_frame_by_Jason_Niu')

# video_capture = cv2.VideoCapture(0)

video_capture = cv2.VideoCapture("F:\File_Python\Python_example\YOLOv3_use_TF\RunMan5.mp4")

while True:

   bgr_image = video_capture.read()[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)  

   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

       gray_face = preprocess_input(gray_face, False)  

       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]

       emotion_window.append(emotion_text)    

       rgb_face = np.expand_dims(rgb_face, 0)

       rgb_face = preprocess_input(rgb_face, False)

       gender_prediction = gender_classifier.predict(rgb_face)

       gender_label_arg = np.argmax(gender_prediction)

       gender_text = gender_labels[gender_label_arg]

       gender_window.append(gender_text)

       if len(gender_window) > frame_window:

           emotion_window.pop(0)        

           gender_window.pop(0)

       try:

           emotion_mode = mode(emotion_window)

           gender_mode = mode(gender_window)

       except:

           continue

       if gender_text == gender_labels[0]:

           color = (0, 0, 255)

       else:

           color = (255, 0, 0)

       draw_bounding_box(face_coordinates, rgb_image, color)

       draw_text(face_coordinates, rgb_image, gender_mode,  

                 color, 0, -20, 1, 4)

       draw_text(face_coordinates, rgb_image, emotion_mode,

                 color, 0, -45, 1, 4)

     

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

   cv2.namedWindow("window_frame_by_Jason_Niu",0);

   cv2.resizeWindow("window_frame_by_Jason_Niu", 640, 380);

   cv2.imshow('window_frame_by_Jason_Niu', bgr_image)

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

       break


相关文章
|
1月前
|
机器学习/深度学习 算法 数据可视化
一图胜千言:EBImage库分割和标注让你的图像说话
一图胜千言:EBImage库分割和标注让你的图像说话
44 0
|
1月前
|
人工智能 搜索推荐
StableIdentity:可插入图像/视频/3D生成,单张图即可变成超人,可直接与ControlNet配合使用
【2月更文挑战第17天】StableIdentity:可插入图像/视频/3D生成,单张图即可变成超人,可直接与ControlNet配合使用
21 2
StableIdentity:可插入图像/视频/3D生成,单张图即可变成超人,可直接与ControlNet配合使用
|
2月前
|
监控 算法 Serverless
OpenCV这么简单为啥不学——1.12、使用ssim函数对两张照片进行相似度分析
OpenCV这么简单为啥不学——1.12、使用ssim函数对两张照片进行相似度分析
42 0
|
4月前
|
人工智能 API 开发工具
【Python+百度API】实现人脸识别和颜值检测系统(包括人脸数量、年龄、颜值评分、性别、种族、表情检测)(超详细 附源码)
【Python+百度API】实现人脸识别和颜值检测系统(包括人脸数量、年龄、颜值评分、性别、种族、表情检测)(超详细 附源码)
96 0
|
11月前
|
机器学习/深度学习 算法
ICLR 2023 Spotlight | 2D图像脑补3D人体,衣服随便搭,还能改动作
ICLR 2023 Spotlight | 2D图像脑补3D人体,衣服随便搭,还能改动作
|
11月前
|
机器学习/深度学习 人工智能 编解码
挡不住了!扩散模型只用文字就能PS照片了
挡不住了!扩散模型只用文字就能PS照片了
|
11月前
|
人工智能 数据可视化 测试技术
卷!用扩散模型合成连贯视觉故事,输入字幕就能脑补画面,代词ta都分得清
卷!用扩散模型合成连贯视觉故事,输入字幕就能脑补画面,代词ta都分得清
137 0
|
机器学习/深度学习 编解码 算法
CV之NoGAN:利用图像增强技术(图片上色)实现对旧图像和电影片段进行着色和修复(爱因斯坦、鲁迅旧照/清末官员生活场景等案例)
CV之NoGAN:利用图像增强技术(图片上色)实现对旧图像和电影片段进行着色和修复(爱因斯坦、鲁迅旧照/清末官员生活场景等案例)
CV之NoGAN:利用图像增强技术(图片上色)实现对旧图像和电影片段进行着色和修复(爱因斯坦、鲁迅旧照/清末官员生活场景等案例)
|
存储 前端开发 Java
Demo:第二章:Java实现随机图像生成(人像,汽车,房屋等等
Demo:第二章:Java实现随机图像生成(人像,汽车,房屋等等
206 0
Demo:第二章:Java实现随机图像生成(人像,汽车,房屋等等
|
前端开发 小程序 算法
【微信小程序】基于百度大脑人体检测、人脸识别以及调用阿里垃圾分类识别小程序利用canvas完成人脸画图、分割手部部分图片算法
【微信小程序】基于百度大脑人体检测、人脸识别垃圾分类人体出现在镜头里用红色框将人脸圈出来、用黄色框将手部圈出来,定时器触发后,通过百度返回的top+、left+、width+、height+将拍照的截图用canvas画出来,最后保存上传到阿里云垃圾分类识别检测博主用的是手部关键点识别,手部截取包括手肘部分,当出现手肘没有手掌时会出现截取不到目标的问题,目前解决办法:定时器设置时间长一点供演示员做好调整,另外就是出现手掌,可以尽量把掌心打开方便识别这样手肘部分就不会被检测到了在截取的时候canvas用不了..
260 0
【微信小程序】基于百度大脑人体检测、人脸识别以及调用阿里垃圾分类识别小程序利用canvas完成人脸画图、分割手部部分图片算法

热门文章

最新文章