科研日志——使用opencv提取视频中的人脸
科研任务需要,将视频中与文字和音频对应的视频帧根据时间戳提取出来,并截取视频帧中的人脸。使用的工具是opencv,步骤如下:
1. 提取视频帧
Sentence标号的含义
数据集中对视频中的每个sentence进行了标号,拿Ses01F_impro01_F001.png举例说明:
- Ses01代表着视频位于Session1
- 第一个F代表着视频中的female person 穿戴传感器设备
- impro01代表着视频是两种表演方式(impro和script)中的impro类型的第一个视频
- F001代表着是视频中的female person说的第一句话
根据标号所代表的含义以及已经处理好的processed_ids.txt文件中sentences的顺序,从IEMOCAP数据集中IEMOCAP_full_release/Session1/dialog/lab含有的sentence时间戳中提取正确的时间顺序,将时间戳储存在processed_timepoints.npy文件中
视频帧的提取
python 代码如下(只提取Session1)
import cv2
import numpy as npwith open('/home/jekin/PycharmProjects/Speech/code/data/processed/IEMOCAP/processed_ids.txt', 'r') as f:lines = f.readlines()ids = [x.split() for x in lines]time_points = np.load('/home/jekin/SPACE/IEMOCAP_full_release/Session1/dialog/lab/processed_timepoints.npy')for i in range(len(ids)):# get the video namecur_id = ids[i][0]typename = ''for k in range(len(ids[i][0].split('_')) - 1):typename += ids[i][0].split('_')[k]if k == len(ids[i][0].split('_')) - 2:continueelse:typename += '_'cap = cv2.VideoCapture('/home/jekin/SPACE/IEMOCAP_full_release/Session1/dialog/avi/DivX/'+ typename + '.avi')fps = cap.get(cv2.CAP_PROP_FPS)num_frame = fps * time_points[i]cap.set(cv2.CAP_PROP_POS_FRAMES, num_frame)success, frame=cap.read()if success:if ids[i][0].split('_')[0][5] == 'F' and ids[i][0].split('_')[-1][0] == 'F':cut_frame = frame[:, 0:frame.shape[1]/2]elif ids[i][0].split('_')[0][5] == 'F' and ids[i][0].split('_')[-1][0] == 'M':cut_frame = frame[:, frame.shape[1]/2:frame.shape[1]]elif ids[i][0].split('_')[0][5] == 'M' and ids[i][0].split('_')[-1][0] == 'F':cut_frame = frame[:, frame.shape[1]/2:frame.shape[1]]else:cut_frame = frame[:, 0:frame.shape[1] / 2]cv2.imwrite('/home/jekin/SPACE/IEMOCAP_full_release/Session1/dialog/lab/pictures/'+ cur_id +'.png', cut_frame)
2. 人脸截取
人脸截取代码参考图片人脸截取
应用到项目中的代码如下:
import cv2
import numpy as npdef create_empty_picture(width):img = np.ones((width, width), dtype=np.uint8)bgr_img = cv2.cvtColor(img, cv2.COLOR_GRAY2BGR)return bgr_imgwith open('/home/jekin/PycharmProjects/Speech/code/data/processed/IEMOCAP/processed_ids.txt', 'r') as f:lines = f.readlines()ids = [x.split() for x in lines]# record the number of unsuccessfully processed pictures
numerror = 0
# record the maximum width
maxwidth = 0for i in range(len(ids)):cur_id = ids[i][0]# The codes below intend to process the data in Session1file_name = ids[i][0] + '.png'filepath = '/home/jekin/SPACE/IEMOCAP_full_release/Session1/dialog/lab/pictures/' + file_nameimg = cv2.imread(filepath)if ids[i][0].split('_')[0][5] == 'F' and ids[i][0].split('_')[-1][0] == 'F':img = cv2.flip(img, 1)elif ids[i][0].split('_')[0][5] == 'M' and ids[i][0].split('_')[-1][0] == 'M':img = cv2.flip(img, 1)gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)classifier = cv2.CascadeClassifier("/home/jekin/MERpy/face_recognition/data/haarcascades/haarcascade_profileface.xml")color = (0, 255, 0)faceRects = classifier.detectMultiScale(gray, scaleFactor=1.02, minNeighbors=3, minSize=(60, 60), maxSize=(70, 70))if len(faceRects):# for faceRect in faceRects:x, y, w, h = faceRects[0]cut_face = img[y:y+h, x:x+w]cv2.imwrite('/home/jekin/SPACE/IEMOCAP_full_release/Session1/dialog/lab/face_cut/ses1/'+ cur_id + '.png', cut_face)if w > maxwidth:maxwidth = welif h > maxwidth:maxwidth = helse:print(ids[i][0])img = create_empty_picture(50)cv2.imwrite('/home/jekin/SPACE/IEMOCAP_full_release/Session1/dialog/lab/face_cut/ses1/'+ cur_id + '.png', img)numerror += 1
print('The number of unsuccessfully processed pictures is:{}'.format(numerror))
print('The maximum width of the cropped faces is:{}'.format(maxwidth))
其中代码片段
faceRects = classifier.detectMultiScale(gray, scaleFactor=1.02, minNeighbors=3, minSize=(60, 60), maxSize=(70, 70))
参数scaleFacter默认值为1.1,数值越大计算速度越快,相应人脸识别精度越低;minSize和maxSize代表着识别的区域大小,可以用其规定算法识别出人脸的矩形框大小范围,避免在一张图片中识别出好几个区域,只有一个是人脸的情况。
科研日志——使用opencv提取视频中的人脸相关推荐
- python3抓取图片视频_Python opencv提取视频中的图片
#-*- coding: utf-8 -*- importosimport cv2 ##加载OpenCV模块 def video2frames(pathIn='', pathOut='', only_ ...
- OpenCV实战——提取视频中的前景对象
OpenCV实战--提取视频中的前景对象 0. 前言 1. 提取视频中的前景对象 2. 混合高斯方法 3. 完整代码 相关链接 0. 前言 当固定摄像机观察场景时,背景基本保持不变.在这种情况下,我们 ...
- python 替换array中的值_利用Python提取视频中的字幕(文字识别)
我的CSDN博客id:qq_39783601,昵称是糖潮丽子~辣丽 从今天开始我会陆续将数据分析师相关的知识点分享在这里,包括Python.机器学习.数据库等等. 今天来分享一个Python小项目! ...
- opencv提取视频帧,将多张图片组合成视频(C++)
OpenCV-视频处理-视频处理5191 2 opencv提取视频帧,将多张图片组合成视频(C++) 作者:bit452 参考:http://blog.sina.com.cn/s/blog_5f593 ...
- access数据放到list中_利用Python提取视频中的字幕(文字识别)
我的CSDN博客id:qq_39783601,昵称是糖潮丽子~辣丽 从今天开始我会陆续将数据分析师相关的知识点分享在这里,包括Python.机器学习.数据库等等. 今天来分享一个Python小项目! ...
- 【视频转PDF】Gleamoe Peanut 2023,轻松提取视频中的幻灯片!
目录 Gleamoe Peanut 2023:==轻松提取视频中的幻灯片==,让学习与研究更高效 一.简介 软件特点 软件优点 二.软件界面 三.安装与使用 四.技术细节 处理逻辑 定位幻灯片的两种方 ...
- 小程序收集箱:提取视频中的图片(python)
本程序用于提取视频中的图片.本程序由其他博主提供,在此表示感谢. 如有疑问可联系hardenqiu@foxmail.com. # -*- coding: utf-8 -*- import os imp ...
- 使用Python,OpenCV在视频中进行实时条形码检测
使用Python,OpenCV在视频中进行实时条形码检测 1. 步骤 2. 适用场景及优化 3. 总结 4. 源码 参考 上一篇博客介绍了如何检测和查找图像中的条形码.这篇博客将进行一些优化以检测实时 ...
- 使用python moviepy提取视频中的音频,同时对音频数据进行数据可视化分析
文章目录 1 使用moviepy库包提取音频 1.1 moviepy库包说明 1.2 安装moviepy 1.2 使用moviepy提取视频中的音频 2 使用librosa库包读取音频文件,并分析音频 ...
最新文章
- Tomcat6.0.13下配置Tomcat Administration Web Application
- 用python玩转数据第四周答案_2020大学mooc用Python玩转数据课后答案
- c语言程序 实现简单计算器功能,C语言实现简单计算器小项目
- linux命令gen,Linux中msgen命令起什么作用呢?
- Window下mysql5.7及以上版本插入中文乱码问题
- 珀尔:数据非常愚蠢,领会因果关系才是理解世界的关键
- Linux中的Total Video Converter——超级音视频转换软件:Winff
- 网络原理 | TCP/IP中的连接管理机制 重要协议与核心机制
- AOSP 安卓源码-ubuntu开发环境搭建
- 未来,App就是一个人的全部
- JavaScript ECMAScript版本介绍
- JAVA中后缀sl文件_Windows 中的常见文件扩展名
- usb为什么计算机无法识别网络,电脑的usb网卡无法识别怎么办
- UMTS 与 WCDMA的区别
- 天津大学计算机软件学院,2019计算机考研天津大学数据科学与服务工程团队(与软件学院共建)...
- PDE优化|逆问题中偏微分方程约束优化的惩罚方法(Matlab代码实现)
- 备份恢复Lesson 11. Performing Recovery I
- 不能装载文档控件。请在检查浏览器的选项中检查浏览器的安全设置_「初级会计报考指南」浏览器问题解决方案...
- 微信查券返利机器人公众号搭建教程分享
- [VIM].vimrc設置詳解---配置你的vim
热门文章
- 微服务架构中服务注册与发现
- 每日一句:day05——From Zero To Hero
- [日常] SinaMail项目和技术能力总结
- java录制视频_javacv开发详解之1:调用本机摄像头视频(建议使用javaCV最新版本)...
- Scikit-learn学习系列 | 4. sklearn特征降维方法汇总(方差过滤,卡方,F过滤,互信息,嵌入法)
- 基于stm32的OLED显示屏显示
- 武候祠:一千七百年的沉思
- 【机器学习入门基础】Matrix
- 【AJAX是什么】【AJAX的基本使用】
- ChaosBlade