• XSS.stack #1 – первый литературный журнал от юзеров форума

использование ИИ

xaba

CD-диск
Пользователь
Регистрация
02.04.2023
Сообщения
10
Реакции
2
У нас есть ИИ, написаный на Python который работает на принципе конволюционной нейронной сети, и должен служить для улучшения качества видео. Но встаёт вопрос как его применить после обучения

Python:
import cv2
import os
import tensorflow as tf
import numpy as np
from tensorflow import keras
from keras.layers import Conv2D, UpSampling2D, Input
from keras.models import Model
from keras.optimizers import Adam
from keras.losses import MeanSquaredError
from keras.callbacks import ModelCheckpoint

def create_super_resolution_model(input_shape=(144, 256, 3)):
    input_img = Input(shape=input_shape)

    # Сверточные слои для извлечения признаков
    x = Conv2D(64, (3, 3), activation='relu', padding='same')(input_img)
    x = Conv2D(64, (3, 3), activation='relu', padding='same')(x)
    
    # Увеличение разрешения изображения
    x = UpSampling2D((2, 2))(x)
    
    # Еще несколько сверточных слоев
    x = Conv2D(64, (3, 3), activation='relu', padding='same')(x)
    x = Conv2D(64, (3, 3), activation='relu', padding='same')(x)
    x = UpSampling2D((2, 2))(x)
    
    # Выходной слой с тремя каналами (RGB)
    x = Conv2D(3, (3, 3), activation='relu', padding='same')(x)
    
    # Создание модели
    model = Model(inputs=input_img, outputs=x)
    return model

def convert_video_to_images(video_path, output_folder):
    # Проверяем, существует ли папка для сохранения изображений, и создаем ее, если она не существует
    if not os.path.exists(output_folder):
        os.makedirs(output_folder)

    # Открываем видеофайл
    cap = cv2.VideoCapture(video_path)
    
    frame_count = 0

    # Перебираем кадры видео
    while True:
        ret, frame = cap.read()
        
        # Если кадры закончились, завершаем цикл
        if not ret:
            break

        # Сохраняем кадр как изображение .jpg
        img_filename = os.path.join(output_folder, f"frame_{frame_count:04d}.jpg")
        cv2.imwrite(img_filename, frame)

        frame_count += 1

    # Закрываем видеофайл
    cap.release()

def load_and_preprocess_images(folder_path):
    images = []
    for filename in sorted(os.listdir(folder_path)):
        if filename.endswith(".jpg"):
            img_path = os.path.join(folder_path, filename)
            img = cv2.imread(img_path)
            img = cv2.resize(img, (256, 144))  # Масштабируем изображение
            images.append(img)
    return np.array(images)


# Путь к видеофайлу
video_path = '63_480.mp4'

# Папка для сохранения изображений
output_folder = 'frames'

# Папка с предобработанными изображениями
image_folder = 'preprocessed_images'

# Создаем модель
model = create_super_resolution_model()

# Компилируем модель
model.compile(optimizer=Adam(learning_rate=0.001), loss=MeanSquaredError())

# Создаем папку для сохранения весов модели
if not os.path.exists('model_weights'):
    os.makedirs('model_weights')

# Создаем колбэк для сохранения весов модели
checkpoint_callback = ModelCheckpoint(
    'model_weights/super_resolution_model_weights.h5',
    monitor='val_loss',
    save_best_only=True,
    save_weights_only=True,
    mode='min',
    verbose=1
)

# Преобразуем видео в изображения
convert_video_to_images(video_path, output_folder)

# Предобрабатываем изображения и загружаем их
preprocessed_images = load_and_preprocess_images(output_folder)

# Нормализуем изображения к диапазону [0, 1]
preprocessed_images = preprocessed_images / 255.0

# Обучаем модель на предобработанных изображениях
history = model.fit(
    preprocessed_images,
    preprocessed_images,
    batch_size=16,
    epochs=50,  # Установите желаемое количество эпох
    validation_split=0.1,
    callbacks=[checkpoint_callback]
)

# Сохраняем обученную модель
model.save('super_resolution_model.h5')
 
Я пока не запускал код и не тестил, но есть вопрос чисто такой теоретический и практический от скептика. А как она будет улучшать изображение? Просто если даже взять допустим видео низкого качества и прогнать через эту нейронку, то она просто увеличит изображение, но разные графические артефакты, которые есть в картинке останутся все равно (от низкого битрейта и ап конверта постоянного например ну или к примеру снято плохо) и она их не уберет вообще никак, ну и при просмотре будет это видно.

Почему я так говорю, есть просто опыт в этом деле определенный.

Ну если брать вообще в целом можно использовать чтобы конвертировать файлы разные к примеру под нужды пользователей чисто теоретически, но функционал надо расширять если дело касается видео например.
 


Напишите ответ...
  • Вставить:
Прикрепить файлы
Верх