Name | psnr-hvsm JSON |
Version |
0.2.4
JSON |
| download |
home_page | None |
Summary | Accelerated implementations of the PSNR-HVS, PSNR-HVS-M, PSNR-HA and PSNR-HMA image metrics for NumPy and PyTorch |
upload_time | 2024-07-26 10:42:15 |
maintainer | None |
docs_url | None |
author | None |
requires_python | <4,>=3.7 |
license | MIT |
keywords |
psnr
hvs
video
image
metric
pytorch
|
VCS |
|
bugtrack_url |
|
requirements |
No requirements were recorded.
|
Travis-CI |
No Travis.
|
coveralls test coverage |
No coveralls.
|
# PSNR-HVS-M, PSNR-HA and PSNR-HMA metrics for NumPy and PyTorch
[![cibuildwheel](https://github.com/lyckantropen/psnr_hvsm/actions/workflows/build_wheels.yml/badge.svg)](https://github.com/lyckantropen/psnr_hvsm/actions)
[![python_versions](https://img.shields.io/pypi/pyversions/psnr_hvsm)](https://pypi.org/project/psnr-hvsm/)
[![pypi](https://img.shields.io/pypi/v/psnr_hvsm)](https://pypi.org/project/psnr-hvsm/)
[![license](https://img.shields.io/github/license/lyckantropen/psnr_hvsm)](https://github.com/lyckantropen/psnr_hvsm/blob/main/LICENSE)
Accelerated Python package for computing several image metrics based on human
perception with backends in NumPy, PyTorch and C++.
This is an implementation of the PSNR-HVS, PSNR-HVS-M, PSNR-HA and PSNR-HMA
metrics developed by
[Nikolay Ponomarenko](http://www.ponomarenko.info/psnrhvsm).
The values produced by this library have been cross-checked against the results
within the
[TID2013 dataset](https://www.sciencedirect.com/science/article/pii/S0923596514001490).
(See the folder [`tid2013_results`](tid2013_results).) The only difference is
that this library follows the common convention that PSNR for identical signals
equals 100.0.
_A miniscule discrepancy for PSNR-HMA (<0.01dB on average) is under
investigation._
## Bibliography
- [Egiazarian, Karen, et al. "New full-reference quality metrics based on HVS." Proceedings of the Second International Workshop on Video Processing and Quality Metrics. Vol. 4. 2006.](https://www.researchgate.net/profile/Vladimir_Lukin2/publication/251229783_A_NEW_FULL-REFERENCE_QUALITY_METRICS_BASED_ON_HVS/links/0046351f669a9c1869000000.pdf)
- [Ponomarenko, Nikolay, et al. "On between-coefficient contrast masking of DCT basis functions." Proceedings of the third international workshop on video processing and quality metrics. Vol. 4. 2007.](https://www.researchgate.net/profile/Vladimir-Lukin-4/publication/242309240_On_between-coefficient_contrast_masking_of_DCT_basis_functions/links/0c96052442be7c3176000000/On-between-coefficient-contrast-masking-of-DCT-basis-functions.pdf)
- [Ponomarenko, Nikolay, et al. "Modified image visual quality metrics for contrast change and mean shift accounting." 2011 11th International Conference The Experience of Designing and Application of CAD Systems in Microelectronics (CADSM). IEEE, 2011.](https://ponomarenko.info/papers/psnrhma.pdf)
## Installation
`psnr_hvsm` supports Python 3.7-3.12. Packages are distributed on PyPi. Be sure
to have an up-to-date pip to be able to install the correct packages on Linux:
```bash
python -m pip install --upgrade pip
```
```bash
pip install psnr_hvsm
```
With PyTorch support:
```bash
pip install psnr_hvsm[torch]
```
## Usage
### Command line
Command line support is an extra that pulls `imageio`:
```bash
pip install psnr_hvsm[command_line]
```
```bash
python -m psnr_hvsm original.png distorted.png
```
#### Choosing a backend
The backend can be set by setting the `PSNR_HVSM_BACKEND` environment variable.
Valid backends are:
- `numpy` - pure NumPy using `scipy.fft` for DCT
- `cpp` - C++ using FFTW3
- `torch` - PyTorch; install as `psnr_hvsm[torch]` to install PyTorch as well
```bash
export PSNR_HVSM_BACKEND=torch
python -m psnr_hvsm original.png distorted.png
```
The default device for PyTorch is `cuda` but it can be changed by setting the
`PSNR_HVSM_TORCH_DEVICE` environment variable.
### As a library
The function `psnr_hvs_hvsm` accepts images as single-channel floating-point
NumPy arrays. The images need to be normalised, i.e. the values need to be in
the range `[0,1]`. This can be achieved by converting the image to `float` and
dividing by the maximum value given the bit depth. For 8 bits per component this
is 255.
The images must be padded to a multiple of 8 in each dimension.
```python
from imageio import imread
from psnr_hvsm import psnr_hvs_hvsm, bt601ycbcr
image1 = imread('tests/baboon.png').astype(float) / 255
image2 = imread('tests/baboon_msk.png').astype(float) / 255
image1_y, *_ = bt601ycbcr(image1)
image2_y, *_ = bt601ycbcr(image2)
psnr_hvs, psnr_hvsm = psnr_hvs_hvsm(image1, image2)
print(psnr_hvs, psnr_hvsm)
```
```bash
34.427054505764424 51.64722121999962
```
If you need to measure PSNR-HVS and PSNR-HVS-M on an RGB image, you need to
convert it to an YUV colorspace and pass in only the luma component.
### PyTorch support
The PyTorch backend can be used for use with gradient descent algorithms and
computation on GPUs. In order to use the PyTorch backend, either install the
package with the `torch` extra:
```bash
pip install psnr_hvsm[torch]
```
If your PyTorch installation was manual, you need
[`torch-dct`](https://github.com/zh217/torch-dct) in order to use the PyTorch
backend:
```bash
pip install "torch-dct>=0.1.6"
```
An important distinction is that the functions that expect 3-channel input now
expect `(...,C,H,W)` format in the PyTorch implementation. The PyTorch backend
can be enabled by importing it directly from `psnr_hvsm.torch`:
```python
import torch
from imageio import imread
from psnr_hvsm.torch import psnr_hvs_hvsm, bt601ycbcr
image1 = imread('tests/baboon.png').astype(float) / 255
image2 = imread('tests/baboon_msk.png').astype(float) / 255
image1 = torch.tensor(image1, device='cuda').moveaxis(-1, -3) # convert to (N,C,H,W) format
image2 = torch.tensor(image2, device='cuda').moveaxis(-1, -3) # convert to (N,C,H,W) format
image1_y, *_ = bt601ycbcr(image1)
image2_y, *_ = bt601ycbcr(image2)
psnr_hvs, psnr_hvsm = psnr_hvs_hvsm(image1_y, image2_y)
```
Alternatively, set the `PSNR_HVSM_BACKEND` environment variable to `torch`:
```python
import os
os.environ['PSNR_HVSM_BACKEND'] = 'torch'
from psnr_hvsm import psnr_hvs_hvsm
# rest of code
# ...
```
#### Note on gradients
Some operations in the calculation of the HVS-M MSE lead to problems with the
gradient and therefore a parameter called `masking_epsilon` (defaulting to 0.0)
has been added to the PyTorch versions of `hvs_hvsm_mse_tiles`, `hvs_hvsm_mse`
and `psnr_hvs_hvsm`. Set it to a small value (determined by your own
experimentation) if you need the result of HVS-M for gradient descent.
### Computing metrics for the TID2013 dataset
If you have a copy of the
[TID2013 dataset](https://www.sciencedirect.com/science/article/pii/S0923596514001490),
you can re-verify the metrics for yourself:
```bash
python -m psnr_hvsm.tid2013_metrics D:\tid2013\ .\tid2013_results\
```
### Other exported functions
- `hvs_hvsm_mse_tiles` - compute HVS and HVS-M scores on all 8x8 tiles in the
images, returns an array of numbers
- `hvs_hvsm_mse` - compute average HVS and HVS-M scores
## Building
### Dependencies
`psnr_hvsm` has several dependencies:
- [FFTW3 >= 3.3.9](http://www.fftw.org/)
- [pybind11](https://github.com/pybind/pybind11)
- [xtensor](https://github.com/xtensor-stack/xtensor)
- [xtensor-python](https://github.com/xtensor-stack/xtensor-python)
FFTW3 is automatically resolved by CMake and the rest can be installed by
creating a `conda` environment using the provided YAML file:
```bash
conda env create -f psnr_hvsm-dev.yml
```
### Development mode
To install in development mode:
```bash
pip install --upgrade -r requirements.txt
```
### Creating Python wheel
```bash
pip install --upgrade -r requirements-build.txt
python setup.py bdist_wheel
```
### Running tests on different versions of Python using tox
```bash
pip install --upgrade -r requirements-tox.txt
tox --parallel auto
```
Raw data
{
"_id": null,
"home_page": null,
"name": "psnr-hvsm",
"maintainer": null,
"docs_url": null,
"requires_python": "<4,>=3.7",
"maintainer_email": null,
"keywords": "psnr hvs video image metric pytorch",
"author": null,
"author_email": "Karol Trojanowski <trojanowski.ifuj@gmail.com>",
"download_url": null,
"platform": null,
"description": "# PSNR-HVS-M, PSNR-HA and PSNR-HMA metrics for NumPy and PyTorch\n\n[![cibuildwheel](https://github.com/lyckantropen/psnr_hvsm/actions/workflows/build_wheels.yml/badge.svg)](https://github.com/lyckantropen/psnr_hvsm/actions)\n[![python_versions](https://img.shields.io/pypi/pyversions/psnr_hvsm)](https://pypi.org/project/psnr-hvsm/)\n[![pypi](https://img.shields.io/pypi/v/psnr_hvsm)](https://pypi.org/project/psnr-hvsm/)\n[![license](https://img.shields.io/github/license/lyckantropen/psnr_hvsm)](https://github.com/lyckantropen/psnr_hvsm/blob/main/LICENSE)\n\nAccelerated Python package for computing several image metrics based on human\nperception with backends in NumPy, PyTorch and C++.\n\nThis is an implementation of the PSNR-HVS, PSNR-HVS-M, PSNR-HA and PSNR-HMA\nmetrics developed by\n[Nikolay Ponomarenko](http://www.ponomarenko.info/psnrhvsm).\n\nThe values produced by this library have been cross-checked against the results\nwithin the\n[TID2013 dataset](https://www.sciencedirect.com/science/article/pii/S0923596514001490).\n(See the folder [`tid2013_results`](tid2013_results).) The only difference is\nthat this library follows the common convention that PSNR for identical signals\nequals 100.0.\n\n_A miniscule discrepancy for PSNR-HMA (<0.01dB on average) is under\ninvestigation._\n\n## Bibliography\n\n- [Egiazarian, Karen, et al. \"New full-reference quality metrics based on HVS.\" Proceedings of the Second International Workshop on Video Processing and Quality Metrics. Vol. 4. 2006.](https://www.researchgate.net/profile/Vladimir_Lukin2/publication/251229783_A_NEW_FULL-REFERENCE_QUALITY_METRICS_BASED_ON_HVS/links/0046351f669a9c1869000000.pdf)\n- [Ponomarenko, Nikolay, et al. \"On between-coefficient contrast masking of DCT basis functions.\" Proceedings of the third international workshop on video processing and quality metrics. Vol. 4. 2007.](https://www.researchgate.net/profile/Vladimir-Lukin-4/publication/242309240_On_between-coefficient_contrast_masking_of_DCT_basis_functions/links/0c96052442be7c3176000000/On-between-coefficient-contrast-masking-of-DCT-basis-functions.pdf)\n- [Ponomarenko, Nikolay, et al. \"Modified image visual quality metrics for contrast change and mean shift accounting.\" 2011 11th International Conference The Experience of Designing and Application of CAD Systems in Microelectronics (CADSM). IEEE, 2011.](https://ponomarenko.info/papers/psnrhma.pdf)\n\n## Installation\n\n`psnr_hvsm` supports Python 3.7-3.12. Packages are distributed on PyPi. Be sure\nto have an up-to-date pip to be able to install the correct packages on Linux:\n\n```bash\npython -m pip install --upgrade pip\n```\n\n```bash\npip install psnr_hvsm\n```\n\nWith PyTorch support:\n\n```bash\npip install psnr_hvsm[torch]\n```\n\n## Usage\n\n### Command line\n\nCommand line support is an extra that pulls `imageio`:\n\n```bash\npip install psnr_hvsm[command_line]\n```\n\n```bash\npython -m psnr_hvsm original.png distorted.png\n```\n\n#### Choosing a backend\n\nThe backend can be set by setting the `PSNR_HVSM_BACKEND` environment variable.\nValid backends are:\n\n- `numpy` - pure NumPy using `scipy.fft` for DCT\n- `cpp` - C++ using FFTW3\n- `torch` - PyTorch; install as `psnr_hvsm[torch]` to install PyTorch as well\n\n```bash\nexport PSNR_HVSM_BACKEND=torch\npython -m psnr_hvsm original.png distorted.png\n```\n\nThe default device for PyTorch is `cuda` but it can be changed by setting the\n`PSNR_HVSM_TORCH_DEVICE` environment variable.\n\n### As a library\n\nThe function `psnr_hvs_hvsm` accepts images as single-channel floating-point\nNumPy arrays. The images need to be normalised, i.e. the values need to be in\nthe range `[0,1]`. This can be achieved by converting the image to `float` and\ndividing by the maximum value given the bit depth. For 8 bits per component this\nis 255.\n\nThe images must be padded to a multiple of 8 in each dimension.\n\n```python\nfrom imageio import imread\nfrom psnr_hvsm import psnr_hvs_hvsm, bt601ycbcr\n\nimage1 = imread('tests/baboon.png').astype(float) / 255\nimage2 = imread('tests/baboon_msk.png').astype(float) / 255\n\nimage1_y, *_ = bt601ycbcr(image1)\nimage2_y, *_ = bt601ycbcr(image2)\n\npsnr_hvs, psnr_hvsm = psnr_hvs_hvsm(image1, image2)\n\nprint(psnr_hvs, psnr_hvsm)\n```\n\n```bash\n34.427054505764424 51.64722121999962\n```\n\nIf you need to measure PSNR-HVS and PSNR-HVS-M on an RGB image, you need to\nconvert it to an YUV colorspace and pass in only the luma component.\n\n### PyTorch support\n\nThe PyTorch backend can be used for use with gradient descent algorithms and\ncomputation on GPUs. In order to use the PyTorch backend, either install the\npackage with the `torch` extra:\n\n```bash\npip install psnr_hvsm[torch]\n```\n\nIf your PyTorch installation was manual, you need\n[`torch-dct`](https://github.com/zh217/torch-dct) in order to use the PyTorch\nbackend:\n\n```bash\npip install \"torch-dct>=0.1.6\"\n```\n\nAn important distinction is that the functions that expect 3-channel input now\nexpect `(...,C,H,W)` format in the PyTorch implementation. The PyTorch backend\ncan be enabled by importing it directly from `psnr_hvsm.torch`:\n\n```python\nimport torch\nfrom imageio import imread\nfrom psnr_hvsm.torch import psnr_hvs_hvsm, bt601ycbcr\n\nimage1 = imread('tests/baboon.png').astype(float) / 255\nimage2 = imread('tests/baboon_msk.png').astype(float) / 255\n\nimage1 = torch.tensor(image1, device='cuda').moveaxis(-1, -3) # convert to (N,C,H,W) format\nimage2 = torch.tensor(image2, device='cuda').moveaxis(-1, -3) # convert to (N,C,H,W) format\n\nimage1_y, *_ = bt601ycbcr(image1)\nimage2_y, *_ = bt601ycbcr(image2)\n\npsnr_hvs, psnr_hvsm = psnr_hvs_hvsm(image1_y, image2_y)\n```\n\nAlternatively, set the `PSNR_HVSM_BACKEND` environment variable to `torch`:\n\n```python\nimport os\nos.environ['PSNR_HVSM_BACKEND'] = 'torch'\n\nfrom psnr_hvsm import psnr_hvs_hvsm\n# rest of code\n# ...\n```\n\n#### Note on gradients\n\nSome operations in the calculation of the HVS-M MSE lead to problems with the\ngradient and therefore a parameter called `masking_epsilon` (defaulting to 0.0)\nhas been added to the PyTorch versions of `hvs_hvsm_mse_tiles`, `hvs_hvsm_mse`\nand `psnr_hvs_hvsm`. Set it to a small value (determined by your own\nexperimentation) if you need the result of HVS-M for gradient descent.\n\n### Computing metrics for the TID2013 dataset\n\nIf you have a copy of the\n[TID2013 dataset](https://www.sciencedirect.com/science/article/pii/S0923596514001490),\nyou can re-verify the metrics for yourself:\n\n```bash\npython -m psnr_hvsm.tid2013_metrics D:\\tid2013\\ .\\tid2013_results\\\n```\n\n### Other exported functions\n\n- `hvs_hvsm_mse_tiles` - compute HVS and HVS-M scores on all 8x8 tiles in the\n images, returns an array of numbers\n- `hvs_hvsm_mse` - compute average HVS and HVS-M scores\n\n## Building\n\n### Dependencies\n\n`psnr_hvsm` has several dependencies:\n\n- [FFTW3 >= 3.3.9](http://www.fftw.org/)\n- [pybind11](https://github.com/pybind/pybind11)\n- [xtensor](https://github.com/xtensor-stack/xtensor)\n- [xtensor-python](https://github.com/xtensor-stack/xtensor-python)\n\nFFTW3 is automatically resolved by CMake and the rest can be installed by\ncreating a `conda` environment using the provided YAML file:\n\n```bash\nconda env create -f psnr_hvsm-dev.yml\n```\n\n### Development mode\n\nTo install in development mode:\n\n```bash\npip install --upgrade -r requirements.txt\n```\n\n### Creating Python wheel\n\n```bash\npip install --upgrade -r requirements-build.txt\npython setup.py bdist_wheel\n```\n\n### Running tests on different versions of Python using tox\n\n```bash\npip install --upgrade -r requirements-tox.txt\ntox --parallel auto\n```\n",
"bugtrack_url": null,
"license": "MIT",
"summary": "Accelerated implementations of the PSNR-HVS, PSNR-HVS-M, PSNR-HA and PSNR-HMA image metrics for NumPy and PyTorch",
"version": "0.2.4",
"project_urls": {
"Homepage": "https://github.com/lyckantropen/psnr_hvsm"
},
"split_keywords": [
"psnr",
"hvs",
"video",
"image",
"metric",
"pytorch"
],
"urls": [
{
"comment_text": "",
"digests": {
"blake2b_256": "cc0b7937a9442b54319287a9e015e699d5537100aa669307629315bff227f2e4",
"md5": "b45154978ea2dec62157423be33b5b8e",
"sha256": "4cef163c5553fc6a2ce92f1bd4be198243059b6817fc322f1a6cac982976dfc8"
},
"downloads": -1,
"filename": "psnr_hvsm-0.2.4-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl",
"has_sig": false,
"md5_digest": "b45154978ea2dec62157423be33b5b8e",
"packagetype": "bdist_wheel",
"python_version": "cp310",
"requires_python": "<4,>=3.7",
"size": 5304049,
"upload_time": "2024-07-26T10:42:15",
"upload_time_iso_8601": "2024-07-26T10:42:15.227491Z",
"url": "https://files.pythonhosted.org/packages/cc/0b/7937a9442b54319287a9e015e699d5537100aa669307629315bff227f2e4/psnr_hvsm-0.2.4-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": "",
"digests": {
"blake2b_256": "4fd111fcdcbbb34f2eb2050569950610fdcbd3a6ef99052f53909ab8985d23e1",
"md5": "e5252bcf1f2316cf6a462b10a7fe7ef3",
"sha256": "0d1a411cc77fd7171ade6781c2240aa5433838451452ca9023b8770461ddb897"
},
"downloads": -1,
"filename": "psnr_hvsm-0.2.4-cp310-cp310-win_amd64.whl",
"has_sig": false,
"md5_digest": "e5252bcf1f2316cf6a462b10a7fe7ef3",
"packagetype": "bdist_wheel",
"python_version": "cp310",
"requires_python": "<4,>=3.7",
"size": 2436400,
"upload_time": "2024-07-26T10:42:16",
"upload_time_iso_8601": "2024-07-26T10:42:16.975797Z",
"url": "https://files.pythonhosted.org/packages/4f/d1/11fcdcbbb34f2eb2050569950610fdcbd3a6ef99052f53909ab8985d23e1/psnr_hvsm-0.2.4-cp310-cp310-win_amd64.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": "",
"digests": {
"blake2b_256": "6a6ee10ee109d79d895721569bdbabf10f8b777f15a5bdf34cf6cab28635dd5c",
"md5": "fa5afa07774c83e632f44db4d9469bb5",
"sha256": "65992a881c414633c442cecb4c99a120453efab210c1d0876dd1e2702a2119fc"
},
"downloads": -1,
"filename": "psnr_hvsm-0.2.4-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl",
"has_sig": false,
"md5_digest": "fa5afa07774c83e632f44db4d9469bb5",
"packagetype": "bdist_wheel",
"python_version": "cp311",
"requires_python": "<4,>=3.7",
"size": 5308671,
"upload_time": "2024-07-26T10:42:19",
"upload_time_iso_8601": "2024-07-26T10:42:19.169926Z",
"url": "https://files.pythonhosted.org/packages/6a/6e/e10ee109d79d895721569bdbabf10f8b777f15a5bdf34cf6cab28635dd5c/psnr_hvsm-0.2.4-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": "",
"digests": {
"blake2b_256": "ec7f2053425b960f4a8538c065a99f9e29b8214d66e2a27071f30b0276992a00",
"md5": "e43bfb8242030f619e5a67b444666582",
"sha256": "bc68ad39bf2f159fba17fecb824fda3a3ed7fd570a2fb2abf8525591bae646b4"
},
"downloads": -1,
"filename": "psnr_hvsm-0.2.4-cp311-cp311-win_amd64.whl",
"has_sig": false,
"md5_digest": "e43bfb8242030f619e5a67b444666582",
"packagetype": "bdist_wheel",
"python_version": "cp311",
"requires_python": "<4,>=3.7",
"size": 2437378,
"upload_time": "2024-07-26T10:42:21",
"upload_time_iso_8601": "2024-07-26T10:42:21.280319Z",
"url": "https://files.pythonhosted.org/packages/ec/7f/2053425b960f4a8538c065a99f9e29b8214d66e2a27071f30b0276992a00/psnr_hvsm-0.2.4-cp311-cp311-win_amd64.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": "",
"digests": {
"blake2b_256": "23ba17d96d3a35e87127d6ac2af68889356515f6661ff1d695b53c2369a8d5e1",
"md5": "f38e13f0eb77a4378262858ee45c2899",
"sha256": "63e9b478a796e8484de9039d9abd500e3885180498ac5bc47848f9d10b620a3f"
},
"downloads": -1,
"filename": "psnr_hvsm-0.2.4-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl",
"has_sig": false,
"md5_digest": "f38e13f0eb77a4378262858ee45c2899",
"packagetype": "bdist_wheel",
"python_version": "cp312",
"requires_python": "<4,>=3.7",
"size": 5305344,
"upload_time": "2024-07-26T10:42:23",
"upload_time_iso_8601": "2024-07-26T10:42:23.690760Z",
"url": "https://files.pythonhosted.org/packages/23/ba/17d96d3a35e87127d6ac2af68889356515f6661ff1d695b53c2369a8d5e1/psnr_hvsm-0.2.4-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": "",
"digests": {
"blake2b_256": "5da7e828d5ee7f309681ac0b91aa7a3763aeeebc603c04e626f964dc02e90b9a",
"md5": "a6a702d4c3601abac12b478456f41928",
"sha256": "09a686fd2ef452340624451273ad5c211eb80d23888b63554b40781a26c441b6"
},
"downloads": -1,
"filename": "psnr_hvsm-0.2.4-cp312-cp312-win_amd64.whl",
"has_sig": false,
"md5_digest": "a6a702d4c3601abac12b478456f41928",
"packagetype": "bdist_wheel",
"python_version": "cp312",
"requires_python": "<4,>=3.7",
"size": 2437671,
"upload_time": "2024-07-26T10:42:25",
"upload_time_iso_8601": "2024-07-26T10:42:25.385526Z",
"url": "https://files.pythonhosted.org/packages/5d/a7/e828d5ee7f309681ac0b91aa7a3763aeeebc603c04e626f964dc02e90b9a/psnr_hvsm-0.2.4-cp312-cp312-win_amd64.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": "",
"digests": {
"blake2b_256": "cb7177383430ae9a67f8911aec45683d5f75c22fa27272948ec90d89d4b42272",
"md5": "1594f76f309803b517bddb8cd153cf57",
"sha256": "a25f97cce647f6900782058ed448820ef12dc56cebb38e8d17ce008d8b918573"
},
"downloads": -1,
"filename": "psnr_hvsm-0.2.4-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl",
"has_sig": false,
"md5_digest": "1594f76f309803b517bddb8cd153cf57",
"packagetype": "bdist_wheel",
"python_version": "cp37",
"requires_python": "<4,>=3.7",
"size": 5303561,
"upload_time": "2024-07-26T10:42:26",
"upload_time_iso_8601": "2024-07-26T10:42:26.940407Z",
"url": "https://files.pythonhosted.org/packages/cb/71/77383430ae9a67f8911aec45683d5f75c22fa27272948ec90d89d4b42272/psnr_hvsm-0.2.4-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": "",
"digests": {
"blake2b_256": "c489f6d4d586192afded56f053e83b662240bb193d8f0af0f9cd7674c2e091df",
"md5": "099139bd3325972174257a14599ada57",
"sha256": "9cb3728955e2c384769cc0481140bc30056911cefbb34f0cd44c7926e62834d1"
},
"downloads": -1,
"filename": "psnr_hvsm-0.2.4-cp37-cp37m-win_amd64.whl",
"has_sig": false,
"md5_digest": "099139bd3325972174257a14599ada57",
"packagetype": "bdist_wheel",
"python_version": "cp37",
"requires_python": "<4,>=3.7",
"size": 2436540,
"upload_time": "2024-07-26T10:42:29",
"upload_time_iso_8601": "2024-07-26T10:42:29.795858Z",
"url": "https://files.pythonhosted.org/packages/c4/89/f6d4d586192afded56f053e83b662240bb193d8f0af0f9cd7674c2e091df/psnr_hvsm-0.2.4-cp37-cp37m-win_amd64.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": "",
"digests": {
"blake2b_256": "1ebde70feb0d82f74efd5bbe297fbde5aab02deb10811dc4c16e9c51665290e5",
"md5": "6ed72f6d1ab5888b467f3970354673bf",
"sha256": "99582fb362aa893940ebb65014a0ddd05885096ae1cfd7527dd03aff60e6cda1"
},
"downloads": -1,
"filename": "psnr_hvsm-0.2.4-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl",
"has_sig": false,
"md5_digest": "6ed72f6d1ab5888b467f3970354673bf",
"packagetype": "bdist_wheel",
"python_version": "cp38",
"requires_python": "<4,>=3.7",
"size": 5304275,
"upload_time": "2024-07-26T10:42:32",
"upload_time_iso_8601": "2024-07-26T10:42:32.925122Z",
"url": "https://files.pythonhosted.org/packages/1e/bd/e70feb0d82f74efd5bbe297fbde5aab02deb10811dc4c16e9c51665290e5/psnr_hvsm-0.2.4-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": "",
"digests": {
"blake2b_256": "c2923b75b58d96e3a5a21c1af1d60ceeabd84460e9de60ce64d39e77969531d0",
"md5": "8d11769d5ea9a94535a11f64b4fe8eea",
"sha256": "be25baf7e23c3dad6350f6af694780eb013366035241617ee5bd013668448fe6"
},
"downloads": -1,
"filename": "psnr_hvsm-0.2.4-cp38-cp38-win_amd64.whl",
"has_sig": false,
"md5_digest": "8d11769d5ea9a94535a11f64b4fe8eea",
"packagetype": "bdist_wheel",
"python_version": "cp38",
"requires_python": "<4,>=3.7",
"size": 2436494,
"upload_time": "2024-07-26T10:42:34",
"upload_time_iso_8601": "2024-07-26T10:42:34.793326Z",
"url": "https://files.pythonhosted.org/packages/c2/92/3b75b58d96e3a5a21c1af1d60ceeabd84460e9de60ce64d39e77969531d0/psnr_hvsm-0.2.4-cp38-cp38-win_amd64.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": "",
"digests": {
"blake2b_256": "61964b2792a07f1b8735cf554fb86915d477b30410483ea13a67ca1fa88b4a93",
"md5": "7e5e2f30794c395f6200e34840dce34d",
"sha256": "8780f941b0fca8af150321e4337cbe258f5e022e246fa0f5ac014877e5baa504"
},
"downloads": -1,
"filename": "psnr_hvsm-0.2.4-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl",
"has_sig": false,
"md5_digest": "7e5e2f30794c395f6200e34840dce34d",
"packagetype": "bdist_wheel",
"python_version": "cp39",
"requires_python": "<4,>=3.7",
"size": 5305581,
"upload_time": "2024-07-26T10:42:36",
"upload_time_iso_8601": "2024-07-26T10:42:36.413924Z",
"url": "https://files.pythonhosted.org/packages/61/96/4b2792a07f1b8735cf554fb86915d477b30410483ea13a67ca1fa88b4a93/psnr_hvsm-0.2.4-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": "",
"digests": {
"blake2b_256": "ff2444bfe99588b148cb1bbb5244db4e6e6cbb7e300dbd94f74770377020db53",
"md5": "694019f9918fc423362863be78a533c3",
"sha256": "e4a91ee6ab72c26805d693d5562378049c4b5df5ee0d26f1e9fc2d3ca258ba9c"
},
"downloads": -1,
"filename": "psnr_hvsm-0.2.4-cp39-cp39-win_amd64.whl",
"has_sig": false,
"md5_digest": "694019f9918fc423362863be78a533c3",
"packagetype": "bdist_wheel",
"python_version": "cp39",
"requires_python": "<4,>=3.7",
"size": 2436107,
"upload_time": "2024-07-26T10:42:37",
"upload_time_iso_8601": "2024-07-26T10:42:37.998888Z",
"url": "https://files.pythonhosted.org/packages/ff/24/44bfe99588b148cb1bbb5244db4e6e6cbb7e300dbd94f74770377020db53/psnr_hvsm-0.2.4-cp39-cp39-win_amd64.whl",
"yanked": false,
"yanked_reason": null
}
],
"upload_time": "2024-07-26 10:42:15",
"github": true,
"gitlab": false,
"bitbucket": false,
"codeberg": false,
"github_user": "lyckantropen",
"github_project": "psnr_hvsm",
"travis_ci": false,
"coveralls": false,
"github_actions": true,
"requirements": [],
"tox": true,
"lcname": "psnr-hvsm"
}