前言
其實在網上有很多關於安裝和使用 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
參數含義:
- 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
上面三個命令選擇其中一個即可。其中的區別在於:
- 直接輸出所有標註結果到 output.txt 文件裏。
- 輸出所有標註結果到 output.txt 文件裏,設定閾值爲 0.5 ,對部分結果進行合併。
- 輸出結果到 /output 路徑下,在該路徑下劃分不同文件夾記錄結果。
具體內容大家可以自己嘗試下看看,看哪個更適用於你之後的任務。
結語
以上就是我安裝 VATIC 的主要步驟,當然在安裝過程中還可能會遇到其他在文中沒有提及到的問題,歡迎給我留言,我儘量爲大家解答並且補充到文章中。
使用 vatic 時還有其他的命令,具體的可以到文章開頭提到的網站,裏面有具體的說明。