开源项目地址: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相关推荐

  1. 「小程序JAVA实战」小程序的视频展示页面初始化(63)

    转自:https://idig8.com/2018/09/24/xiaochengxujavashizhanxiaochengxudeshipinzhanshiyemianchushihua62/ 进 ...

  2. 「小程序JAVA实战」小程序的举报功能开发(68)

    转自:https://idig8.com/2018/09/25/xiaochengxujavashizhanxiaochengxudeweixinapicaidancaozuo66-2/ 通过点击举报 ...

  3. jenkins 集成 docker tomcat 自动化测试脚本

    最近在搞jenkins + docker CI,把自己写的集成脚本分享出来给大家.里面很多路径或者名称是我自己的,自行替换掉. #!/bin/sh # Jenkins Build Shell Scri ...

  4. 「小程序JAVA实战」小程序视频上传方法的抽象复用(57)

    转自:https://idig8.com/2018/09/23/xiaochengxujavashizhanxiaochengxushipinshangchuanfangfadechouxiangfu ...

  5. 「小程序JAVA实战」小程序的页面重定向(60)

    转自:https://idig8.com/2018/09/24/xiaochengxujavashizhanxiaochengxudeyemianzhongdingxiang59/ 在我们正常的浏览网 ...

  6. Google AJAX 搜索 API

    链接: 使用Google Custom Search打造站内搜索 文档:http://code.google.com/intl/zh-CN/apis/websearch/docs/ <!DOCT ...

  7. multipartfile file java 怎么获取里面的属性_「小程序JAVA实战」小程序的举报功能开发(68)...

    通过点击举报按钮,跳转到举报页面完成举报操作. 后台开发 获取发布人的userId,videoId,创建者的Id controller UserController.java package com. ...

  8. 微信小程序与servlet交互

    学了一段时间的小程序,现在记录一下 之前写了jsp和servlet之间是怎么传输数据和返回数据的,那么微信小程序和servlet是怎么进行交互的,前端怎么进入后台. 开发准备: 微信开发工具:4090 ...

  9. 闲聊Robots协议

    其实,我了解搜索引擎方面的知识是比较晚的~~~对robots协议还是来自2012年的"3B大战"也就是360和百度之间的一场争论!! 360呢,在2012年推出了自己的一款搜索引擎 ...

最新文章

  1. 程序猿面试什么最重要?
  2. docker环境无法执行jmap -heap 56命令
  3. 文巾解题 1480. 一维数组的动态和
  4. 寒假每日一题(提高组)【Week 4 完结】
  5. 4部“教材级”纪录片,有生之年必看系列!
  6. JAVA做一个五星评论打分字体,java中的Font
  7. 跳转语句_javascript流程语句(单分支)
  8. ArcGIS Server Java 9.3 REST API的中文查询问题的解决方案
  9. 02--Tomcat总体结构分析一
  10. Windows域控管理 常用操作 详细汇总
  11. lync登录时一直停留在登录界面
  12. mvc razor html.list,NetCore Web应用开发-HTML,C#,Razor补充
  13. PKU 1062 昂贵的聘礼
  14. 在 Linux 中使用 SSD(固态驱动器):启用 TRIM
  15. 计算请假时间(不算节假日)
  16. Docker Compose方式安装GitLab
  17. 蓝牙快速连接 android,Android智能设备快速连接蓝牙的方法与流程
  18. 升级鸿蒙系统第四批在什么时候,鸿蒙第四批升级名单公布 鸿蒙第四批升级机型一览...
  19. 个别化教育计划IEP模板
  20. 基于ZYNQ 7000的1553B总线控制器测试系统的设计与实现

热门文章

  1. oracle锁表解表
  2. 几种判断整数是偶数(Even)的算法对比
  3. 数据分析的理论与实践
  4. Android icon适配mipmap
  5. 关于IT运维管理的目标
  6. 中视伟业3516CV500+IMX327,3519AV100+IMX334,人脸、人型检测,人脸、人型抓拍,HTTP 上传,GB2818.13519AV100人脸网关录像机,AI方案商,定制开发
  7. 第17篇 2D绘图(七)涂鸦板
  8. R语言按某一列分类求均值+绘图总结
  9. AEAI HR_v1.5.2升级说明,开源人力资源管理系统
  10. 保护手机号码不被应用窃取的有力措施