利用python打造你的视频检索引擎

article/2025/9/22 16:35:53


各位广大影迷们,是不是在为自己几十上百G的视频文件而头大呢,又或者是看到了一部动作大片,明明记得自己硬盘上也有,想再次重温一下,却怎么也找不到的悲惨经历呢。

别着急,今天就陪同大家,一起打造一个简单有效的视频检索工具,从此以后,妈妈再也不用担心我找不到自己喜欢看的片片啦!

首先来快速了解一下:

开发工具:PyCharm,Opencv,PHash库,MYSQL以及一些基本的视频流处理方法。通过本篇文章,将会手把手教你打造自己的检索工具。

主要实现过程:

  • 构建视频指纹库

  • 返回相似视频结果

  • 计算哈希距离

  • 提取哈希值

  • 输入查询的视频

 

预备知识:

PHash及汉明距离的计算过程具体如下:

(1)缩小尺寸:将图像缩小到8*8的尺寸,总共64个像素。这一步的作用是去除图像的细节,只保留结构/明暗等基本信息,摒弃不同尺寸/比例带来的图像差异;

(2)简化色彩:将缩小后的图像,转为64级灰度,即所有像素点总共只有64种颜色;

(3)计算平均值:计算所有64个像素的灰度平均值;

(4)比较像素的灰度:将每个像素的灰度,与平均值进行比较,大于或等于平均值记为1,小于平均值记为0;

(5)计算哈希值:将上一步的比较结果,组合在一起,就构成了一个64位的整数,这就是这张图像的指纹。组合的次序并不重要,只要保证所有图像都采用同样次序就行了;

(6)得到指纹以后,就可以对比不同的图像,看看64位中有多少位是不一样的。在理论上,这等同于”汉明距离”(Hamming distance,在信息论中,两个等长字符串之间的汉明距离是两个字符串对应位置的不同字符的个数)。

 

小伙伴准备好了吗?接下来正式开启我们的旅程:感性哈希值-如何用Python打造你的第一个视频搜索引擎。

 

 

 

一.构建视频指纹库:

 

(1)视频截取

获取视频帧率FPS(即每秒钟帧数),假设每5秒钟截取视频一帧,转换为视频帧数为5*FPS帧截取一张视频图像。

对于如下视频:假设视频为20秒,帧率为24,按照每5秒的间隔时长(24*5=120帧)进行切分,那么可以得到如下4个视频截图:

接下来看一下我们准备的视频样本:

 

读取视频,每隔10s截取其静态帧,对每一帧提取感知哈希值,并将提取到的所有哈希值进行拼接,然后将每个视频的哈希值存入MYSQL数据库中。

最终建立了视频指纹库,如下图所示:

采用感知哈希值PHash算法,计算每一张图像的图像指纹,对所有视频进行相同操作,按照相同时间间隔截取视频帧,获取指纹,最终保存起来。 

到此,建立了给定视频的指纹库。目前数据库中包含了3个字段,即:id,videoId,PHash

 

二.相似视频查询

 

在上一步中,我们建立起来了给定视频的指纹库,即:一连串不同时间点下的哈希值。接下来,利用同样的方式,输入一个视频,对该视频提取哈希值,然后在构建的视频指纹库中进行查询,从而判断是否存在相似视频。

视频相似度比较中,衡量相似度的一般方式是计算两个特征之间的距离,常用方法有:欧式距离,余弦距离,汉明距离等。此处我们采用计算汉明距离的方法,来比较两个视频的相似程度。

 

首先读取某个视频,并提取该视频的PHash值,接下来,对数据库中的所有视频进行查询,并计算分别计算输入哈希值和数据库中视频哈希值的汉明距离,并对计距离进行排序,提取前20个相似视频的结果,结果如下图所示:

 

 

最终查询到了这么多个视频,哪一个才是我们想要找到的视频呢?在此我们需要定义一个阈值,通过这个阈值对视频相似度的距离进行筛选,只有符合要求的视频才会留下,不符合要求的视频就直接过滤掉。

在此,我们先把距离小于10的视频定义为相同视频,距离在10~20之间的定义为相似视频,一起来看看结果吧。

通过设置阈值,筛选出符合要求的视频。

其中:

第一个字段:id

第二个字段:视频的videoId

第三个字段:视频之间的汉明距离

第四个字段:相似度文字描述

三.总结:

在本文中,我们探讨了如何从头到尾创建一个视频搜索引擎。第一步是选择图像描述符——我们使用感性哈希值作为视频帧的特征描述子,提取每一个视频帧的指纹拼接起来,由此建立我们的视频指纹库。在此基础上,利用汉明距离定义两幅图像之间的“相似性”。计算距离,筛选,最终获得了符合我们预期要求的视频信息。把以上所有的步骤连接在一起,创建了一个相似视频的搜索引擎。

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 


http://chatgpt.dhexx.cn/article/Pv1gy2ya.shtml

相关文章

极智项目 | 实战多模态文本-视频检索

欢迎关注我的公众号,获取我的更多经验分享 极智传送《极智项目 | 实战多模态文本-视频检索》 大家好,我是极智视界,本文介绍 实战多模态视频检索,并提供完整项目工程源码。 本文介绍的实战多模态视频检索,提供完整的可…

CVPR 2020 论文大盘点-图像与视频检索篇

本文总结CVPR 2020 中所有与图像和视频检索(Image and Video Retrieval)相关论文,总计 16 篇。 图像和视频检索常见于搜索引擎、商品服饰搜索等应用场景,另外为进行高效检索,该领域往往会将图像或者视频的特征通过哈希算法映射到二值空间,使用汉明距比较相似度,所以哈希…

跨模态检索之文本视频检索(Text to Clip)(2)

《Cross-Modal and Hierarchical Modeling of Video and Text》(2018 ECCV) 这篇文章主要介绍了一个叫做分层序列嵌入(Hierarchical Sequence Embedding, HSE)的通用模型,其作用是对不同模态的数据进行分层建模并利用…

视频文本检索之CLIP4Clip

论文:CLIP4Clip: An Empirical Study of CLIP for End to End Video Clip Retrieval GitHub:https://github.com/ArrowLuo/CLIP4Clip 学习是一种行动反射, 不是为了晓得些“知识”, 要切己体察,代入自己&#xff0c…

跨模态检索之文本视频检索(Text to Clip)

《Multilevel Language and Vision Integration for Text-to-Clip Retrieval》(2018 CVPR) 这篇文章引入了一个多层的模型,输入一个描述某个动作的查询语句,就可以从一段没有经过修剪的视频中找出对应的片段。 首先是第一个阶段…

MPEG-CDVA标准的特征提取(除深度学习) 视频匹配 视频检索

依据可查阅资料对CDVA标准中的特征提取(不涉及深度特征部分),视频匹配和视频检索流程做了分析说明。 1. 概要 1.1 描述子提取: 使用关键帧描述子 提取关键帧之前,视频做一个降采样,每隔2-10帧左右取一帧…

CLIP4Clip:用于端到端视频检索的CLIP实证研究

Luo, Huaishao, Lei Ji, Ming Zhong, Yang Chen, Wen Lei, Nan Duan and Tianrui Li. “CLIP4Clip: An Empirical Study of CLIP for End to End Video Clip Retrieval.” ArXiv abs/2104.08860 (2021). 1. Abstract 视频文本检索在多模态研究中起着至关重要的作用&#xff0c…

同时利用字幕、音频、视频进行检索!Inria谷歌提出MMT用于高效跨模态视频检索,代码已开源!...

关注公众号,发现CV技术之美 ▊ 写在前面 检索与自然语言查询相关的视频内容对于有效处理互联网规模的数据集起着关键作用。现有的大多数文本到视频检索方法都没有充分利用视频中的跨模态线索。此外,它们以有限或没有时间信息的方式聚合每帧视觉特征。 在…

视频检索——BLSTM(论文翻译、理解)

视频检索BLSTM方法论文翻译 摘要1 介绍2 相关工作3 自监督时序哈希3.1 时序感知的哈希函数3.2 二进制的LSTM3.3 学习目标3.4 框架细节 4 二进制优化4.1 二进制求导4.2 算法细节 5 实验5.1 数据集5.2 实验设置5.3 结果分析 6 结论 Play and Rewind: Optimizing Binary Represent…

基于内容的视频检索(CBVR)

参考 1. 视频检索的基本流程 2. 视频的结构分层 各层都可以用一些属性来描述: 1. 视频序列的属性主要包括场景的个数和持续时间; 2. 场景的属性包括标题、持续时间、镜头数目、开始镜头、结束镜头等; 3. 镜头的属性包括持续时间、动态特征…

人脸视频检索系统设计(C++)

目录 人脸检索系统框架的构建 1 一.软件实现的主要界面 1 二.软件的需求概括 1 三.软件代码设计过程中需要注意的问题 2 四.程序到目前为止产生的诸多缺陷 4 五.程序的详细设计过程 4 1.输入部分的设计 4 2.检测结果部分的设计过程 10 人脸检索系统框架的构建 ------FaceMFC_v…

AAAI 2023 | 基于多模态标签聚合的视频检索模型TABLE,多项SOTA

©作者 | QQ浏览器搜索技术中心、腾讯PCG ARC Lab 来源 | 机器之心 近年来,互联网短小视频内容的爆发式增长,对视频 - 文本检索(Video-Text Retrieval)的能力提出了更高的要求。在 QQ 浏览器搜索中,视频通常包含标…

5分钟实现「视频检索」:基于内容理解,无需任何标签

Notebook 教程:text-video retrieval 「视频检索」任务就是输入一段文本,检索出最符合文本描述的视频。随着各类视频平台的兴起和火爆,网络上视频的数量呈现井喷式增长,「视频检索」成为人们高效查找视频的一项新需求。传统的视频…

视频内容检索概述

视频内容检索 针对目前多媒体搜索引擎技术,视频数量的井喷式增加以及多媒体视频内容的多样性和数据结构的复杂性,如何快速的从有效地这些视频检索出人们感兴趣的已经成为当今信息化时代的难题。 数字视频内容检索 基于内容的视频检索(CBVR…

ad建集成库_手把手教你创建自己的Altium Designer集成元件库

一个善于规划、管理及总结的硬件开发工程师都喜欢创建自己的集成库,这样就相当于给自己打造了一款更适合自己的尖兵利器,无论是硬件设计的统一性还是硬件模块的可重用性,都会给工程师带来更多的设计便利。 一个管理规范的硬件开发企业,在集成库的制作及使用方面都会做出很多…

NC57中间表数据源的设置流程

目前场景如下:NC定时将数据写入中间库中,第三方去中间库中抓取; 方式一: 第一步:在NC客户端【客户化】——【二次开发工具】——【参数设置】——【参数模板管理】添加所设置的数据源数据 找到对应的数据库表pub_sysi…

分库分表介绍

目录 一、前言 二、何谓数据切分? 三、垂直切分 1、垂直分库 2、垂直分表 3、垂直切分优缺点 4、拆分需考虑的业务因素 四、水平切分 1、水平分库 2、水平分表 3、水平切分优缺点 五、垂直与水平切分的联合使用 六、数据分片规则 1、Hash取模分表 2、数…

分库分表入门介绍

本文收集网上资料,多合一 编撰于2020年4月21日 原文链接1 原文链接2 原文链接3 目录 为什么要分库分表读写分离,主从复制Why Not NoSQL/NewSQL?什么是RDBMS 分库分表概述切分策略路由规则范围路由hash算法路由配置 分库分表带来的问题join操作COUNT&…

工作区、暂存区、仓库三者关系

区分三者关系 Git最让你迷惑的无非是它里面的各种概念了,如果是刚开始接触Git希望看完本篇介绍之后有一个清晰的认识,笔者认识也有限这里只说说个人对使用Git的感受,说一下它里面的几个最常用的概念的理解。 在初始化git版本库之后会生成一个…

浅谈MYSQL中的基本表、中间表、临时表、派生表和视图

简单介绍 首先我们先了解一下什么叫虚拟表虚拟表,顾名思义就是就是实际上并不存在(物理上不存在),但是逻辑上存在的表。 在MYSQL中存在三种虚拟表:临时表、内存表、视图 1、基本表 基本表是本身独立存在的表&#x…