MAC 安裝 VMAF 遇到的問題及解決方法記錄

zailushang發表於2020-08-11

根據官方文件,或同行的文章,安裝VMAF後,都出現了各種各樣的問題,經過較長時間才逐一解決掉,僅以此文記錄。

安裝記錄

(1)安裝python3.5以上

(2)編譯環境準備

brew install gcc meson doxygen nasm freetype pkg-config hdf5
brew install numpy scipy

(3)下載VMAF並安裝

# 下載原始碼
git clone https://github.com/Netflix/vmaf.git
cd vmaf
git submodule update --init --recursive
# 編譯
make

可能遇到錯誤: 'mem.h' file not found

報錯資訊:

A. 根據報錯資訊,看到vmaf/core/../../../libvmaf/src/feature/adm_tools.c的22行: #include "mem.h"報錯:找不到mem.h
B. find目錄vmaf下有沒有mem.h

$ find vmaf/ -name mem.h
.//libvmaf/src/mem.h # 該目錄下有mem.h檔案

C. 問題解決
開啟mem.h看了一下,沒有引用其他檔案,所以直接把mem.h拷貝到adm_tools.c的同級目錄中。
再次執行make clean && make,編譯通過。

繼續安裝:

cd python
pip3 install cython
pip3 install -r requirements.txt
pip3 install --user . # 此時,會出現各種報錯

錯誤2:

vmaf/core/adm_dwt2_cy.c:637:10: fatal error: '../../../libvmaf/src/feature/adm_tools.c' file not found
通過ls發現,檔案是存在的,且相對路徑沒有問題,C語言執行卻沒找到。因為C都已經還給大學老師了,所以暫時修改為絕對路徑(有了解如何解決的小夥伴可以留言)

修改完後,繼續執行pip3 install --user .,顯示vmaf安裝成功

(4)環境變數配置

新增export PATH="$PATH:$HOME/.local/bin"到~/.profile中
執行source ~/.profile使配置生效

(5)單元測試

在vmaf根目錄下,

./unittest


執行結果有成功的,有失敗的,暫時不管。繼續下面的步驟。

(6)測試驗證

PYTHONPATH=python ./python/vmaf/script/run_vmaf.py \
yuv420p 576 324 \
python/test/resource/yuv/src01_hrc00_576x324.yuv \
python/test/resource/yuv/src01_hrc01_576x324.yuv \
--out-fmt json

執行時,報錯:Can't import svmutil from /Users/lizhen/Library/Python/3.8/lib/python/third_party/libsvm/python: No module named 'svmutil'

ll 檢視/Users/lizhen/Library/Python/3.8/lib/python/third_party/libsvm/python,發現檔案不存在,一臉懵逼啊,臥槽。(歡迎解決過這個問題的小夥伴留言)

不過,初步懷疑是python環境的問題,所以用Pycharm直接開啟vmaf/python專案,建立env虛擬環境。

在python虛擬環境下,執行:

又有報錯:

Traceback (most recent call last):
File "./vmaf/script/run_vmaf.py", line 13, in <module>
from vmaf.config import VmafConfig, DisplayConfig
ModuleNotFoundError: No module named 'vmaf'

這個還算好解決:

繼續執行:

python ./vmaf/script/run_vmaf.py yuv420p 576 324 test/resource/yuv/src01_hrc00_576x324.yuv test/resource/yuv/src01_hrc01_576x324.yuv --out-fmt json

ok,終於搞定了,MD。

  • 其中VMAF_score得分是最終得分,其他是VMAF的基本指標得分。
  • adm2, vif_scalex 得分範圍 0 (最差) to 1 (最好)
  • motion2 得分範圍 0 (靜止的) to 20 (高速運動的)

相關文章