主观恢复分析

sureal的Python项目详细描述


确定-主观恢复分析

Version on pypiBuild Status

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_idcontent_namepath(参考视频文件的路径)。 dis_videos是扭曲视频的列表。 每个条目都是一个字典,并且必须具有键content_id(与扭曲视频的相应参考视频相同的内容ID), asset_idos(代表“意见评分”)和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

欢迎加入QQ群-->: 979659372 Python中文网_新手群

推荐PyPI第三方库


热门话题
Java赋值(更改if语句中的字符串值)   java Phone不显示我的应用程序以打开TXT文件   多线程Java和MongoDB线程   java如何修复WorldWind26 SocketTimeOutException?   java如何在hbase中批量删除多行?   java独立Jetty为同一上下文实例配置多个上下文路径   在java Web应用程序中通过黑盒测试测量代码覆盖率   基于Java的安卓 Youtube数据API   java创建一个选定的序列或内部类   方法如何在Java中将长参数列表重构为参数对象?   java如何比较通用LinkedList中的对象   Groovy中HashMap的java点积   java如何使用Spring将HSQLDB嵌入到WebApp的文件中   rest Java Akka HTTP请求参数提取   Eclipse Indigo(3.7)的java免费UML插件?   java无法在自定义ListView中设置页边距   桌面上的java流媒体   java使用SLF4J动态更改日志文件位置,并且独立于日志框架