Страница 1 из 2

[Сценарий] Детектор лиц на PHP без использования OpenCV

Добавлено: Чт июн 07, 2018 12:11 am
C_3AXAPOB
Дислеймер: это эксперимент!

Использованы материалы:
https://github.com/felixkoch/PHP-FaceDetector
https://www.ab-log.ru/smart-house/video ... -detection

Для определния лица используется метод Виолы—Джонса (англ. Viola–Jones object detection) — алгоритм, позволяющий обнаруживать объекты на изображениях в реальном времени. Подробней тут https://ru.wikipedia.org/wiki/%D0%9C%D0 ... 1%81%D0%B0 я так понял, что этот же метод использует OpenCV и файл haarcascade_frontalface_default.xml (о котором ниже) оттуда.

Сразу замечу, что метод не 100 процентный и работает по моим наблюдениям в ~80 процентах случаев.
У меня был случай когда за лицо был принят элемент обстановки.
Алгоритм может определять несколько лиц на снимке.

Нам понадобятся два файла:
FaceDetector.php - библиотека
haarcascade_frontalface_default.xml
скачать их можно тут: https://github.com/felixkoch/PHP-FaceDetector
поместить их надо в папку var/www/lib/

Так как я использую камеры подключенные через простые устройства то покажу на их примере. У меня камера привязана к датчику движения и при движении в комнате вызывается метод takeSnapshot.

Есть камера в простых устройствах -объект Camera01 у объекта есть метод takeSnapshot.
В методе takeSnapshot пишем

Код: Выделить всё

include("FaceDetector.php");
$dir='http://192.168.2.13/cms/images/'; //тут соответственно под себя переписываем
$snap=$dir.gg('Camera01.snapshot');
$detector = new FaceDetector();
$detector->scan($snap);
$faces = $detector->getFaces();
if(count($faces) > 0) {
say("Вижу лицо!",2); //count($faces) говорит о том сколько лиц на фото определено. Таким образом, можно определить сколько человек в комнате.
} else {
//say("Нет лиц!",2);
}
Далее лицо можно идентифицировать-распознать используя библиотеку FANN о том как это сделать написано тут https://www.ab-log.ru/smart-house/video ... -detection
О том как установить FANN смотрите в моей предыдущей теме.

Re: Детектор лиц на PHP без использования OpenCV

Добавлено: Чт июн 07, 2018 12:43 pm
xor
Камера под потолком комнаты, при движении делает снимок 1280*960, общий план. Секунд 40 обрабатывает скрипт. В комнате много мест, которые опознаются как лица((. Людей ловит редко(

Re: Детектор лиц на PHP без использования OpenCV

Добавлено: Чт июн 07, 2018 12:59 pm
C_3AXAPOB
Тут есть такой момент, распознавание проходит по модели haarcascade_frontalface_default.xml т.е. с небольшими вариациями лицо прямо смотрящего человека. Как например тут
face_track_frame.png
face_track_frame.png (249.85 КБ) 8675 просмотров
Теоретически можно попробовать подсунуть другие модели от opencv https://github.com/opencv/opencv/tree/m ... arcascades

Re: Детектор лиц на PHP без использования OpenCV

Добавлено: Чт июн 07, 2018 1:28 pm
xor
Я попробую к домофону это прилепить, там наверняка крупнее лицо и алгоритм, пишут, требует не более 30 градусов поворота фэйса, что как раз

Re: Детектор лиц на PHP без использования OpenCV

Добавлено: Чт июн 07, 2018 9:15 pm
tarasfrompir
xor писал(а): Чт июн 07, 2018 12:43 pm Камера под потолком комнаты, при движении делает снимок 1280*960, общий план. Секунд 40 обрабатывает скрипт. В комнате много мест, которые опознаются как лица((. Людей ловит редко(
А уменшить кратинку до 320\240 не можна ?. там ведь есть и настройка размера картинки...

Re: Детектор лиц на PHP без использования OpenCV

Добавлено: Чт июн 07, 2018 9:18 pm
tarasfrompir
для C_3AXAPOB - Выложил ? Красавец... Да и хоть какое то решение уже есть....

есть еще одна библиотека , та побыстрее будет, но только одно лицо обрабатывает... зараз... хотя кто сказал что не можна определять лица до того момента пока движение кончится...
А со снапшота определять - не очень то и хорошо, лучше напрямую с потока это делать.

Re: Детектор лиц на PHP без использования OpenCV

Добавлено: Пт июн 08, 2018 6:40 am
directman66
А дальше? Нейросеть? По ссылке первого поста OpenCV, а в теме написано без использования OpenCV. Или задача только определить, есть ли лицо в объективе камеры?

Re: Детектор лиц на PHP без использования OpenCV

Добавлено: Пт июн 08, 2018 9:00 am
C_3AXAPOB
Дальше будет нейросеть. Opencv есть в реализации ab-log в приведенном мной примере он не используется.

Re: Детектор лиц на PHP без использования OpenCV

Добавлено: Пт июн 08, 2018 10:50 am
Aven
Сходная задача - распознавание номеров автотранспорта, считаю гораздо более простая, есть ли реализации? Хочу автоматически открывать ворота когда подъезжаю :) Есть конечно платный софт... но для дома сами понимаете :)

Re: Детектор лиц на PHP без использования OpenCV

Добавлено: Пт июн 08, 2018 11:10 am
C_3AXAPOB
У opencv точно есть модель определения номера, опознать свой чужой можно через FANN.