科研任务需要,将视频中与文字和音频对应的视频帧根据时间戳提取出来,并截取视频帧中的人脸。使用的工具是opencv,步骤如下:

1. 提取视频帧

Sentence标号的含义

数据集中对视频中的每个sentence进行了标号,拿Ses01F_impro01_F001.png举例说明:

  1. Ses01代表着视频位于Session1
  2. 第一个F代表着视频中的female person 穿戴传感器设备
  3. impro01代表着视频是两种表演方式(impro和script)中的impro类型的第一个视频
  4. 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提取视频中的人脸相关推荐

  1. python3抓取图片视频_Python opencv提取视频中的图片

    #-*- coding: utf-8 -*- importosimport cv2 ##加载OpenCV模块 def video2frames(pathIn='', pathOut='', only_ ...

  2. OpenCV实战——提取视频中的前景对象

    OpenCV实战--提取视频中的前景对象 0. 前言 1. 提取视频中的前景对象 2. 混合高斯方法 3. 完整代码 相关链接 0. 前言 当固定摄像机观察场景时,背景基本保持不变.在这种情况下,我们 ...

  3. python 替换array中的值_利用Python提取视频中的字幕(文字识别)

    我的CSDN博客id:qq_39783601,昵称是糖潮丽子~辣丽 从今天开始我会陆续将数据分析师相关的知识点分享在这里,包括Python.机器学习.数据库等等. 今天来分享一个Python小项目! ...

  4. opencv提取视频帧,将多张图片组合成视频(C++)

    OpenCV-视频处理-视频处理5191 2 opencv提取视频帧,将多张图片组合成视频(C++) 作者:bit452 参考:http://blog.sina.com.cn/s/blog_5f593 ...

  5. access数据放到list中_利用Python提取视频中的字幕(文字识别)

    我的CSDN博客id:qq_39783601,昵称是糖潮丽子~辣丽 从今天开始我会陆续将数据分析师相关的知识点分享在这里,包括Python.机器学习.数据库等等. 今天来分享一个Python小项目! ...

  6. 【视频转PDF】Gleamoe Peanut 2023,轻松提取视频中的幻灯片!

    目录 Gleamoe Peanut 2023:==轻松提取视频中的幻灯片==,让学习与研究更高效 一.简介 软件特点 软件优点 二.软件界面 三.安装与使用 四.技术细节 处理逻辑 定位幻灯片的两种方 ...

  7. 小程序收集箱:提取视频中的图片(python)

    本程序用于提取视频中的图片.本程序由其他博主提供,在此表示感谢. 如有疑问可联系hardenqiu@foxmail.com. # -*- coding: utf-8 -*- import os imp ...

  8. 使用Python,OpenCV在视频中进行实时条形码检测

    使用Python,OpenCV在视频中进行实时条形码检测 1. 步骤 2. 适用场景及优化 3. 总结 4. 源码 参考 上一篇博客介绍了如何检测和查找图像中的条形码.这篇博客将进行一些优化以检测实时 ...

  9. 使用python moviepy提取视频中的音频,同时对音频数据进行数据可视化分析

    文章目录 1 使用moviepy库包提取音频 1.1 moviepy库包说明 1.2 安装moviepy 1.2 使用moviepy提取视频中的音频 2 使用librosa库包读取音频文件,并分析音频 ...

最新文章

  1. Tomcat6.0.13下配置Tomcat Administration Web Application
  2. 用python玩转数据第四周答案_2020大学mooc用Python玩转数据课后答案
  3. c语言程序 实现简单计算器功能,C语言实现简单计算器小项目
  4. linux命令gen,Linux中msgen命令起什么作用呢?
  5. Window下mysql5.7及以上版本插入中文乱码问题
  6. 珀尔:数据非常愚蠢,领会因果关系才是理解世界的关键
  7. Linux中的Total Video Converter——超级音视频转换软件:Winff
  8. 网络原理 | TCP/IP中的连接管理机制 重要协议与核心机制
  9. AOSP 安卓源码-ubuntu开发环境搭建
  10. 未来,App就是一个人的全部
  11. JavaScript ECMAScript版本介绍
  12. JAVA中后缀sl文件_Windows 中的常见文件扩展名
  13. usb为什么计算机无法识别网络,电脑的usb网卡无法识别怎么办
  14. UMTS 与 WCDMA的区别
  15. 天津大学计算机软件学院,2019计算机考研天津大学数据科学与服务工程团队(与软件学院共建)...
  16. PDE优化|逆问题中偏微分方程约束优化的惩罚方法(Matlab代码实现)
  17. 备份恢复Lesson 11. Performing Recovery I
  18. 不能装载文档控件。请在检查浏览器的选项中检查浏览器的安全设置_「初级会计报考指南」浏览器问题解决方案...
  19. 微信查券返利机器人公众号搭建教程分享
  20. [VIM].vimrc設置詳解---配置你的vim

热门文章

  1. 微服务架构中服务注册与发现
  2. 每日一句:day05——From Zero To Hero
  3. [日常] SinaMail项目和技术能力总结
  4. java录制视频_javacv开发详解之1:调用本机摄像头视频(建议使用javaCV最新版本)...
  5. Scikit-learn学习系列 | 4. sklearn特征降维方法汇总(方差过滤,卡方,F过滤,互信息,嵌入法)
  6. 基于stm32的OLED显示屏显示
  7. 武候祠:一千七百年的沉思
  8. 【机器学习入门基础】Matrix
  9. 【AJAX是什么】【AJAX的基本使用】
  10. ChaosBlade