Ошибка с типом данных float в numpy

Возникла проблема при создании кода по теме метрик качества видео. Возникает ошибка с типом данных float в numpy. Код написан в colab, там же видна попытка установить версию 1.10 numpy - увы, затея так себе. В колабе нельзя выбрать конкретную версию библиотеки, даже если установлена 1.10, обработка идет с последней версией.
Код:

# Установка необходимых библиотек
!pip install scikit-video scikit-image numpy==1.10.1 openpyxl
 
import skvideo.io
import skvideo.measure
from skimage.metrics import peak_signal_noise_ratio as psnr
from skimage.metrics import structural_similarity as ssim
from skimage import img_as_float
import numpy as np
 
def calculate_metrics(ref_video_path, dist_video_path):
    # Загрузка видеофайлов
    try:
        ref_video = skvideo.io.vread(ref_video_path)
        dist_video = skvideo.io.vread(dist_video_path)
    except Exception as e:
        print(f"Ошибка при загрузке видеофайлов: {e}")
        return None, None, None, None
 
    # Проверка, что видео имеют одинаковую длину
    if ref_video.shape != dist_video.shape:
        print("Видео должны иметь одинаковую форму!")
        return None, None, None, None
 
    num_frames = ref_video.shape[0]
 
    psnr_values = []
    ssim_values = []
 
    for i in range(num_frames):
        ref_frame = img_as_float(ref_video[i])
        dist_frame = img_as_float(dist_video[i])
 
        try:
            # Рассчет PSNR
            psnr_value = psnr(ref_frame, dist_frame, data_range=ref_frame.max() - ref_frame.min())
            psnr_values.append(psnr_value)
 
            # Рассчет SSIM
            ssim_value = ssim(ref_frame, dist_frame, multichannel=True, data_range=ref_frame.max() - ref_frame.min())
            ssim_values.append(ssim_value)
        except Exception as e:
            print(f"Ошибка при расчете метрик PSNR/SSIM для кадра {i}: {e}")
            return None, None, None, None
 
    # Средние значения PSNR и SSIM по всем кадрам
    avg_psnr = np.mean(psnr_values)
    avg_ssim = np.mean(ssim_values)
 
    try:
        # Рассчет NIQE и BRISQUE
        niqe_values = [skvideo.measure.niqe(dist_frame) for dist_frame in dist_video]
        brisque_values = [skvideo.measure.brisque(dist_frame) for dist_frame in dist_video]
 
        niqe_value = np.mean(niqe_values)
        brisque_value = np.mean(brisque_values)
    except Exception as e:
        print(f"Ошибка при расчете метрик NIQE/BRISQUE: {e}")
        return avg_psnr, avg_ssim, None, None
 
    return avg_psnr, avg_ssim, niqe_value, brisque_value
 
# Пример использования функции
ref_video_path = "/content/drive/MyDrive/Colab Notebooks/output_noisy_video.mp4"
dist_video_path = "/content/drive/MyDrive/Colab Notebooks/output_gray_video.mp4"
 
metrics = calculate_metrics(ref_video_path, dist_video_path)
 
if metrics:
    psnr_value, ssim_value, niqe_value, brisque_value = metrics
    print(f"PSNR: {psnr_value}")
    print(f"SSIM: {ssim_value}")
    print(f"NIQE: {niqe_value}")
    print(f"BRISQUE: {brisque_value}")
else:
    print("Не удалось рассчитать метрики.")

Выдает ошибку следующего рода:

module 'numpy' has no attribute 'float'. np.float was a deprecated alias for the builtin float. To avoid this error in existing code, use float by itself. Doing this will not modify any behavior and is safe. If you specifically wanted the numpy scalar type, use np.float64 here. The aliases was originally deprecated in NumPy 1.20; for more details and guidance see the original release note at:

Часть кода с PSNR и SSIM работает, проблемы возникают при чтении видео и обработке других метрик. Полагаю, проблемы в совместимости версий numpy и skvideo. В pycharm код в принципе не работает - оно попросту не видит файл и выдает странную ошибку.


Ответы (0 шт):