人脸检测+调整分辨率+调整帧率
- 初始检测:只在视频的前几秒内进行一次人脸检测,以确定主持人的大致位置。
- 计算裁剪框:基于检测到的主持人位置,计算一个以主持人面部为中心的固定裁剪框。
- 视频裁剪:使用计算出的裁剪框对整个视频进行裁剪,将视频分辨率调整为512x512。 帧率调整:将视频帧率调整至25fps。
- 音频保留:确保裁剪和帧率调整后的视频音频与原视频同步。
以下是优化后的代码:
import cv2
import numpy as np
import face_recognition
from moviepy.editor import VideoFileClip, AudioFileClip
from tqdm import tqdmdef find_host_face_location(video_path):""" 在视频的前几秒内检测并返回主持人面部的大致位置 """cap = cv2.VideoCapture(video_path)found_face = Falsewhile cap.isOpened():ret, frame = cap.read()if not ret:break# 缩小帧尺寸以加快处理速度small_frame = cv2.resize(frame, (0, 0), fx=0.25, fy=0.25)rgb_small_frame = small_frame[:, :, ::-1]# 检测人脸face_locations = face_recognition.face_locations(rgb_small_frame)if face_locations:# 取第一张脸的位置,假设主持人位于视频画面的中心位置附近host_face_location = face_locations[0]# 将位置放大回原始大小host_face_location = (host_face_location[0]*4, host_face_location[1]*4, host_face_location[2]*4, host_face_location[3]*4)found_face = Truebreak# 如果已经处理了前10秒的视频,且没有找到人脸,则退出循环if cap.get(cv2.CAP_PROP_POS_MSEC) > 10000:breakcap.release()return host_face_location if found_face else Nonedef calculate_cropping_box(face_location, frame_shape):""" 根据主持人面部位置计算裁剪框 """top, right, bottom, left = face_locationcenter_x, center_y = (left + right) // 2, (top + bottom) // 2half_width, half_height = 256, 256left_cropped = max(center_x - half_width, 0)top_cropped = max(center_y - half_height, 0)right_cropped = min(center_x + half_width, frame_shape[1])bottom_cropped = min(center_y + half_height, frame_shape[0])return (top_cropped, right_cropped, bottom_cropped, left_cropped)def process_video(input_path, output_path):""" 处理视频,裁剪并调整帧率 """# 检测主持人面部位置host_face_location = find_host_face_location(input_path)if host_face_location is None:print(f"No face detected in video {input_path}")return# 读取视频,获取视频的宽度和高度clip = VideoFileClip(input_path)frame_shape = clip.size[::-1] # 电影剪辑的尺寸是(width, height),我们需要(height, width)# 计算裁剪框cropping_box = calculate_cropping_box(host_face_location, frame_shape)# 裁剪视频cropped_clip = clip.crop(x1=cropping_box[3], y1=cropping_box[0], x2=cropping_box[1], y2=cropping_box[2])cropped_clip = cropped_clip.resize((512, 512))# 调整帧率cropped_clip = cropped_clip.set_fps(25)# 保存最终视频cropped_clip.write_videofile(output_path, codec='libx264', audio_codec='aac')# 清理资源cropped_clip.close()if __name__ == "__main__":for i in tqdm(range(1, 75), desc="Processing videos"):input_path = f"data/{i}/{i}.mp4"output_path = f"data/{i}/{i}_fc1.mp4"process_video(input_path, output_path)
代码解释
-
find_host_face_location函数:这个函数负责在视频的前几秒内查找主持人面部的大致位置。我们假设主持人在视频开始时就已经出现在画面中,并且通常位于画面的中心位置附近。 -
calculate_cropping_box函数:根据主持人面部的位置计算出一个裁剪框,使得裁剪后的视频以主持人面部为中心。 -
process_video函数:此函数执行视频的裁剪和帧率调整。首先,我们使用find_host_face_location函数找到主持人面部的位置。接着,使用calculate_cropping_box函数计算裁剪框。然后,我们使用moviepy库来裁剪视频、调整尺寸和帧率,并保存最终的视频。
注意事项
- 我们假定主持人在视频开始时就已经出现并且位置相对固定。如果主持人在视频中移动或有多个主持人,此方法可能需要进一步的调整。
- 使用
moviepy进行视频处理可以简化代码并提高效率,但请注意moviepy对视频文件的读写操作可能会消耗较多资源。
确保在运行此代码之前,已经安装了face_recognition和moviepy库及其依赖项。如果在执行过程中遇到任何问题,如资源限制或库版本冲突,请相应地调整配置或更新库版本。
相关文章:
人脸检测+调整分辨率+调整帧率
初始检测:只在视频的前几秒内进行一次人脸检测,以确定主持人的大致位置。计算裁剪框:基于检测到的主持人位置,计算一个以主持人面部为中心的固定裁剪框。视频裁剪:使用计算出的裁剪框对整个视频进行裁剪,将…...
C++相关概念和易错语法(19)(继承规则、继承下的构造和析构、函数隐藏)
1.继承规则 继承的本质是复用,是结构上的继承而不是内容上的继承,近似于在子类中声明了父类的成员变量。 (1)写法:class student : public person 派生类(子类),继承方式&…...
使用GPT-4和ChatGPT构建应用项目
文章目录 项目1:构建新闻稿生成器项目2:YouTube视频摘要项目3:打造《塞尔达传说:旷野之息》专家项目4:语音控制项目1:构建新闻稿生成器 GPT-4和ChatGPT等LLM专用于生成文本。我们可以使用GPT-4和ChatGPT在各种场景中生成文本,举例如下。 电子邮件合同或正式文档创意写作…...
mobx学习笔记
mobx介绍 mobx是一个功能强大,上手容易的状态管理工具。MobX背后的哲学很简单:任何源自应用状态的东西都应该自动地获得。利用getter和setter来收集组件的数据依赖关系,从而在数据发生变化的时候精确知道哪些组件需要重绘。 mobx和redux的区别 mobx更…...
深入理解 Cowboy WebSocket:使用 Erlang/OTP 构建高效的即时通讯(IM)应用
深入理解 Cowboy WebSocket:使用 Erlang/OTP 构建高效的即时通讯(IM)应用 引言 实时通信技术在现代 Web 应用中扮演着核心角色,而 WebSocket 作为其中的关键技术,已成为即时通讯(IM)系统不可或缺的一部分。Cowboy,这个基于 Erla…...
算法的几种常见形式
算法(Algorithm) 算法(Algorithm)是指解决问题或完成任务的一系列明确的步骤或规则。在计算机科学中,算法是程序的核心部分,它定义了如何执行特定的任务或解决特定的问题。算法可以用多种方式来表示和实现…...
SpringBoot新手快速入门系列教程二:MySql5.7.44的免安装版本下载和配置,以及简单的Mysql生存指令指南。
我的教程都是亲自测试可行才发布的,如果有任何问题欢迎留言或者来群里我每天都会解答。 我们要如何选择MySql 目前主流的Mysql有5.0、8.0、9.0 主要区别 MySQL 5.0 发布年份:2005年特性: 基础事务支持存储过程、触发器、视图基础存储引擎…...
Elasticsearch 更新指定字段
Elasticsearch 更新指定字段 准备条件查询数据更新指定字段更新子级字段 准备条件 以下查询操作都基于索引crm_clue来操作,索引已经建过了,本文主要讲Elasticsearch更新指定字段语句,下面开始写更新语句执行更新啦! 查询数据 查…...
Koa.js、Egg.js与Express.js:探析三大Node.js框架的异同
在Node.js的世界里,选择合适的框架对于构建高效、可维护的后端服务至关重要。Express.js、Koa.js 和 Egg.js 是三个备受欢迎的框架,它们各有特色,适用于不同的开发场景。本文旨在深入探讨这三个框架的区别,并通过代码示例帮助开发…...
【MYSQL】如何解决 bin log 与 redo log 的一致性问题
该问题问的其实就是redo log 的两阶段提交 为什么说redo log 具有崩溃恢复的能力 MySQL Server 层拥有的 bin log 只能用于归档,不足以实现崩溃恢复(crash-safe),需要借助 InnoDB 引擎的 redo log 才能拥有崩溃恢复的能力。所谓崩…...
翻译语音识别在线的软件,分享4款实用的软件!
在全球化日益加速的今天,语言沟通已成为人们生活中不可或缺的一部分。无论是商务洽谈、学术交流还是日常交流,翻译语音识别技术都扮演着举足轻重的角色。今天,我们就来揭秘一下,那些能让你在语言沟通中如虎添翼的翻译语音识别软件…...
Qt 的Q_PROPERTY关键字
Qt 的Q_PROPERTY关键字 1. Q_PROPERTY 的由来2. 实现原理3. Q_PROPERTY 的特点4. Q_PROPERTY 的属性5. 应用说明示例代码示例代码连接信号和槽的多种方式处理信号和槽的注意事项 QT的元对象系统1. 元对象系统的由来2. 实现原理3. 元对象系统的特点4. 元对象系统的属性5. 应用说…...
github 下载提速的几种方法
1. 代理下载(无需注册) //toolwa.com/github/ //d.serctl.com/2. 转入 Gitee 加速 将项目镜像到 Gitee 中下载加速 3. 使用 Watt Toolkit 加速 Watt Toolkit //steampp.net/选择合适的版本下载 选择 github,一键加速 4.CDN 加速 (修改…...
【Oracle】实验三 Oracle数据库的创建和管理
【实验目的】 掌握Oracle数据库的创建方法使用DBCA创建数据库在数据库中装入SCOTT用户及其表 【实验内容】 使用DBCA创建数据库,名为MYDB,找到其初始化文件(文本型和服务器型文件都要找到),查看各类默认位置并记录下来(包括物理文件所在目…...
Linux rpm和ssh损坏修复
背景介绍 我遇到的问题可能和你的不一样。但是如果遇到错误一样也可以按此方案尝试修复。 我是想在Linux上安装Oracle,因为必须在离线环境下安装。就在网上搜一篇文章linux离线安装oracle,然后安装教程走,进行到安装oracle依赖包的时候执行了…...
仕考网:公务员考试面试时间一般多长?
公务员考试主要分为笔试与面试两个阶段,其中面试是笔试通过的下一关,面试的具体安排通常由相关考试机构或招录单位负责发布并通知考生。 公务员面试的持续时间一般在30分钟至1小时之间,具体时长可能因地区和招录单位的不同而有所变化。常见的…...
C语言作业5(学生管理系统C语言)
成学生管理系统 1> 使用菜单完成 2> 有学生的信息录入功能:输入学生个数,并将学生的姓名、分数录入 3> 查看学生信息:输出所有学生姓名以及对应的分数 4> 求出学习最好的学生信息:求最大值 5> 按姓名将所有学…...
OS Copilot:新手测评体验
文章目录 前言一、OS Copilot(阿里云操作系统智能助手)简介二、测评体验总结OS Copilot 产品体验评测OS Copilot 产品功能反馈 前言 本文简单分享一下自己使用OS Copilot测评体验。 一、OS Copilot(阿里云操作系统智能助手)简介 …...
PS 2024【最新】中文白嫖版!,安装教程,图文步骤
文章目录 软件介绍软件下载安装步骤 软件介绍 Photoshop,简称“PS” Adobe Photoshop,简称“PS”,是由Adobe Systems开发和发行的图像处理软件。Photoshop主要处理以像素所构成的数字图像。使用其众多的编修与绘图工具,可以有效地…...
bind方法的使用
在JavaScript或TypeScript中,this.data.setEventListener(this.onAddEvent.bind(this)); 和 this.data.setEventListener(this.onAddEvent); 之间的主要区别在于this关键字的绑定方式。 不使用.bind(this) 当你直接传递函数引用 this.onAddEvent给 setEventListene…...
Engram:解锁AI潜能,系统优化新高度!
Engram是一种基于LLM的智能体研究者架构,旨在解决系统优化中AI的两个关键局限:进化邻域偏差和连贯性上限。通过将长时程探索与单一上下文窗口解耦,Engram组织一系列智能体迭代设计、测试和分析机制。每次运行结束时,智能体将代码快…...
从报文周期到安全状态:ISO26262通信故障诊断的5个关键时间参数详解
从报文周期到安全状态:ISO26262通信故障诊断的5个关键时间参数详解 在智能驾驶系统快速发展的今天,确保车辆电子系统的功能安全已成为行业共识。ISO26262作为汽车功能安全的黄金标准,其核心在于建立一套完整的故障诊断与处理机制。本文将深入…...
突破3大资源壁垒:UABEA工具实战指南
突破3大资源壁垒:UABEA工具实战指南 【免费下载链接】UABEA UABEA: 这是一个用于新版本Unity的C# Asset Bundle Extractor(资源包提取器),用于提取游戏中的资源。 项目地址: https://gitcode.com/gh_mirrors/ua/UABEA 当你…...
CopyManga下载器新手指南:从入门到精通的漫画收藏解决方案
CopyManga下载器新手指南:从入门到精通的漫画收藏解决方案 【免费下载链接】copymanga-downloader 使用python编译exe/bash/命令行参数来下载copymanga(拷贝漫画)中的漫画,支持批量选话下载和获取您收藏的漫画并下载!(windows&linux支持&…...
高等数学实战解析:定积分换元法与分部积分法的核心技巧
1. 定积分换元法的实战技巧 第一次接触定积分换元法时,我完全被那些符号变换绕晕了。直到后来在物理实验中遇到一个弹簧振子的能量计算问题,才真正明白这个方法的精妙之处。想象你手里拿着一根橡皮筋,想要测量拉伸它需要的总能量——这就是定…...
如何快速掌握PDF对比工具:5个实用场景完全指南
如何快速掌握PDF对比工具:5个实用场景完全指南 【免费下载链接】diff-pdf A simple tool for visually comparing two PDF files 项目地址: https://gitcode.com/gh_mirrors/di/diff-pdf PDF对比工具diff-pdf是一款开源的视觉化PDF文件对比神器,它…...
Hive与MySQL集成配置全流程解析
1. Hive与MySQL集成的核心价值 在企业级大数据环境中,Hive作为数据仓库工具经常需要处理PB级数据。但默认的Derby元数据库存在单会话限制和性能瓶颈,这正是MySQL大显身手的地方。我经历过多次生产环境迁移,将元数据从Derby切换到MySQL后&…...
只剩马斯克自己!xAI 11个联合创始人跑光了
11位联合创始人三年出清、只剩马斯克一人,xAI这场「天团散伙」背后,藏着AI时代最残酷的人才战争与帝国裂缝。3月28日,Ross Nordeen悄悄摘掉了自己在X平台上的xAI员工认证标识。他发了一张照片——「触碰一些草」。没有长篇告别信,…...
从Flamingo到MiniCPM-V 4.5:聊聊那些‘内置’视觉压缩的黑科技,以及我们为什么需要它
从Flamingo到MiniCPM-V 4.5:视觉压缩技术的系统级设计哲学 当一张4K高清图像被拆解成数万个视觉token时,工程师们面对的不仅是算力挑战,更是一场关于信息本质的思辨。为什么Flamingo选择固定64个潜在token?MiniCPM-V 4.5的3D-Res…...
Chord实战效果:一段30秒视频的深度解析,展示其视觉定位与描述能力
Chord实战效果:一段30秒视频的深度解析,展示其视觉定位与描述能力 1. 引言:为什么选择这段30秒视频 今天我要带大家近距离观察Chord视频理解工具的实际表现。不同于传统的技术参数罗列,我们将通过一段精心挑选的30秒视频&#x…...
