import cv2
def test_face_detection(image_path, scale=1.1, neighbors=5):
# Загрузка каскада
face_cascade = cv2.CascadeClassifier(cv2.data.haarcascades + 'haarcascade_frontalface_default.xml')
# Загрузка и предобработка
img = cv2.imread(image_path)
if img is None:
print(f"Файл {image_path} не найден!")
return
gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
# Поиск лиц с настраиваемыми параметрами
faces = face_cascade.detectMultiScale(
gray,
scaleFactor=scale,
minNeighbors=neighbors,
minSize=(30, 30)
)
# Отрисовка результатов
for (x, y, w, h) in faces:
cv2.rectangle(img, (x, y), (x + w, y + h), (0, 255, 0), 2)
print(f"Тест файла '{image_path}':")
print(f"- Использованы параметры: scaleFactor={scale}, minNeighbors={neighbors}")
print(f"- Найдено лиц: {len(faces)}")
print("-" * 30)
cv2.imshow(f"Result: {image_path}", img)
cv2.waitKey(0)
cv2.destroyAllWindows()
# КОРРЕКТНОЕ ТЕСТИРОВАНИЕ
# 1. Тест на одном лице
test_face_detection('one_face.jpg', scale=1.1, neighbors=5)
# 2. Тест на нескольких лицах (попробуем разные параметры, если лица не все найдены)
test_face_detection('multi_faces.jpg', scale=1.1, neighbors=5)
# Если на групповом фото лишние квадраты — увеличь neighbors (например, до 8)
# Если лица пропущены — уменьши scaleFactor (например, до 1.05)