欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

VATIC 视频标注工具安装与使用(非 docker)—— 2020-01-27 实现安装

程序员文章站 2024-03-19 22:14:52
...

前言

其实在网上有很多关于安装和使用 VATIC (Video Annotation Tool from Irvine, California) 的博客和文章,只不过我自己在安装的过程中,都会遇到各种各样的问题,一方面是普遍的配置或者权限问题,另一方面就是很多文章里面的方法已经 out of date,无法顺利安装文章给出的方法一步步完成安装。因此,写下这篇博客记录下自己安装 VATIC 的过程以及遇到的比较典型的问题,希望能让大家更顺利地安装这个软件。

这个工具原始文档的相关链接如下(虽然大部分文件和内部链接已经无法正常使用了):

  1. http://www.cs.columbia.edu/~vondrick/vatic/
  2. https://github.com/cvondrick/vatic

之后的开发者在这个工具的基础上,还开发了 web 版的在线 VATIC 工具,不过就目前我使用的情况来看,似乎只能完成从视频中抽取帧的功能,而且网络稳定性比较差,会出现丢帧的情况,加上对视频进行标注可能还得在本地完成。如果有朋友找到在线进行标注的方法,请留言给我。

在线 VATIC 链接:https://dbolkensteyn.github.io/vatic.js/

 

主要环境

  • Ubuntu 16.04 LTS(只能使用 Linux 系统)
  • Apache2 2.4.18
  • MySQL 5.7.29

 

开始安装

下载 VATIC 源文件

原始 github 提供的脚本文件没法顺利完成所有过程,我在这里上传我自己修改后使用的脚本文件:vaitc-install.sh (如果链接失效,请给我留言)。脚本文件完成了 python 环境的配置(这里用的是 python 2.7),以及 MySQL、turkic、pyvision 文件的 clone 和 setup,整个过程大概需要4、5分钟吧。

将 vatic-install.sh 下载到你创建的属于 vatic 的根目录下,在终端输入以下代码:

./vatic-install.sh

如果文件不可执行,那就输入以下代码修改运行权限:

chmod +x vatic-install.sh

等待下载完成后,在安装目录下将会新增三个文件夹,分别是 vatic、turkic、pyvision。那么下载源文件的步骤就完成了。

 

配置 apache2 服务器

这里的配置针对的是首次安装以及 apache2 没有应用的情况,如果你的 apache2 还有别的应用,配置的时候要注意不要误删自己原来的配置,亦或者是造成配置冲突(这可能辛苦你自己解决了)。

首先,修改一下 apache2 的配置文件,文件路径如下:

/etc/apache2/sites-enabled/000-default.conf

修改可能要用到管理员模式,也就是输入:(假设使用 gedit 进行编辑)

sudo gedit /etc/apache2/sites-enabled/000-default.conf 

将该文件里面的所有内容删除,用下面的内容代替:

WSGIDaemonProcess www-data python-eggs=/tmp/.python-eggs
WSGIProcessGroup www-data

WSGIPythonHome /Users/<username>/anaconda

<VirtualHost *:80> 
    ServerName localhost
    DocumentRoot (YOUR_VATIC_ROOT_DIRECTORY)/vatic/public
    WSGIScriptAlias /server (YOUR_VATIC_ROOT_DIRECTORY)/vatic/server.py

    <Directory (YOUR_VATIC_ROOT_DIRECTORY)/vatic/public>
    	Options Indexes FollowSymLinks MultiViews Includes ExecCGI
        AllowOverride all
        Require all granted
        Satisfy Any
    </Directory>

    <Directory />
        Options Indexes FollowSymLinks Includes
        AllowOverride None
    </Directory>

    ErrorLog /etc/apache2/error.log
    CustomLog /var/log/apache2/access.log combined

	<Directory (YOUR_VATIC_ROOT_DIRECTORY)/vatic>
		<Files server.py>
			Require all granted
		</Files>
	</Directory>

</VirtualHost>

其中有四处的 (YOUR_VATIC_ROOT_DIRECTORY) 需要进行修改,这个用你自己 vatic 的路径代替。

下面验证一下 apache2 配置是否成功。首先启用 mod_headers 模块:

sudo cp /etc/apache2/mods-available/headers.load /etc/apache2/mods-enabled

因为我们对 apache2 的配置文件进行了修改,所以需要重启一下 apache 服务:

sudo apache2ctl graceful

如果成功重启了 apache 服务,说明你关于 apache2 的配置成功了。

 

配置 MySQL

关于 MySQL 配置,主要是创建 vatic 使用的数据库以及配置其在 root 账户的密码而已。

在终端运行 MySQL:

mysql -u root -p

创建数据库:

create database vatic;

为了方便后面的配置,这里我把密码设置为空。在运行 MySQL 后,输入:

use mysql
update user set authentication_string=PASSWORD("") where User='root';
update user set plugin="mysql_native_password"; 
flush privileges;
quit;

这样,关于 MySQL 的配置就完成了。

 

配置与启动 VATIC

首先配置 vatic,在你的 vatic 根目录下执行以下代码:

cd ./vatic
cp config.py-example config.py

我修改后的内容为:

signature   = "" # AWS secret access key
accesskey   = "" # AWS access key ID
sandbox     = True # if true, put on workersandbox.mturk.com
localhost   = "http://localhost/" # your local host
database    = "mysql://aaa@qq.com/vatic" # server://user:aaa@qq.com/dbname
geolocation = "(YOUR_API_KEY)" # api key for ipinfodb.com
maxobjects = 25;

# probably no need to mess below this line

import multiprocessing
processes = multiprocessing.cpu_count()

import os.path
import sys
sys.path.append(os.path.dirname(os.path.abspath(__file__)))

其中的 (YOUR_API_KEY) 可以到后面的网站 https://ipinfodb.com 去获取。由于我并不使用 AWS 的线上服务,因此我没有修改 signature 和 accesskey。

注意:后面的相关内容都是在 ./vatic/ 的路径下执行,不然很可能会报错。

然后初始化 vatic 数据库(不需要多次执行):

turkic setup --database

接下来我们创建一个 vatic 与 MySQL 的链接:

turkic setup --public-symlink

该链接创建之后,不需要再次创建,否则会报错。如果确实有需要重新创建链接的话,在重新创建之前需要删除原有的链接,位置是 vatic/public/ 下的 turkic 文件夹,使用管理员模式删除该文件夹即可。

最后我们在验证一下各方面配置是否正确,执行以下命令即可:

turkic status --verify

我的验证结果如下:

VATIC 视频标注工具安装与使用(非 docker)—— 2020-01-27 实现安装

因为我不使用 Amazon Mechanical Turk 的服务,所以这里出现 ERROR 是正常的,只要 database server 和 web server 通过即可。

 

VATIC 的使用

1. 从视频中抽取帧

turkic extract (PATH_TO_VIDEO_FILE) (PATH_TO_OUTPUT_DIRECTORY)

这里会运行比较长的时间,我在对一个 17 mins 左右的视频抽取帧时,花了将近半个小时,不过这是因为 fps 默认为 300 多,也就是收每秒提取 300 多个帧,这当然会消耗很长时间,而且相似帧太多,意义不大,然而我到现在仍没有找到修改 fps 这个参数的地方,所以我可能会选择上面提到的那个 vatic 在线工具或者其他方法(如 opencv)来完成抽取帧的步骤。(如果有朋友知道怎么修改这个 fps,请留言给我,十分感谢)。

2. 将导出的帧转为 vatic 的格式

在导出前,我们需要将所有文件夹下的帧都集合到同一个路径中,不然导出命令不能正常执行:

find (PATH_TO_TOP_FOLDER) -type f -print0 | xargs -0 mv -t (PATH_TO_DES_FOLDER)

turkic formatframes (PATH_TO_DES_FOLDER) (PATH_TO_OUTPUT_VATIC_FOLDER)

这里的 (PATH_TO_TOP_FOLDER) 指的是上面抽取帧时的 (PATH_TO_OUTPUT_DIRECTORY),路径一定要对应正确。

3. 导入视频

turkic load (NAME_IN_VATIC_DATABASE) (PATH_TO_OUTPUT_VATIC_FOLDER) (LABEL_1.2...n) [~Attr_1.2...n] --offline

参数含义:

  • NAME_IN_VATIC_DATABASE:该视频在数据库中的名称,用于区分数据库中不同的视频文件。
  • PATH_TO_OUTPUT_VATIC_FOLDER:在上一步转化得到的 vatic 格式的帧所在的文件夹路径,该路径下应该是所有的 .jpg 文件。
  • LABEL_1.2...n:需要标记的目标的标签,至少要有一个。
  • Attr_1.2...n:(可选项)属性名,每个标签下可对应多个属性,可以忽略不输入。输入时,属性名前必需要有符号“~”。
  • --offline:离线操作必须带上。

其中,输入多个 label 和 attr 时需要主要对应关系,也就是 attr 都要跟在对应的 label 后输入,例如:

turkic load video_name ./vatic/frames label1 ~attr1a ~attr1b label2 ~attr2a --offline

有时候执行该命令时可能需要权限,在前面加上 sudo 即可。

4. 发布视频

turkic publish --offline

发布成功的话,它会输出一组本地链接,分别在浏览器(firefox 或者 google chrome)打开这些链接就可以对视频进行标注了。当你完成所有链接的标注后,就可以执行下一步,导出结果。

VATIC 视频标注工具安装与使用(非 docker)—— 2020-01-27 实现安装

5. 导出结果

turkic dump (NAME_IN_VATIC_DATABASE) -o output.txt

turkic dump (NAME_IN_VATIC_DATABASE) -o output.txt --merge --merge-threshold 0.5

turkic dump (NAME_IN_VATIC_DATABASE) -o /output --pascal --pascal-skip 1

上面三个命令选择其中一个即可。其中的区别在于:

  1. 直接输出所有标注结果到 output.txt 文件里。
  2. 输出所有标注结果到 output.txt 文件里,设定阈值为 0.5 ,对部分结果进行合并。
  3. 输出结果到 /output 路径下,在该路径下划分不同文件夹记录结果。

具体内容大家可以自己尝试下看看,看哪个更适用于你之后的任务。

 

结语

以上就是我安装 VATIC 的主要步骤,当然在安装过程中还可能会遇到其他在文中没有提及到的问题,欢迎给我留言,我尽量为大家解答并且补充到文章中。

使用 vatic 时还有其他的命令,具体的可以到文章开头提到的网站,里面有具体的说明。