Mail.ruПочтаМой МирОдноклассникиВКонтактеИгрыЗнакомстваНовостиКалендарьОблакоЗаметкиВсе проекты

Помогите с распознаванием лиц | Python

Артем М Профи (505), открыт 1 неделю назад
есть часть кода распознавания лиц, надо для его улучшения высоту и ширину для лучшего распознавания уменьшить, чтоб лишних факторов меньше было
              frameGray=cv2.cvtColor(frame, cv2.COLOR_BGR2GRAY) 

faces = face_detector.detectMultiScale(
frameGray, # The grayscale frame to detect
scaleFactor=1.1,# how much the image size is reduced at each image scale-10% reduction
minNeighbors=4, # how many neighbors each candidate rectangle should have to retain it
minSize=(125, 125)# Minimum possible object size. Objects smaller than this size are ignored.
)
for(x,y,w,h) in faces:
namepos=(x+5,y-5)
confpos=(x+5,y+h-5)

cv2.rectangle(frame, (x,y), (x+w,y+h), boxColor, 3)

id, confidence = recognizer.predict(frameGray[y:y+h,x:x+w])
код брал тут github
2 ответа
Александор Заградский Мудрец (14119) 1 неделю назад
Попробуйте уменьшить значение параметра minSize до (50, 50) или (75, 75)
Артем МПрофи (505) 1 неделю назад
это минимальный размер лица на фото
dmilor Мастер (2397) 1 неделю назад
  1. Изменение размера кадра: Прежде чем преобразовать кадр в оттенки серого и обнаруживать лица, вы можете уменьшить размер кадра. Это уменьшит количество данных для обработки и может улучшить производительность, особенно на медленных устройствах.
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)
  1. Обнаружение лиц на измененном кадре:
Продолжите использовать detectMultiScale с возможно адаптированными параметрами minSize, если уменьшение размера кадра сделало лица слишком маленькими.

faces = face_detector.detectMultiScale(
frameGray,
scaleFactor=1.1,
minNeighbors=4,
minSize=(60, 60) # Это значение может потребовать корректировки
)
  1. Отображение результатов:
При рисовании прямоугольников вокруг лиц учитывайте измененный масштаб.

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

Эти изменения помогут улучшить распознавание лиц за счет уменьшения размера изображения
, что уменьшает количество лишних деталей и ускоряет обработку.
Похожие вопросы