python 视频处理技术_Python玩转视频处理(三):从视频中提取女神片段

2023-10-29

在上一篇中实现了基于人脸识别提取人物片段的功能,但是在实践过程中发现,如果是一部电影,那么提取到的片段太多了。为了找女神的电影片段,还要在辣么多剪辑中苦苦手工筛选,这个不是一个优秀的程序员应该做的。

经过一番实践和探索,发现了一个强大的库,叫做face_recognition。本菜鸟也尝试过用opencv识别出图像,通过图像指纹计算出相似度,抑或通过图片向量的余弦相似度计算,奈何实现复杂,效果也不如face_recognition,只好弃暗投明。

1. face_recognition介绍

face_recognition使用 dlib 顶尖的深度学习人脸识别技术构建,在户外脸部检测数据库基准(Labeled Faces in the Wild benchmark)上的准确率高达 99.38%。

官方介绍了face_recognition以下基本功能:

1.1 找出图片中的人脸

1.2 找到并且控制图像中的脸部特征

1.3 识别图片中的人脸

在本文中使用的就是它的第三个功能识别图片中的人脸。

2. face_recognition的安装使用

face_recognition的使用需要基于Python3.3以上或Python2.7,操作系统为MacOS或Linux(Windows不提供官方支持)。安装命令如下:

$ pip install face_recognition

安装完成后可以在命令行使用face_recognition或在Python中调用。以在Python中“识别女神李一桐”为例,其过程如下:初始化,导入face_recognition,加载一张李一桐的脸部图片;加载对比图片,读取图片后进行编码;对比,将已知图片和对比图片用compare_faces方法进行对比并得到结果。

Python代码如下:

import face_recognition

# 初始化

picture_of_liyitong = face_recognition.load_image_file("yilitong.jpg")

liyitong_encoding = face_recognition.face_encodings(picture_of_liyitong)[0]

# 加载对比图片

unknown_picture = face_recognition.load_image_file("unknown.jpg")

unknown_face_encoding = face_recognition.face_encodings(unknown_picture)[0]

# 用`compare_faces`方法继续对比得到结果,

# 值得注意的是第一个参数是一个列表,可以传多个图片参数进行对比

results = face_recognition.compare_faces([liyitong_encoding], unknown_face_encoding)

if results[0] == True:

print("图片中包含女神")

else:

print("未找到女神!")

3. 女神视频提取

提取女神视频的过程与之前《从视频中自动提取人物的视频片段》的思路类似。1.1. 获取图片,用moivepy读取视频,用iter_frames方法从中获取图片帧;

1.2. 标记时间点,利用opencv识别图片中的人物并标记人物出现的起始时间点和结束时间点,并将这些时间点放到到一个列表中。

1.3. 视频截取,用moivepy将上一步中标记的时间片段从视频中截取出来,最后筛选出需要的视频片段即可。

只是将上面第二步中“用opencv识别图片中的人物”改为“用face_recognition进行对比”。代码实现如下:

from moviepy.editor import VideoFileClip

from moviepy.video.io.ffmpeg_tools import ffmpeg_extract_subclip

import face_recognition

def contain_godness(img, godness_encoding):

face_locations = face_recognition.face_locations(img)

is_godness = False

for (top_right_y, top_right_x, left_bottom_y,left_bottom_x) in face_locations:

unknown_image = img[top_right_y-50:left_bottom_y+50, left_bottom_x-50:top_right_x+50]

unknown_encoding = face_recognition.face_encodings(unknown_image)

if unknown_encoding:

results = face_recognition.compare_faces([godness_encoding], unknown_encoding[0])

print(results)

is_godness = results[0]

return is_godness

def find_durations(clip, godness_encoding):

"""

从视频中搜索女神片段

"""

duration_list = [] # 存储片段时间列表

start_time = 0 # 记录片段开始时间, 以毫秒为单位

end_time = 0 # 记录片段结束时间, 以毫秒为单位

last_index = 0

for i, img in enumerate(clip.iter_frames(fps=20)):

print(i)

flag = contain_godness(img, godness_encoding)

if flag and start_time == 0:

start_time = i / 20

last_index = i

if start_time > 0 and not flag:

end_time = i / 20

duration_list.append([start_time, end_time])

# 重置开始时间和结束时间

start_time = end_time = 0

# 打印片段时间列表并返回

print(duration_list)

return duration_list

if __name__ == "__main__":

filename = "demo.mp4"

clip = VideoFileClip(filename)

godness_image = face_recognition.load_image_file("godness.png")

godness_encoding = face_recognition.face_encodings(godness_image)[0]

durations = find_durations(clip, godness_encoding)

for d in durations:

start_t, end_t = d

ffmpeg_extract_subclip(filename, start_t, end_t)

欢迎关注我的公众号“Python的乐趣”,原创技术文章第一时间推送。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

python 视频处理技术_Python玩转视频处理(三):从视频中提取女神片段 的相关文章

  • 详解停车位检测论文:Attentional Graph Neural Network for Parking-slot Detection

    本文介绍一篇注意力图神经网络用于停车位检测论文 论文已收录于 RA L2021 在之前的基于卷积神经网络的停车位检测方法中 很少考虑停车位标记点之间的关联信息 从而导致需要复杂的后处理 在本文中 作者将环视图中的标记点看作图结构数据 使用图
  • Pyspark案例综合(数据计算)

    数据计算 map方法 map算子 map算子 成员方法 接受一个处理函数 可用lambda快速编写 对RDD内的元素一一处理 返回RDD对象 链式调用 对于返回值是新的RDD的算子 可以通过链式调用的方式多次调用算子 演示RDD的map成员
  • IE命令行参数

    Windows Internet Explorer includes several command line options that enable you to troubleshoot and configure the browse
  • Chrome开发者工具详解(一)

    Chrome开发者工具详解 一 前言 一 打开开发者工具方法 二 面板常用方法 1 Elements面板 2 Network 面板 总结 前言 Chrome浏览器中内置了一套强大的开发者工具 学会使用Chrome开发者工具对web网站进行静
  • window10下conda使用报错:An unexpected error has occurred. Conda has prepared the above report.

    在我使用anaconda3创建环境 跑实验时 把镜像三搞两搞 搞出了问题 卡死了 An unexpected error has occurred Conda has prepared the above report 网上找了好多方法都没
  • 百度2015年系统工程师笔试题:设计一个小程序来判断当前机器的字节序怕【详解】

    目录 设计思路 代码实现 设计思路 首先 我们要了解需要判断的东西是什么 这就需要我们了解大小端的概念 大端 存储 模式 是指数据的低位保存在内存的高地址中 而数据的高位 保存在内存的低地址 中 小端 存储 模式 是指数据的低位保存在内存的
  • linux globbing文件通配符

    在linux中使用ls cp mv rm等命令时可以使用文件通配符匹配操作多个文件 匹配模式 匹配任意长度的任意字符 匹配任意单个字符 匹配指定范围内的任意单个字符 文件通配不区分字母的大小写 匹配非制定范围内的任意单个字符 特殊格式 up
  • 使用jsoup爬取小说

    1 开局扯犊子 最近正在学习Java爬虫技术 于是乎接触到了jsoup这个东西 继爬取美女图片后的第二个小项目 爬取笔趣阁小说 2 页面分析 首先我们进入笔趣阁选择一本喜欢的小说 f12后拿到他的title与每一章的地址 然后我们继续分析进
  • 【Hive】Hive元数据库介绍及信息查看

    转载 dabokele 在安装Hive时 需要在hive site xml文件中配置元数据相关信息 与传统关系型数据库不同的是 hive表中的数据都是保存的HDFS上 也就是说hive中的数据库 表 分区等都可以在HDFS找到对应的文件 这
  • 冒泡排序 例题:给出一组数将这组数按从小到大的顺序输出出来

    冒泡排序 例题 给出一组数将这组数按从小到大的顺序输出出来 学习笔记 方便自己日后复习 也可供大家参考学习 冒泡排序百度上是这样定义的 冒泡排序 它重复的走访过要排序的元素列 依次比较两个相邻元素 如果他们的顺序 如从大到小 首字母从A到Z
  • 进程和线程的区别和联系

    一 简介 进程 进程是操作系统资源分配的基本单位 进程是指正在运行的程序实例 每个进程都有自己的内存空间 代码 数据和资源 操作系统通过管理进程来控制计算机的资源分配 每个进程都有一个唯一的标识符 称为进程 ID 以便操作系统可以识别和管理
  • NCCL error in: , unhandled system error

    今天pytorch分布式跑代码的时候出现 RuntimeError NCCL error in opt conda conda bld pytorch 1614378083779 work torch lib c10d ProcessGro
  • Vue脚手架的创建

    首先创建脚手架 初始化脚手架 Vue脚手架 是Vue官方提供的标准化开发工具 开发平台 Vue CLI 1 配置npm 2 全局安装 vue cli npm install g vue cli 3 切换到创建项目的目录 使用命令创建项目 v
  • Open3D 点云DBSCAN密度聚类并保存聚类结果

    目录 一 算法原理 1 密度聚类 2 主要函数 3 参考文献 二 代码实现 三 结果展示 1 保存聚类 2 可视化 一 算法原理 1 密度聚类 密度聚类是将簇定义为密度相连的点的最大集合 能够把具有足够高密度的区域划分为簇 并可在噪声的空间
  • 并行编程OpenCL-矩阵相加

    并行编程OpenCL 矩阵相加 1 host端代码 include
  • springboot之mybatis进阶

    springboot之mybatis进阶 简介 CRUD标签 select insert update delete resultMap sql片段 动态sql if choose when otherwise where 和set for
  • 关于使用SSM框架搭建的项目的运行方法

    目录 运行环境配置 1 安装 IDEA 开发工具 中文版设置 JDK直接下载 2 安装 MYSQL 数据库 2 1 下载安装 2 2 配置环境变量 2 4 安装 MySQL 2 4 进入 MySQL 2 5 常见问题 3 安装Tomcat
  • java日期之间的比较【项目日常】

    一 String类中提供了compareTo方法 原理是将字符串转成char 从char 0 开始进行比较 如果两值不相等 则返回相减的结果 一般将结果与0相比 进行判断 并不关心返回的具体值 String s1 2022 09 22 St
  • 蓝桥杯每日练习2

    文章目录 一 Fibonacci斐波那契数列 1 题目 2 样例 3 解析 4 Python代码 二 求圆的面积 1 题目 2 样例 3 解析 4 Python代码 三 N以内累加求和 1 题目 2 样例 3 解析 4 Python代码 四

随机推荐

  • 分布式文件系统 - FastDFS 在UBUNTU下安装

    分布式文件系统 FastDFS 在 CentOS 下配置安装部署 按照该博主的介绍 大部分安装操作正常 只是在创建软连接的时候报错 所以只好用笨办法启动和关闭 启动tracker usr bin fdfs trackerd etc fdfs
  • Python 实现不平衡采样

    本文将基于不平衡数据 使用Python进行反欺诈模型数据分析实战 模拟分类预测模型中因变量分类出现不平衡时该如何解决 具体的案例应用场景除反欺诈外 还有客户违约和疾病检测等 只要是因变量中各分类占比悬殊 就可对其使用一定的采样方法 以达到除
  • python命令行操作:Click包

    0 前言 在Python开发和测试过程中主要有两种模式可以选择 脚本模式 命令行模式 在代码的开发和调试过程中使用脚本模式还是很方便的 尤其接触pycharm eclipse这类强大的IDE 或者配合vs code这种综合的文本编辑器 但是
  • 【MySQL】——数据库的基本查询练习

    个人主页 努力学习的少年 版权 本文由 努力学习的少年 原创 在CSDN首发 需要转载请联系博主 如果文章对你有帮助 欢迎关注 点赞 收藏 一键三连 和订阅专栏哦 基本查询 基本查询只在一张数据表中进行查询 接下来的题目都会在下面这张表进行
  • Java多线程——线程池

    一 ThreadPoolExecutor接口 之前提到过Executors所提供的四种线程池 即 Scheduled Single Fixed Cached 如果这几种线程池不能完全满足你的需求 那么通过ThreadPoolExecutor
  • [4G&5G专题-97]:MAC层- 调度 - 上行调度的原理、过程与算法

    目录 第1章 调度概述 1 1 调度概述 1 2 无线资源调度的分类 第2章 上行调度的整体架构与过程 2 1 上行需要调度的信道 2 2 上行数据发送过程 2 3 上行调度架构 2 4 上行调度的输入信息 2 5 上行调度的步骤与过程 2
  • 【客户案例】云联壹云帮助华北电力大学搭建 AI 训练平台

    客户介绍 华北电力大学是教育部直属全国重点大学 是国家 211 工程 和 985 工程优势学科创新平台 重点建设大学 2017 年 学校进入国家 双一流 建设高校行列 重点建设能源电力科学与工程学科群 全面开启了建设世界一流学科和高水平研究
  • 如何制作属于自己的图片马

    前言 图片马是指代码写入后不破坏图片为前提 图片仍可正常打开 详细过程 自定义一个新的文件夹 文件夹里放入三个文件 一张自己喜欢的图片 自定义php代码文件 批处理文件 super png 用文本编辑器打开也没php代码
  • 深度学习基础知识

    深度学习入门者必看 25个你一定要知道的概念如果你还不了解深度学习有多么强大 不妨就从这篇文章开始 https mp weixin qq com s biz MzIzNjc1NzUzMw mid 2247485927 idx 1 sn 60
  • vue diff 双端比较算法

    文章目录 双端指针 比较策略 命中策略四 命中策略二 命中策略三 命中策略一 未命中四种策略 遍历旧节点列表 新增情况一 新增情况二 删除节点 双端比较的优势 双端指针 使用四个变量 oldStartIdx oldEndIdx newSta
  • 微信小程序页面跳转三种方式

    为了不让用户在使用小程序时造成困扰 微信小程序规定页面路径只能是五层 请尽量避免多层级的交互方式 页面跳转的话就涉及到了多个页面层级 第一种 wx navigateTo OBJECT 保留当前页面 跳转到应用内的某个页面 使用wx navi
  • powershell 自动补全

    我在zsh中使用智能提示 zsh autosuggestions已经习惯了 而在windows中的终端默认没有智能提示 很起来不舒服 那么有没有什么替代呢 安装powershell 7 3 我的windows 10默认安装的是powersh
  • CSDN 改变字体颜色

    将字体改变为红色 font color 900 我是编程ID font 设置字体颜色和字号 font face 华文行楷 color red size 5 本字体是华文行楷 红色 5号大小 font 更多字体参见 https blog cs
  • vue+element+table+render+slot

    前言 最新又回忆并且整理下之前的资料 在这里共享下把 主要是element ui框架里面对table的使用 因为element ui不可以像我们iview框架一样可以直接的在表头里面写render函数 我这里把element ui的tabl
  • Java使用EasyExcel导出数据到Excel文件,以及调用接口下载文件

    1 引入EasyExcel 依赖
  • OAM PDU

    MPLS OAM基本概念 MPLS提供一个完全不依赖于任何三层协议或二层协议的OAM机制 在MPLS的数据平面实现以下功能 1确定LSP的连通性 2 衡量网络利用率以及度量网络性能 3 在链路出现缺陷或故障时迅速进行保护倒换 以便根据与客户
  • hping3的使用

    Hping 是面向命令行的 用于生成和解析 TCP IP 协议数据包汇编 分析的开源工具 常见的应用是 扫描端口 伪造地址和洪水攻击 hping3中的参数如下 h help 显示帮助 v version 显示版本 c count 发送数据包
  • APS计划排程系统之下的MRPII、JIT、TOC三种方式对比分析

    1 生产物流计划的制订方式对比 MRPII采用的是集中式的物料计划方式 建立好产品加工程序 在电脑中确定好准确的订单需求和库存量 对各个生产单元传送生产指令 JIT利用的是看板管理控制方式 按照有限能力计划 逐道工序地倒序传递生产中的取货指
  • librecad二次开发

    1 ui 部份 1 增加主菜单 在这里插入图片描述 https img blog csdnimg cn 65e596109caf43a485505ab1b705ea94 png x oss process image watermark t
  • python 视频处理技术_Python玩转视频处理(三):从视频中提取女神片段

    在上一篇中实现了基于人脸识别提取人物片段的功能 但是在实践过程中发现 如果是一部电影 那么提取到的片段太多了 为了找女神的电影片段 还要在辣么多剪辑中苦苦手工筛选 这个不是一个优秀的程序员应该做的 经过一番实践和探索 发现了一个强大的库 叫