主观恢复分析
sureal的Python项目详细描述
确定-主观恢复分析
Sureal是Netflix开发的一个工具箱,用于从主观测试获得的噪声测量值中恢复质量分数。 阅读this文章了解一些背景知识。sureal正在由VMAF包导入。
目前,sureal支持python 2.7和3.7。
安装
SUREAL可以通过pip(通过PyPI提供)安装,也可以在本地安装
通过pip
安装要通过pip安装sureal,请运行:
pip install sureal
本地安装
要在本地安装,首先下载源代码。在根目录下(在virtualenv中完全正确),安装需求:
pip install -r requirements.txt
在ubuntu下,您可能还需要通过apt安装python-tk(python 2)或python3-tk(python 3)包。
要在安装前测试源代码,请运行:
python -m unittest discover -s test -p '*_test.py'
到目前为止,这段代码已经在ubuntu 16.04lts和macos 10.13上测试过了。
最后,安装Sureal by:
pip install .
如果要编辑源代码,请改用pip install --editable .或pip install -e .。使用--editable可以立即获取在源中所做的更改,而无需重新运行pip install .
命令行中的用法
运行:
sureal
这将打印使用信息:
usage: subjective_model dataset_filepath [--output-dir output_dir] [--print]
如果给定--output-dir,则绘图将写入输出目录
如果启用了--print,则输出统计信息将打印在命令行和/或输出目录上。
下面是两个示例用法:
sureal MLE resource/dataset/NFLX_dataset_public_raw_last4outliers.py sureal MLE_CO resource/dataset/VQEGHD3_dataset_raw.py
这里subjective_model是包中提供的可用主观模型,包括:
- MOS - Standard mean opinion score
- MLE - Full maximum likelihood estimation (MLE) model that takes into account both subjects and contents
- MLE_CO - MLE model that takes into account only subjects (“Content-Oblivious”)
- DMOS - Differential MOS, as defined in [ITU-T P.910](https://www.itu.int/rec/T-REC-P.910)
- DMOS_MLE - apply MLE on DMOS
- DMOS_MLE_CO - apply MLE_CO on DMOS
- SR_MOS - Apply subject rejection (SR), as defined in [ITU-R BT.500](https://www.itu.int/rec/R-REC-BT.500), before calculating MOS
- ZS_SR_MOS - Apply z-score transformation, followed by SR, before calculating MOS
- SR_DMOS - Apply SR, before calculating DMOS
- ZS_SR_DMOS - Apply z-score transformation, followed by SR, before calculating DMOS
数据集文件
dataset_filepath是数据集文件的路径。 数据集文件可以是.py或.json文件。 下面的示例使用.py文件,但是json格式的文件可以用类似的方式构造。
有两种方法可以构造数据集文件。 第一种方法只有当主观测试是完全抽样时才有用, 也就是说,每一个受试者观看每一段扭曲的视频。例如:
ref_videos = [ { 'content_id': 0, 'content_name': 'checkerboard', 'path': 'checkerboard_1920_1080_10_3_0_0.yuv' }, { 'content_id': 1, 'content_name': 'flat', 'path': 'flat_1920_1080_0.yuv' }, ] dis_videos = [ { 'content_id': 0, 'asset_id': 0, 'os': [100, 100, 100, 100, 100], 'path': 'checkerboard_1920_1080_10_3_0_0.yuv' }, { 'content_id': 0, 'asset_id': 1, 'os': [40, 45, 50, 55, 60], 'path': 'checkerboard_1920_1080_10_3_1_0.yuv' }, { 'content_id': 1, 'asset_id': 2, 'os': [90, 90, 90, 90, 90], 'path': 'flat_1920_1080_0.yuv' }, { 'content_id': 1, 'asset_id': 3, 'os': [70, 75, 80, 85, 90], 'path': 'flat_1920_1080_10.yuv' }, ] ref_score = 100
在本例中,ref_videos是参考视频列表。 每个条目都是一个字典,并且必须有键content_id、content_name和path(参考视频文件的路径)。 dis_videos是扭曲视频的列表。 每个条目都是一个字典,并且必须具有键content_id(与扭曲视频的相应参考视频相同的内容ID), asset_id,os(代表“意见评分”)和path(扭曲视频文件的路径)。 os的值是一个分数列表,由一个主题投票,并且对于所有扭曲的视频必须具有相同的长度 (因为是全采样)。 ref_score是分配给参考视频的分数,在计算差异分数时是必需的, 例如,在DMO中。
第二种方法更通用,当测试是完全采样或部分采样时可以使用 (也就是说,并不是每一个受试者都观看每一段扭曲的视频)。 与第一种方法的唯一区别是,os的值现在是字典,键是主题id, 价值是他/她对特定扭曲视频的投票得分。例如:
'os': {'Alice': 40, 'Bob': 45, 'Charlie': 50, 'David': 55, 'Elvis': 60}
由于允许部分采样,因此不要求每个osdictionary中都存在每个subject id。
在python代码中的用法
请参见here,以获取在google collab笔记本中使用sureal的示例脚本。
对于开发人员
sureal使用tox来管理github上的自动测试和与Travis CI的持续集成,以及用于新版本发布、打包和发布的setupmeta。有关详细信息,请参阅DEVELOPER.md。