- Изменение размера кадра: Прежде чем преобразовать кадр в оттенки серого и обнаруживать лица, вы можете уменьшить размер кадра. Это уменьшит количество данных для обработки и может улучшить производительность, особенно на медленных устройствах.
import cv2
# Предположим, что 'frame' - это ваш исходный кадр
scale_percent = 50 # Процент от исходного размера
width = int(frame.shape[1] * scale_percent / 100)
height = int(frame.shape[0] * scale_percent / 100)
dim = (width, height)
# Изменение размера кадра
resized = cv2.resize(frame, dim, interpolation=cv2.INTER_AREA)
# Преобразование в оттенки серого
frameGray = cv2.cvtColor(resized, cv2.COLOR_BGR2GRAY)
- Обнаружение лиц на измененном кадре:
Продолжите использовать detectMultiScale с возможно адаптированными параметрами minSize, если уменьшение размера кадра сделало лица слишком маленькими.
faces = face_detector.detectMultiScale(
frameGray,
scaleFactor=1.1,
minNeighbors=4,
minSize=(60, 60) # Это значение может потребовать корректировки
)
- Отображение результатов:
При рисовании прямоугольников вокруг лиц учитывайте измененный масштаб.
for (x, y, w, h) in faces:
namepos = (x + 5, y - 5)
confpos = (x + 5, y + h - 5)
# Масштабирование координат для отображения на исходном кадре
x, y, w, h = x * 100/scale_percent, y * 100/scale_percent, w * 100/scale_percent, h * 100/scale_percent
cv2.rectangle(frame, (int(x), int(y)), (int(x + w), int(y + h)), boxColor, 3)
id, confidence = recognizer.predict(cv2.resize(frameGray[y:y+h, x:x+w], (w, h)))
Эти изменения помогут улучшить распознавание лиц за счет уменьшения размера изображения
, что уменьшает количество лишних деталей и ускоряет обработку.