VATIC 視頻標註工具安裝與使用(非 docker)—— 2020-01-27 實現安裝

前言

其實在網上有很多關於安裝和使用 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

參數含義:

  • 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)打開這些鏈接就可以對視頻進行標註了。當你完成所有鏈接的標註後,就可以執行下一步,導出結果。

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 時還有其他的命令,具體的可以到文章開頭提到的網站,裏面有具體的說明。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章