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.")