Optimalizace
import cv2
import os
# vstupni a vystupni slozky
INPUT_DIR = 'E:\\aaa\\aaa\\aaa'
OUTPUT_DIR_OK = 'E:\\aaa\\aaa\\bb'
OUTPUT_DIR_ROZMAZANE = 'E:\\aaa\\aaa\\cc'
# inicializace kaskad pro detekci obliceju a tel
face_cascade = cv2.CascadeClassifier('C:\\python\\Lib\\site-packages\\cv2\\data\\haarcascade_frontalface_default.xml')
body_cascade = cv2.CascadeClassifier('C:\\python\\Lib\\site-packages\\cv2\\data\\haarcascade_fullbody.xml')
# funkce pro detekci rozmazani obrazku
def is_blurry(img):
gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
laplacian_var = cv2.Laplacian(gray, cv2.CV_64F).var()
canny_var = cv2.Canny(gray, 100, 200).var()
contrast = cv2.meanStdDev(gray)[1][0][0]
return laplacian_var < 40 or canny_var < 20 or contrast < 25
# funkce pro detekci obliceju a tel v obrazku
def detect_faces(img):
gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
faces = face_cascade.detectMultiScale(gray, 1.3, 5)
bodies = body_cascade.detectMultiScale(gray, 1.3, 5)
return (len(faces) > 0) or (len(bodies) > 0)
# funkce pro zpracovani jednoho souboru
def process_file(file_path):
img = cv2.imread(file_path)
if is_blurry(img) or not detect_faces(img):
output_path = os.path.join(OUTPUT_DIR_ROZMAZANE, os.path.basename(file_path))
os.replace(file_path, output_path)
print(f"Soubor {file_path} byl presunut do adresare {OUTPUT_DIR_ROZMAZANE} kvuli rozmazanym oblicejum nebo telum.")
else:
output_path = os.path.join(OUTPUT_DIR_OK, os.path.basename(file_path))
os.replace(file_path, output_path)
print(f"Soubor {file_path} byl presunut do adresare {OUTPUT_DIR_OK}.")
# funkce pro zpracovani celeho adresare
def process_dir(input_dir):
for root, dirs, files in os.walk(input_dir):
for file in files:
if file.lower().endswith(('.jpg', '.png', '.bmp')):
file_path = os.path.join(root, file)
process_file(file_path)
# zpracovani vstupniho adresare
if __name__ == "__main__":
if not os.path.exists(OUTPUT_DIR_OK):
os.makedirs(OUTPUT_DIR_OK)
if not os.path.exists(OUTPUT_DIR_ROZMAZANE):
os.makedirs(OUTPUT_DIR_ROZMAZANE)
process_dir(INPUT_DIR)
print