Уведомления

Группа в Telegram: @pythonsu

#1 Окт. 20, 2012 16:15:58

sp3
От:
Зарегистрирован: 2010-01-12
Сообщения: 405
Репутация: +  18  -
Профиль   Отправить e-mail  

Распознавание лиц

Задача:
В видео потоке выделить лица людей и идентифицировать их по базе образцов. При чем неизвестные лица не должны приниматься за свои.

Первая часть решается просто: OpenCV HaarDetectObjects,
А вот идентификацию как сделать?

В этом проекте используется алгоритм SVM, что значит такого понятия как “неизвестные” в нем нет. Любое лицо идентифицируется как одно из образцов.

Нейронные сети? Какие использовать?



Офлайн

#2 Окт. 21, 2012 11:44:36

doza_and
От:
Зарегистрирован: 2010-08-15
Сообщения: 4138
Репутация: +  252  -
Профиль   Отправить e-mail  

Распознавание лиц

sp3
неизвестные лица не должны приниматься за свои
В такой постановке задача скорее всего неразрешима, как впрочем и безошибочная идентификация своих лиц.
Нейросети для решения аналогичных задачек не использовал.
После процедуры редукции входного пространства параметров вместо нейросети применял http://pypi.python.org/pypi/Pycluster, Отделение неизвестных образцов осуществлялось путем сравнения нормы отклонения текущей реализации от наилучшего образца и среднеквадратичного отклонения при предъявлении правильного образца. Детали процесса принятия решения зависят от принятой модели ущерба от ошибок первого и второго рода.

см например http://www.dissercat.com/content/razrabotka-algoritmov-identifikatsii-sostoyaniya-reaktornoi-ustanovki-vver-1000-s-ispolzovan



Офлайн

#3 Окт. 22, 2012 11:31:42

sp3
От:
Зарегистрирован: 2010-01-12
Сообщения: 405
Репутация: +  18  -
Профиль   Отправить e-mail  

Распознавание лиц

Офлайн

#4 Окт. 22, 2012 20:20:16

doza_and
От:
Зарегистрирован: 2010-08-15
Сообщения: 4138
Репутация: +  252  -
Профиль   Отправить e-mail  

Распознавание лиц

Я могу у автора диссер взять. Но вы определитесь. Тут можно пробовать собрать все из кирпичиков, особо не заморачиваясь, или сделать все как надо при этом вгрызаясь в гранит науки. Диссер имеет смысл брать если вы идете по второму пути.



Офлайн

#5 Окт. 22, 2012 22:31:42

sp3
От:
Зарегистрирован: 2010-01-12
Сообщения: 405
Репутация: +  18  -
Профиль   Отправить e-mail  

Распознавание лиц

Скорее первый вариант. Об науку я же пару зубов сломал, теперь нет желания и времени это продолжать :)
Проект больше фановый, чем научный. Если из 10 образцов 6 определится правильно, то это будет отлично.

ps. Диссертация вряд ли мне поможет, я скорее всего залипну на первой странице.



Отредактировано sp3 (Окт. 22, 2012 22:34:31)

Офлайн

#6 Окт. 23, 2012 20:12:32

doza_and
От:
Зарегистрирован: 2010-08-15
Сообщения: 4138
Репутация: +  252  -
Профиль   Отправить e-mail  

Распознавание лиц

sp3
Диссертация вряд ли мне поможет
Оки я спрошу человека который сейчас делает проект оценка состояния оператора - это детектирование лица и по параметрам изображения оценивает состояние человека. Если он будет не против кину в личку его email. Вместе обычно веселее такие штуки делать.



Офлайн

#7 Окт. 23, 2012 21:56:56

sp3
От:
Зарегистрирован: 2010-01-12
Сообщения: 405
Репутация: +  18  -
Профиль   Отправить e-mail  

Распознавание лиц

Было бы не плохо.



Офлайн

#8 Март 26, 2013 08:33:00

mrgloom
От:
Зарегистрирован: 2010-07-22
Сообщения: 93
Репутация: +  0  -
Профиль   Отправить e-mail  

Распознавание лиц

SVM там скорее используют для отделения лиц и не лиц, а не для разделения самих лиц, хотя интересно как SVM будет работать для кол-во классов = кол-во человек.

Обычно используют PCA и евклидову метрику, но всё равно там получается что надо выбирать порог.



___________________________________________________________________________________________
http://www.lfd.uci.edu/~gohlke/pythonlibs/
https://bitbucket.org/pypy/compatibility/wiki/Home

Отредактировано mrgloom (Март 26, 2013 08:33:28)

Офлайн

#9 Янв. 13, 2025 15:36:53

gps38region
Зарегистрирован: 2025-01-13
Сообщения: 20
Репутация: +  0  -
Профиль   Отправить e-mail  

Распознавание лиц

Приветствую всех ГУРУ и тех кому не безразлична данная тема.

Пытаюсь сделать трекер лица Python+OpenCV –> Arduino+Servo

Для Ардуино написал скетч который по СОМ порту принимает команду в формате X:Y (0:0 , 180:180 , 23:56 и т.д.)

#include <Servo.h>
Servo servo; // объект серво для 2х моторов

void setup() {
Serial.begin(9600); // открыть порт для связи
servo.attach(7, 400, 2400);
servo.attach(8, 400, 2400);

servo.write(90); //выводим серво в центр
servo.write(90); //выводим серво в центр
}

void loop() { // Основной цикл

if (Serial.available() > 0) { // если что то прислали

String bufString = Serial.readString(); // читаем как строку
byte dividerIndex = bufString.indexOf(':'); // ищем индекс разделителя
String buf_1 = bufString.substring(0, dividerIndex); // создаём строку с первым числом
String buf_2 = bufString.substring(dividerIndex + 1); // создаём строку со вторым числом
int val_1 = buf_1.toInt(); // преобразуем угол горизонталм
int val_2 = buf_2.toInt(); // преобразуем угол вертикали

servo.write(val_1); // поворот по X
servo.write(val_2); // поворот по Y
delay(100);
}
}

Написал на Python проверочный код и все повороты 100% отрабатывают но с какой то задержкой…

import time
import serial

# Configure the COM port
port = “COM8” # Replace with the appropriate COM port name
baudrate = 9600
# Open the COM port
ser = serial.Serial(port, baudrate=baudrate)
print(“Serial connection established.”)

try:

# Send commands to the Arduino
while True:

command = input(“Enter a command ('0:0', ‘180:180’): ”)
ser.write(command.encode())

except KeyboardInterrupt:
pass

finally:
# Close the serial connection
if ser.is_open:
command = ‘0:0’ # zero position
ser.write(command.encode())
ser.close()
print(“Serial connection closed.”)


А вот код на Python который через OpenCV определяет центр лица и смещения по X Y отправляет через СОМ порт на Arduino в формате как в тестовом коде…..

import numpy as np
import cv2

import serial
port = “COM8” # Replace with the appropriate COM port name
baudrate = 9600
# Open the COM port
arduino = serial.Serial(port, baudrate=baudrate)


face_cascade = cv2.CascadeClassifier(cv2.data.haarcascades + ‘haarcascade_frontalface_default.xml’)
eye_cascade = cv2.CascadeClassifier(cv2.data.haarcascades + ‘haarcascade_eye.xml’)

capture = cv2.VideoCapture(0,cv2.CAP_DSHOW)
#capture.set(cv2.CAP_PROP_FRAME_WIDTH, 1024)
#capture.set(cv2.CAP_PROP_FRAME_HEIGHT, 720)

Tim=0

xi = int(capture.get(3))
cxi = int(xi/2)
yi = int(capture.get(4))
cyi = int(yi/2)

while True:
ret, frame = capture.read()

gray = cv2.cvtColor(frame, cv2.COLOR_BGR2GRAY)

faces = face_cascade.detectMultiScale(gray, 1.3, 5)
eyes = eye_cascade.detectMultiScale(gray, 1.3, 5)

cv2.line(frame, (cxi,0),(cxi,yi),(120,120,120),1)
cv2.line(frame, (0,cyi),(xi,cyi),(120,120,120),1)
ct = ‘'

for (x, y, w, h) in faces:
frame = cv2.rectangle(frame, (x, y), (x + w, y + h), (0, 255, 255), 2)
cx=int(x+w/2)
cy=int(y+h/2)
dx=int(90+cxi-cx)
dy=int(90+cyi-cy)
ct=str(dx)+’:'+str(dy) # Send to COM port
cv2.circle(frame, (cx,cy), 5, (0, 0, 255) , -1) #-1
cv2.line(frame, (cxi,cyi), (cx,cy),(0, 0, 255), 3)

cv2.putText(frame, ct, (0, 20), cv2.FONT_HERSHEY_DUPLEX, 0.9, (0, 0, 250), 1)
# Send commands to the Arduino

# ser.write(f“{angle}n”.encode())
command = ct #input('Enter a command (e.g., ‘ON’, ‘OFF’): ‘)
arduino.write(command.encode())
#print(command)

cv2.imshow(’From Camera', frame)

k = cv2.waitKey(30) & 0xFF
if k == 27:
if arduino.is_open:
command = ‘0:0’
arduino.write(command.encode())
arduino.close()
print(“Serial connection closed.”)
break

capture.release()
cv2.destroyAllWindows()

Видео отображает, смещения вычисляются…
Но Servo на Arduino не отрабатывает практически НИ КАК…
Бывают иногда какието дергания Servo , Но это не то что я хотел (отслеживать движение лица и поворачивать камеру)

Подскажите , где у меня ошибка и куда копать ???
Заранее благодарю за помощь…

Офлайн

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version