videosearch
开源项目地址:https://github.com/andrefaraujo/videosearch
1、终端模式下切换到root身份:sudo -s -H
查看IP:ifconfig -a
2、Opencv可以直接从库中安装 (选择的是阿里云的源):
sudo apt-get install libopencv-dev python-opencv
3、Ubuntu16.04下安装FFmpeg:
sudo apt-get install ffmpeg
如果提示错误 : E: 软件包 ffmpeg 没有可供安装的候选者
参考:https://blog.csdn.net/weixin_37251044/article/details/78380303
独立安装时,bash: ./configure: 权限不够
给文件加上可执行权限: chmod +x configure
4、ubuntu 安装 pkg-config
sudo apt-get install pkg-config
5、进入目录:cd /usr/lib
新建文件夹:mkdir videosearch
rm -rf 非空目录名 (删除一个包含文件的文件夹)
6、克隆资源库:
git clone https://github.com/andrefaraujo/videosearch.git
此时提示git未安装,则安装:apt install git
不能访问的话,单独下载然后复制进来:
移动一个文件夹到另一个文件夹下:sudo mv 文件名 目标文件夹路径
复制一个文件夹到另一个文件夹下:sudo cp -r 文件名 目标文件夹路径 (-r 就是递归的意思,删除时 也同样这么加-r)
复制一个文件到另一个路径下:sudo cp 文件路径/文件名 目标文件夹路径
sudo cp -r videosearch-master.zip /usr/lib/
然后解压改名字
unzip videosearch-master.zip
mv videosearch-master videosearch
7、建立VLFET库(计算机视觉库)
cd videosearch/common/vlfeat-0.9.18/
make
8、建立YAEL库(图像检索库)
安装之前提示,要安装swig:
sudo apt-get install swig
安装 g++:
sudo apt-get install g++
g++ -version
安装BLAS和LAPACK(https://blog.csdn.net/papageno_xue/article/details/79955599)
sudo apt-get install libblas-dev checkinstall
sudo apt-get install libblas-doc checkinstall
sudo apt-get install liblapack-dev checkinstall
sudo apt-get install liblapack-doc checkinstall
cd /usr/lib/videosearch/common/yael_v260_modif/
./configure.sh
cd yael
make
如果make时显示:yael_wrap.c:125:20: fatal error: Python.h: 没有那个文件或目录
那么需要安装python-dev这个包:
sudo apt-get install python-dev
9、给视频数据库中的视频提取关键帧
cd /usr/lib/videosearch/indexer/keyframes
./run_keyframe_extraction_test.sh
数据库视频中提取关键帧,首先根据“视频列表.txt”文档获取包含视频路径、视频文件名及视频后缀的列表,然后遍历视频数据库列表,对每个视频进行获取关键帧操作,然后把关键帧的列表记录文件和关键帧的图片分别以txt文档和jpg图片格式存放。
10、建立镜头边界检测器并且给数据库中的视频检测视频边界
cd /usr/lib/videosearch/indexer/shot_detector
make
./run_shot_detector_test.sh
建立镜头边界检测器,提取镜头边界用于测试数据库视频。首先根据上一步,提取视频关键帧后,产生视频列表文档,记录每个视频产生的关键帧,然后为每个视频提取视频检测边界。
11、建立SIFT(图像关键点)提取器并且给数据库中的每个关键帧提取SIFT
cd /usr/lib/videosearch/indexer/local_descriptors/
make
./run_sift_extraction_test.sh
首先获取上面步骤产生的关键帧列表keyframes.txt,并设置相应的线程数量threads。Threads个线程,同时对keyframes.txt里面的关键帧所记录的图片遍历,并在每个视频文件生成关键帧的文件夹下生成每张图片对应的SIFT文件。
算法描述
thread,keyframes.txt; |
keyframeslist=read(keyframes.txt); |
for(int i=0;i<thread;i++){ |
thread(i){ |
keyframeimage=read(keyframe(j).jpg) |
sift(keyframeimage) |
output(keyframe(j).siftb) |
} |
} |
编译make的时候出现问题:/usr/bin/ld:extract.o:undefined reference to symbol 'pthread_create@@GLIBC_2.2.5'
62行报错,在62行分号之前添加-lpthread
12、建立全局描述子提取器
cd /usr/lib/videosearch/indexer/global_descriptors/
make
构建全局描述符提取器,并提取每个帧、镜头和场景的全局描述符。
首先,为每一个视频剪辑提取基于框架的全局描述符,然后把所有视频的全局描述存放到索引文件中。
算法描述
keyframes.txt; |
keyframeslist=read(keyframes.txt); |
for videoitem in keyframeslist: |
GDS(i)=GD(videoitem) |
output(GDS(i).sift_scfv_idx_k512)//生成单个视频二进制全局描述 output(global_index.sift_scfv_idx_k512)//生成全局描述 |
13、提取查询图片的SIFT
cd /usr/lib/videosearch/indexer/local_descriptors/
./run_sift_extraction_test_query.sh
# Optional: extract global descriptors
cd $mypath/videosearch/indexer/global_descriptors/
./run_query_index_test.sh
为查询图像提取本地描述符(以及可选的全局描述符)(在运行retriever之前需要这样做,这是下一步)。
首先获取记录查询图片的txt文档获取图片列表,为每张图片生成对应的SIFT文件,并输出到对应文件夹中。
算法描述 |
querylist.txt;//查询图片列表所在文件 threads;//线程数量 |
queryimagelist=read(querylist.txt;);//获取查询图片列表 |
for queryimage in queryimagelist: |
output(queryimage.siftb)//生成二进制SIFT文件 |
14、建立检索器
构建检索器并为基于帧、镜头和场景的索引运行。
一是,可以使用基于框架的全局描述符检索,也可以使用基于框架的全局描述符检索,使用预先计算的查询全局描述符。
算法 |
|
frame_db_list.txt |
//视频库中所有关键帧列表文件 |
query_list.txt |
//需要查询图片列表文件 |
frame_db_list=read(frame_db_list.txt); |
|
query_list=read(query_list.txt); |
|
for queryitem in query_list: |
|
for framedbitem in frame_db_list: |
|
if(queryitem ==framedbitem) |
|
output(framedbitem) |
//输出满足相似度的图片编号 |
二是,使用基于shot的全局描述符(LOC模式)检索。
三是,使用基于shot的全局描述符(INDEP模式)检索。
15、精准度和精准度
videosearch相关推荐
- 「小程序JAVA实战」小程序的视频展示页面初始化(63)
转自:https://idig8.com/2018/09/24/xiaochengxujavashizhanxiaochengxudeshipinzhanshiyemianchushihua62/ 进 ...
- 「小程序JAVA实战」小程序的举报功能开发(68)
转自:https://idig8.com/2018/09/25/xiaochengxujavashizhanxiaochengxudeweixinapicaidancaozuo66-2/ 通过点击举报 ...
- jenkins 集成 docker tomcat 自动化测试脚本
最近在搞jenkins + docker CI,把自己写的集成脚本分享出来给大家.里面很多路径或者名称是我自己的,自行替换掉. #!/bin/sh # Jenkins Build Shell Scri ...
- 「小程序JAVA实战」小程序视频上传方法的抽象复用(57)
转自:https://idig8.com/2018/09/23/xiaochengxujavashizhanxiaochengxushipinshangchuanfangfadechouxiangfu ...
- 「小程序JAVA实战」小程序的页面重定向(60)
转自:https://idig8.com/2018/09/24/xiaochengxujavashizhanxiaochengxudeyemianzhongdingxiang59/ 在我们正常的浏览网 ...
- Google AJAX 搜索 API
链接: 使用Google Custom Search打造站内搜索 文档:http://code.google.com/intl/zh-CN/apis/websearch/docs/ <!DOCT ...
- multipartfile file java 怎么获取里面的属性_「小程序JAVA实战」小程序的举报功能开发(68)...
通过点击举报按钮,跳转到举报页面完成举报操作. 后台开发 获取发布人的userId,videoId,创建者的Id controller UserController.java package com. ...
- 微信小程序与servlet交互
学了一段时间的小程序,现在记录一下 之前写了jsp和servlet之间是怎么传输数据和返回数据的,那么微信小程序和servlet是怎么进行交互的,前端怎么进入后台. 开发准备: 微信开发工具:4090 ...
- 闲聊Robots协议
其实,我了解搜索引擎方面的知识是比较晚的~~~对robots协议还是来自2012年的"3B大战"也就是360和百度之间的一场争论!! 360呢,在2012年推出了自己的一款搜索引擎 ...
最新文章
- 程序猿面试什么最重要?
- docker环境无法执行jmap -heap 56命令
- 文巾解题 1480. 一维数组的动态和
- 寒假每日一题(提高组)【Week 4 完结】
- 4部“教材级”纪录片,有生之年必看系列!
- JAVA做一个五星评论打分字体,java中的Font
- 跳转语句_javascript流程语句(单分支)
- ArcGIS Server Java 9.3 REST API的中文查询问题的解决方案
- 02--Tomcat总体结构分析一
- Windows域控管理 常用操作 详细汇总
- lync登录时一直停留在登录界面
- mvc razor html.list,NetCore Web应用开发-HTML,C#,Razor补充
- PKU 1062 昂贵的聘礼
- 在 Linux 中使用 SSD(固态驱动器):启用 TRIM
- 计算请假时间(不算节假日)
- Docker Compose方式安装GitLab
- 蓝牙快速连接 android,Android智能设备快速连接蓝牙的方法与流程
- 升级鸿蒙系统第四批在什么时候,鸿蒙第四批升级名单公布 鸿蒙第四批升级机型一览...
- 个别化教育计划IEP模板
- 基于ZYNQ 7000的1553B总线控制器测试系统的设计与实现
热门文章
- oracle锁表解表
- 几种判断整数是偶数(Even)的算法对比
- 数据分析的理论与实践
- Android icon适配mipmap
- 关于IT运维管理的目标
- 中视伟业3516CV500+IMX327,3519AV100+IMX334,人脸、人型检测,人脸、人型抓拍,HTTP 上传,GB2818.13519AV100人脸网关录像机,AI方案商,定制开发
- 第17篇 2D绘图(七)涂鸦板
- R语言按某一列分类求均值+绘图总结
- AEAI HR_v1.5.2升级说明,开源人力资源管理系统
- 保护手机号码不被应用窃取的有力措施