前言
其实在网上有很多关于安装和使用 VATIC (Video Annotation Tool from Irvine, California) 的博客和文章,只不过我自己在安装的过程中,都会遇到各种各样的问题,一方面是普遍的配置或者权限问题,另一方面就是很多文章里面的方法已经 out of date,无法顺利安装文章给出的方法一步步完成安装。因此,写下这篇博客记录下自己安装 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://root@localhost/vatic" # server://user:pass@localhost/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
我的验证结果如下:
因为我不使用 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 --length (num_of_frames)
参数含义:
- NAME_IN_VATIC_DATABASE:该视频在数据库中的名称,用于区分数据库中不同的视频文件。
- PATH_TO_OUTPUT_VATIC_FOLDER:在上一步转化得到的 vatic 格式的帧所在的文件夹路径,该路径下应该是所有的 .jpg 文件。
- LABEL_1.2...n:需要标记的目标的标签,至少要有一个。
- Attr_1.2...n:(可选项)属性名,每个标签下可对应多个属性,可以忽略不输入。输入时,属性名前必需要有符号“~”。
- --offline:离线操作必须带上。
- --length:每个视频中使用的帧数。
其中,输入多个 label 和 attr 时需要主要对应关系,也就是 attr 都要跟在对应的 label 后输入,例如:
turkic load video_name ./vatic/frames label1 ~attr1a ~attr1b label2 ~attr2a --offline --length (num_of_frames)
有时候执行该命令时可能需要权限,在前面加上 sudo 即可。
4. 发布视频
turkic publish --offline
发布成功的话,它会输出一组本地链接,分别在浏览器(firefox 或者 google chrome)打开这些链接就可以对视频进行标注了。当你完成所有链接的标注后,就可以执行下一步,导出结果。
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
上面三个命令选择其中一个即可。其中的区别在于:
- 直接输出所有标注结果到 output.txt 文件里。
- 输出所有标注结果到 output.txt 文件里,设定阈值为 0.5 ,对部分结果进行合并。
- 输出结果到 /output 路径下,在该路径下划分不同文件夹记录结果。
具体内容大家可以自己尝试下看看,看哪个更适用于你之后的任务。
结语
以上就是我安装 VATIC 的主要步骤,当然在安装过程中还可能会遇到其他在文中没有提及到的问题,欢迎给我留言,我尽量为大家解答并且补充到文章中。
使用 vatic 时还有其他的命令,具体的可以到文章开头提到的网站,里面有具体的说明。