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

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


输出结果

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

设计思路

核心代码

#CV:基于keras利用cv2自带两步检测法对《跑男第六季第五期》"如花片段"(或调用摄像头)进行实时脸部表情检测——Jason Niu
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'
emotion_labels = get_labels('fer2013')

frame_window = 10
emotion_offsets = (20, 40) 

face_detection = load_detection_model(detection_model_path)
emotion_classifier = load_model(emotion_model_path, compile=False)

emotion_target_size = emotion_classifier.input_shape[1:3]

emotion_window = []

cv2.namedWindow('window_frame,by Jason Niu') #摄像头窗口名称
# video_capture = cv2.VideoCapture(0) #函数定义摄像头对象,其参数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_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, emotion_offsets)
        gray_face = gray_image[y1:y2, x1:x2]  #[坐标参数,尺寸参数]
        try:
            gray_face = cv2.resize(gray_face, (emotion_target_size))
        except:
            continue

        gray_face = preprocess_input(gray_face, True)
        gray_face = np.expand_dims(gray_face, 0)
        gray_face = np.expand_dims(gray_face, -1)
        emotion_prediction = emotion_classifier.predict(gray_face)

        emotion_probability = np.max(emotion_prediction)
        emotion_label_arg = np.argmax(emotion_prediction)
        emotion_text = emotion_labels[emotion_label_arg]
        emotion_window.append(emotion_text)            

        if len(emotion_window) > frame_window:
            emotion_window.pop(0)
        try:
            emotion_mode = mode(emotion_window)
        except:
            continue
        #if条件根据不同表情显示不同颜色
        if emotion_text == 'angry':
            color = emotion_probability * np.asarray((255, 0, 0)) #红色
        elif emotion_text == 'sad':
            color = emotion_probability * np.asarray((0, 0, 255)) #蓝色
        elif emotion_text == 'happy':
            color = emotion_probability * np.asarray((255, 255, 0)) #黄色
        elif emotion_text == 'surprise':
            color = emotion_probability * np.asarray((0, 255, 255)) #青色
        else:
            color = emotion_probability * np.asarray((0, 255, 0))  #绿色

        color = color.astype(int)
        color = color.tolist()

        draw_bounding_box(face_coordinates, rgb_image, color)
        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
(0)

相关推荐

  • 让机器“看见”:图像数据的特征提取方法

    Datawhale & LSGO 每日干货 &每月组队学习,不错过 Datawhale干货 作者:谢雨飞,趣头条算法工程师 图像特征主要有图像的颜色特征.纹理特征.形状特征和空间关系特 ...

  • python数字图像处理(三)边缘检测常用算子

    在该文将介绍基本的几种应用于边缘检测的滤波器,首先我们读入saber用来做为示例的图像 #读入图像代码,在此之前应当引入必要的opencv matplotlib numpysaber = cv2.im ...

  • 使用Python,Keras和OpenCV进行实时面部检测

    重磅干货,第一时间送达 目前我们在互联网和论文中看到的大多数面部识别算法都是以图像为基础进行处理.这些方法在检测和识别来自摄像头的图像.或视频流各帧中的人脸时效果很好.但是,他们无法区分现实生活中的人 ...

  • (9条消息) ocr图像预处理

    说明:文字方向校正(fft方式和放射变换方式)参考了网上的代码,只做了少量修改 只针对医疗影像图像,自然场景下的另说 因为处理的图像都很大很大,居然有11000*12000这种分辨率的,有90M大小, ...

  • 使用深度学习进行视频修剪

    介绍 在本教程中,我们将构建深度学习任务,自动修剪我们的视频使用标志!这样的应用程序可以让那些不擅长编辑视频的人们的生活变得更容易. 我们使用像"拇指朝上"和"拇指朝下& ...

  • (9条消息) OCR预处理:矫正图片中的文本信息(opencv)

    (9条消息) OCR预处理:矫正图片中的文本信息(opencv)

  • OpenCV实战(1)

    如果需要处理的原图及代码,请移步小编的GitHub地址 传送门:请点击我 如果点击有误:https://github.com/LeBron-Jian/ComputerVisionPractice 最近 ...

  • 基于OpenCV的焊件缺陷检测

    重磅干货,第一时间送达 01. 简介 焊接缺陷是指焊接零件表面出现不规则.不连续的现象.焊接接头的缺陷可能会导致组件报废.维修成本高昂,在工作条件下的组件的性能显着下降,在极端情况下还会导致灾难性故障 ...

  • 平安夜,Python送你一顶圣诞帽 @微信官方

    最后知道真相的我眼泪掉下来 (还蒙在鼓里的同学请在微信最上方的搜索栏自行搜索『圣诞帽』) 好吧,你不给,咱自己来,不就是个帽子嘛. Python 在手,圣诞帽我有! OpenCV 库加上几张圣诞帽图片 ...

  • OpenCV-Python,计算机视觉开发利器

    人工智能,一个已经被谈论了几十年的概念(最早是图灵在1950年提出).如今这几年,相关技术的发展速度是越来越快.高大上如无人驾驶.智能安防.AI辅助诊断,接地气如刷脸支付.内容推荐.自动翻译等,众多领 ...

  • 基于OpenCV的图像翻转和镜像

    点击上方"小白学视觉",选择加"星标"或"置顶" 重磅干货,第一时间送达 本期,我们将解释如何在Python中实现图像的镜像或翻转.大家只需 ...

  • 如何使用OpenCV实现图像均衡???

    重磅干货,第一时间送达 我们已经练习了很多图像处理--操作图像(精确地说是图像矩阵).为此,我们探索了图像的均衡方法,以便在一定程度上增强对比度,以使被处理的图像看起来比原始图像更好,这种技术称为直方 ...

  • 深度学习中的类别激活热图可视化

    导读 使用Keras实现图像分类中的激活热图的可视化,帮助更有针对性的改进模型. 类别激活图(CAM)是一种用于计算机视觉分类任务的强大技术.它允许研究人员检查被分类的图像,并了解图像的哪些部分/像素 ...

  • 使用OpenCV实现图像增强

    重磅干货,第一时间送达 本期将介绍如何通过图像处理从低分辨率/模糊/低对比度的图像中提取有用信息. 下面让我们一起来探究这个过程: 首先我们获取了一个LPG气瓶图像,该图像取自在传送带上运行的仓库.我 ...

  • 基于OpenCV的实用图像处理操作

    重磅干货,第一时间送达 图像处理适用于图像和视频.良好的图像处理结果会为后续的进一步处理带来很大的帮助,例如提取到图像中的直线有助于对图像中物体的结构进行分析,良好的特征提取会优化深度学习的结果等.今 ...