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

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

输出结果

image.png


设计思路

image.png



核心代码

、#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


相关文章
|
8月前
|
人工智能 搜索推荐 数据处理
简历诊断与面试指导:学校用AI开出“数字处方”,生成式人工智能(GAI)认证助力学生求职
本文探讨了人工智能(AI)技术在教育领域的应用,特别是学校如何利用AI进行简历诊断与面试指导,帮助学生提升求职竞争力。同时,生成式人工智能(GAI)认证的引入填补了技能认证空白,为学生职业发展提供权威背书。AI的个性化服务与GAI认证的权威性相辅相成,助力学生在数字化时代更好地应对求职挑战,实现职业目标。文章还展望了AI技术与GAI认证在未来持续推动学生成长的重要作用。
|
9月前
|
弹性计算 人工智能 API
基于ECS部署DeepSeek个人专属AI网站
本方案介绍了如何基于云服务器ECS集成百炼API和Open WebUI服务,一键部署体验DeepSeek个人专属AI网站。用户不仅可以以极低的成本,拥有个人专属的AI网站,进行稳定的AI对话,还能够切换DeepSeek-V3、DeepSeek-R1、Qwen-max等模型进行体验。同时Open WebUI还具备开源能力,支持定制工具的开发。您还可以创建其他子账号,将您的专属AI网站分享给他人使用。
|
11月前
|
文字识别 数据可视化 Serverless
阿里云多模态数据信息提取解决方案评测报告
本文基于阿里云多模态数据信息提取解决方案,对其进行全面评测。该方案利用百炼大模型等技术,支持文本、图像、音频和视频处理,显著提升效率并降低成本。体验中,文本和图片信息提取功能表现出色,部署便捷且准确率高。优势包括易用性、多模态支持和高性价比,但文档完善性和模型定制性等方面仍有提升空间。建议增强模型可定制性、跨模态融合能力及丰富文档案例,以进一步优化用户体验。
397 6
|
弹性计算 Kubernetes 网络协议
阿里云弹性网络接口技术的容器网络基础教程
阿里云弹性网络接口技术的容器网络基础教程
阿里云弹性网络接口技术的容器网络基础教程
|
Java 编译器 Maven
【颠覆你的认知!】当Quarkus邂逅GraalVM本机镜像,应用启动竟快到飞起——背后的技术秘密等你揭秘!
Quarkus框架因轻量级与高性能而在Java开发社区广受关注。结合GraalVM使用能显著提升应用启动速度与运行效率,这得益于GraalVM的本机镜像支持。本文将介绍如何利用Quarkus和GraalVM构建高效应用,并提供示例代码演示具体步骤。首先需安装GraalVM环境并配置Maven支持构建本机镜像。接着创建一个简单的RESTful服务端点作为示例,通过命令行编译生成本机可执行文件并运行。这种方式能够大幅提升应用性能,但需注意构建时间和部分Java特性兼容性问题。
330 1
|
缓存 并行计算 算法
Vulkan 围炉夜话2
Vulkan 围炉夜话
212 13
|
人工智能 机器人 图形学
2023 年最好的36款 AI 生产力工具(上)
本文主要展示了36 款 AI 应用,可以帮助读者更快、更好地工作。每个人都在与ChatGPT交流,从完整的博客文章到特定代码行的功能都在询问。其结果令人惊叹。虽然我们仍在探索如何将这项技术纳入我们的工作流程中,但明显的是,人工智能工具正在改变游戏规则。尽管ChatGPT是目前最受欢迎的,但它远不是首款进入市场的人工智能应用程序。
1636 1
|
JavaScript 前端开发 算法
写 React / Vue 项目时为什么要在列表组件中写 key
在React或Vue项目中,为列表组件中的每个元素添加唯一的key属性,有助于框架高效地更新和渲染列表。Key帮助虚拟DOM识别哪些项已更改、添加或删除,从而优化性能并减少不必要的重新渲染。
|
缓存 负载均衡 应用服务中间件
Nginx如何反向代理后端服务?
【7月更文挑战第7天】
476 1
Nginx如何反向代理后端服务?
|
负载均衡 网络协议 安全
DPDK用户态协议栈-KNI
DPDK用户态协议栈-KNI