淘先锋技术网

首页 1 2 3 4 5 6 7

前言

其实在网上有很多关于安装和使用 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://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

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

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

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

 

结语

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

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