Zkousim k zjisteni rozmazani imagemagick, je to o hodne pomalejsi, ale vysledky vypadaji lepe
import os
import subprocess
# Cesta k složce se vstupními obrázky
input_folder = '/home/uziv/TESTY/IN'
# Cesta k výstupní složce
output_folder = '/home/uziv/TESTY/OUT'
# Nastavení prahové hodnoty pro detekci rozmazání
THRESHOLD_BLUR = 0.1
# Krok 1: Načtení obrázků a detekce rozmazání
for file_name in os.listdir(input_folder):
    # Zkontrolujeme, zda se jedná o soubor s obrázkem
    if file_name.lower().endswith(('.jpg', '.jpeg', '.png', '.bmp')):
        input_path = os.path.join(input_folder, file_name)
        output_path = os.path.join(output_folder, file_name)
        # Spuštění příkazu Identify pro zjištění velikosti obrázku
        identify_output = subprocess.check_output(['identify', '-format', '%w,%h', input_path])
        width, height = identify_output.decode().split(',')
        # Spuštění příkazu Convolve pro získání konvoluce obrázku s Gaussovým jádrem
        convolve_output = subprocess.check_output(['convert', input_path, '-colorspace', 'gray', '-define', 'convolve:scale=1.5', '-morphology', 'Convolve', 'Gaussian:0x3', '-format', '%[fx:maxima.mean]', 'info:'])
        maxima_mean = float(convolve_output.decode())
        # Vypočítání průměru a směrodatné odchylky z gradientů vodorovného a svislého směru
        sobel_output = subprocess.check_output(['convert', input_path, '-colorspace', 'gray', '-define', 'convolve:scale=1.5', '-define', 'convolve:normalize=false', '-morphology', 'Convolve', 'Sobel:0x1', '-format', '%[fx:mean],%[fx:standard_deviation]', 'info:'])
        sobel_mean, sobel_std = map(float, sobel_output.decode().split(','))
        # Pokud je hodnota maximálního průměru gradientů menší než prahová hodnota,
        # obrázek se považuje za rozmazaný a přesune se do složky
        if maxima_mean < THRESHOLD_BLUR:
            output_subfolder = os.path.join(output_folder, 'rozmazane')
        else:
            output_subfolder = os.path.join(output_folder, 'ostre')
        if not os.path.exists(output_subfolder):
            os.makedirs(output_subfolder)
        # Uložíme výsledný obrázek do příslušné složky
        output_path = os.path.join(output_subfolder, file_name)
        os.replace(input_path, output_path)
        print(f"Obrázek {file_name} byl přesunut do složky {output_subfolder}.")
    else:
        print(f"Soubor {file_name} není obrázek, přeskočen.")