Форум программистов, компьютерный форум, киберфорум
C++: OpenCV
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.55/11: Рейтинг темы: голосов - 11, средняя оценка - 4.55
197 / 134 / 24
Регистрация: 16.03.2017
Сообщений: 1,460
1

Основы face detect

14.06.2021, 14:08. Показов 2232. Ответов 6
Метки нет (Все метки)

Добрый день, проконсультируйте плиииз.

С ОпенСВ работаю впервые! Нужны 2-4 "вводных" предложения для преодоления "первого порога" в технологию!
(стадия "сбора информации")

Как С НУЛЯ написать систему обнаружения лица на фото/видео?
Требования:
1) ловит даже перевернутое лицо
2) учитывает "лицо в профиль" и "не полный профиль", "почти сверху" (лоб вижу) или "снизу" (подбородок и ноздри)
3) ловит "часть лица" - только глаза под маской, только правую половину лица(обрезанная картинка или не все лицо в кадре)
4) без привязки (переобучения) под другое разрешение камеры.

С чего начать???
Что почитать по этому (в разрезе OpenCV)

Перепробовал несколько готовых решений и обнаружил что у них все ломается при "закрывании части лица" (хватает глаз рукой прикрыть), переворачивания картинки (прямо ловит, но наклоняешь лицо на 20-30 градусов или поворачиваешь картинку вверх ногами не видит) и при поворачивании лица "в профиль" (плавный поворот головы до уровня скрытия одного из глаз и "удлинения носа" = лицо не обнаружено).

Хочу с нуля попробовать свою систему написать. Пусть будет ОЧЕНЬ много ошибок (приемлемо - решится другими средствами) и требовать в разы больше процессора(учиться буду на мощном компе, а не на ардуинках), но главное чтобы ВСЕГДА ловило "нечто похожее на лицо".

На примере https://docs.opencv.org/3.4/df... amera.html
похоже идет подгрузка некого файла https://docs.opencv.org/3.4/ha... efault.xml

...предположу что это "обученное ядро" системы распознавания лиц! И предположу что мне предстоит написать более... продвинутое? полное? обучить на большем количестве образцов?

Находил фейс-детекты на Ноде требующие "буфер" за 200-300 Мб. (слепок нейросети?) Чем больше "буфер" тем лучше качество распознания?
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
14.06.2021, 14:08
Ответы с готовыми решениями:

detect face
Ребят, нужны исходники определения лиц(можно глаз) в видео потоке с помощью C#(желательно) можно и...

Ошибка detect
постояянно во всех прогах пишит ошибка detect что делать?например Driver:=Detect;

Detect и return -1 ?
Можете сказать, что означает Detect и return -1. Примеры: int gdriver = DETECT; int gmode =...

Detect IDE
Всем привет! Понимаю. что вопрос ламерский, но все же не могу найти как детектнуть запуск из-под...

6
169 / 62 / 20
Регистрация: 06.07.2017
Сообщений: 335
15.06.2021, 12:58 2
Цитата Сообщение от andyj Посмотреть сообщение
На примере https://docs.opencv.org/3.4/df... amera.html
похоже идет подгрузка некого файла https://docs.opencv.org/3.4/ha... efault.xml
...предположу что это "обученное ядро" системы распознавания лиц!
Не совсем так.
Ссылка не на ядро, а на базовую модель фронтального каскадного классификатора лица.
Соответственно виды сверху, снизу, с боков не будит распознаны. Для этих видов необходимо тренировать соответствующие классификаторы. Обобщенно описано в оф. примерах Cascade Classifier Training

Добавлено через 15 минут
P. S.
Посмотрите на пример где используются два классификатора: Cascade Classifier
В данном примере использованы фронтальный классификатор лиц и классификатор глаз. Что дает возможность детектировать глаза и лицо анфас.
1
197 / 134 / 24
Регистрация: 16.03.2017
Сообщений: 1,460
15.06.2021, 19:05  [ТС] 3
Цитата Сообщение от Decosa Посмотреть сообщение
Для этих видов необходимо тренировать соответствующие классификаторы.
Я совсем новичок в OnepCV. Поэтому в терминах совсем не разбираюсь. Знаю принципы построения нейросетей, но даже не пытался их использовать. Понимаю что здесь много общего, но все предстоит С НУЛЯ изучать!

Можно в двух словах про "класификаторы"? Что это? Какие основные принципы обучения? Не ссылкой на большую статью, а в 1-2 предложения? (тяжело читать профи-документацию, когда даже основ не знаешь)

Насколько тяжело обучить подобную систему? Много фоток нужно? Или есть готовые "наборы фоток"?(вроде встречал такое)

Есть готовые "редакторы" для обучениия или все происходит "командами" или даже в консоли?
(в статьях, даже в вашей похоже вообще все через консоль обучают - opencv_visualisation --image=/data/object.png --model=/data/model.xml --data=/data/result/)

Хватит ли одного лица (моего) для обучения "под любую голову" или нужна сотня "голов"?
(нос, глаза, уши... классическое мужское или женское лицо)

Реально ли обучить OpenCV без привязки к качеству и разрешению картинок?
...знаю что фейсбук находит лица на ЛЮБОЙ фото, а при обучении нейросетей (запомнилось) принято обучать под "жесткие размеры картинки". В идеале должно подключаться к веб-камере любого качества/бренда без переобучения. Это возможно?

Обучив на одном лице как поведет себя система, если вдруг два лица в кадре окажется?
(пусть поймает хоть 10 лиц - даже если в складках рубашки нечто "похожее на лицо" найдет)

Как учесть наклоны и перевороты головы?

Не по теме:

...так уж получилось что в моем ноуте из-за ошибки драйверов (лень переустанавливать - только на примерах OpenCV нужно было) оказалась перевернуто изображение = ни одна система мое лицо не ловит! Если пройду минимальный барьер в технологии - куплю нормальную веб-камеру... но учиться буду на чужих фотках.

Подкладывал "купюру с лицом" под камеру в перевернутом(правильной стороной) виде - "примеры" на OpenCV ловят! Но стоит наклонить купюру на 10-20 градусов и лицо теряется... Я свое лицо иногда на больший угол наклоняю, если задумаюсь )))

В идеале должно быть аж до +/-90 градусов (горизонтальное/лежачее фото)
0
169 / 62 / 20
Регистрация: 06.07.2017
Сообщений: 335
10.07.2021, 20:28 4
Цитата Сообщение от andyj Посмотреть сообщение
Можно в двух словах про "класификаторы"? Что это? Какие основные принципы обучения? Не ссылкой на большую статью, а в 1-2 предложения? (тяжело читать профи-документацию, когда даже основ не знаешь)
Как вместить ответы в 1-2 предложения на 11 вопросительных предложений, не имею представления.
Разве что цитатой из Вики в 2-х предложениях:
Классифика́тор (от лат. classis — разряд и facere — делать) — систематизированный перечень наименованных объектов, каждому из которых в соответствие дан уникальный код. Классификация объектов производится согласно правилам распределения заданного множества объектов на подмножества (классификационные группировки) в соответствии с установленными признаками их различия или сходства.
В качестве примера.
В данном случае лицо это детектируемый объект который имеет ряд классификаторов: овал, нос, глаза, рот, уши.

Попробую кратко ответить на оставшиеся вопросы.
Цитата Сообщение от andyj Посмотреть сообщение
Насколько тяжело обучить подобную систему?
Обучить классификатор много проще чем научиться его обучать не читая документации. Однозначно, времени потратить прийдеться много.

Цитата Сообщение от andyj Посмотреть сообщение
Есть готовые "редакторы" для обучениия или все происходит "командами" или даже в консоли?
Редакторов не встречал. Да и не совсем понятно что собираетесь редактировать.

Цитата Сообщение от andyj Посмотреть сообщение
Хватит ли одного лица (моего) для обучения "под любую голову" или нужна сотня "голов"?
(нос, глаза, уши... классическое мужское или женское лицо)
Цитата Сообщение от andyj Посмотреть сообщение
Обучив на одном лице как поведет себя система, если вдруг два лица в кадре окажется?
(пусть поймает хоть 10 лиц - даже если в складках рубашки нечто "похожее на лицо" найдет)
Это уже как угодно, зависит от требований к конечному продукту, и от затраченого времени на разработку.

Цитата Сообщение от andyj Посмотреть сообщение
Реально ли обучить OpenCV без привязки к качеству и разрешению картинок?
...знаю что фейсбук находит лица на ЛЮБОЙ фото, а при обучении нейросетей (запомнилось) принято обучать под "жесткие размеры картинки". В идеале должно подключаться к веб-камере любого качества/бренда без переобучения. Это возможно?
OpenCV — библиотека алгоритмов компьютерного зрения, обработки изображений и численных алгоритмов общего назначения с открытым кодом. Как собираетесь обучить библиотеку?
Чем хуже качество входных данных (изображений в данном случае) тем выше процент ошибки детектирования. Это ведь логично.

Цитата Сообщение от andyj Посмотреть сообщение
Как учесть наклоны и перевороты головы?
Здесь наверное нужна привязка к геометрии глаз и\или овалу лица. В случае искажения применять поворот на определенный угол и сравнивать.

Цитата Сообщение от andyj Посмотреть сообщение
В идеале должно быть аж до +/-90 градусов (горизонтальное/лежачее фото)
Это ж как нужно задуматься что бы голову на 90° повернуть? ))
1
197 / 134 / 24
Регистрация: 16.03.2017
Сообщений: 1,460
11.07.2021, 09:40  [ТС] 5
Цитата Сообщение от Decosa Посмотреть сообщение
Редакторов не встречал. Да и не совсем понятно что собираетесь редактировать.
Примерно это себе представлял так:
Делается скриншот с видео или выбирается образец из коллекции для обучения, отправляется в редактор типа паинта/корэла. выбираю из коллекции обработчиков что сделать с картинкой-задаю вращение, меняю контрастность, накладываю цветовую маску. Задаю МЫШКОЙ ту зону, которую хотел бы обнаруживать "обучением" и... перехожу к следующей картинке.
В результате получаю коллекцию из картинка+зоны+обработки картинки, которые уже и посылаются "на обучение"...

Цитата Сообщение от Decosa Посмотреть сообщение
OpenCV — библиотека алгоритмов компьютерного зрения, обработки изображений и численных алгоритмов общего назначения с открытым кодом. Как собираетесь обучить библиотеку?
Чем хуже качество входных данных (изображений в данном случае) тем выше процент ошибки детектирования. Это ведь логично.
Вы наверное не поняли вопрос... Раньше (в 2000е) я читал что обучение нейросети идет под определенные РАЗМЕРЫ фото. Например "обучение под разрешение веб-камеры". И нейросеть обученная под камеру 800х600 не могла опознавать те-же объекты на 640х480 или на 1024х800. Как с этим обстоит у OpenCV?

Цитата Сообщение от Decosa Посмотреть сообщение
Это ж как нужно задуматься что бы голову на 90° повернуть? ))
на руку кулак положить на низком столике или реально "прилечь". Камера следит за человеком и вдруг раз - нет человека... а он просто наклонил голову...В идеале должно опознавать наличие "оператора" даже если вверх ногами стоит! ))

Цитата Сообщение от Decosa Посмотреть сообщение
Это уже как угодно, зависит от требований к конечному продукту, и от затраченого времени на разработку.
Требования попытался максимально уростить, но надежность опознавания надо поднять.
Я подхожу в зону камеры - моментально должно опознать
1) человек/лицо в кадре. Возможно несколько человек. Лучше ошибиться на "лицо на футболке" или "мятую рубашку на плече" чем не опознать вообще. (по тому что я видел - это "стандартные" решения, которые делают даже школьники)
2) захватить глаза, кончик носа и в идеале подбородок и шуи.
3) предусмотреть возможность поменять камеру на более качественную, менее качественную но инфракрасную или "широкоформатную" 4к(сильно нарушив "пропорции"). При смене камеры не должно происходить полноценное "переобучение"

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

Добавлено через 3 часа 14 минут
Цитата Сообщение от andyj Посмотреть сообщение
Требования попытался максимально упростить, но надежность опознавания надо поднять.
В идеале должно ловить "возможно лицо" даже если видно только один глаз и часть носа... Рукой/кистью глаз(пол лица) или рот прикрыл - все еще должно опознавать "наличие лица".
0
169 / 62 / 20
Регистрация: 06.07.2017
Сообщений: 335
11.07.2021, 13:27 6
Цитата Сообщение от andyj Посмотреть сообщение
Раньше (в 2000е) я читал что обучение нейросети идет под определенные РАЗМЕРЫ фото. Например "обучение под разрешение веб-камеры". И нейросеть обученная под камеру 800х600 не могла опознавать те-же объекты на 640х480 или на 1024х800. Как с этим обстоит у OpenCV?
Нейронная сеть это громкое название. А на самом деле набор алгоритмов соответствующих математических расчетов, не более того.
В библиотеке OpenCV так же математические вычисления, в принципе как и во всей вычислительной технике. Математические расчеты, операции сравнения и сортировки.
И наверное уже читали о том что классификаторы создаются из набора положительных и отрицательных изображений. Далее происходит сравнение входных данных с шаблонами по ключевым точкам характерным определенному объекту.
При определении ключевых точек разрешение не критичный параметр, более важна четкость изображения (без размытий). Размытие уже позже применяется в случае необходимости.
Если необходимо детектировать человека в целом а не только его лицо, тогда и шаблоны заготавливаются соответствующие.

Цитата Сообщение от andyj Посмотреть сообщение
...в идеале хочу "запереть" решение в отдельный "гаджет" типа "ардуино в корпусе" и дать "пользователю" возможность менять камеры без тяжелых "перенастроек"
Добавлено через 3 часа 14 минут
Цитата Сообщение от andyj Посмотреть сообщение
Требования попытался максимально упростить, но надежность опознавания надо поднять.
В идеале должно ловить "возможно лицо" даже если видно только один глаз и часть носа... Рукой/кистью глаз(пол лица) или рот прикрыл - все еще должно опознавать "наличие лица".
Задачу поставили перед собой не простую, сложную. И когда реализуете в полном объеме можно смело писать диссертацию по теме.
0
197 / 134 / 24
Регистрация: 16.03.2017
Сообщений: 1,460
11.07.2021, 14:00  [ТС] 7
Цитата Сообщение от Decosa Посмотреть сообщение
Если необходимо детектировать человека в целом а не только его лицо, тогда и шаблоны заготавливаются соответствующие.
Не... мне нужно ТОЛЬКО лицо! Вернее даже "голова". Под любыми углами, поворотами, наклонами. Возможно в очках с диоптриями или с ушами под волосами или наушниками. И точки-маркеры на нем - глаза, нос, центры ушей и край подбородка - с возможностью "невозможности детектировать" одну из точек из-за невидимости в кадре (прикрыто или отрезано краем кадра).

Цитата Сообщение от Decosa Посмотреть сообщение
Задачу поставили перед собой не простую, сложную.
Вообще-то встречал готовые решения на эту тему в сети... Причем вроде даже опенсорсные. У индусов. На видео-примере на ютюбе успешно ловит (в 80-90% случаев) частично закрытое лицо, но не умеет работать ни с поворотами лица "в профиль", ни с наклонами вбок больше чем на 3-5%. И подозреваю что и "наклоны головы" не поймает. Поэтому и понимаю что надо всю теорию с нуля перебирать. Предварительно изучив чужие примеры.

Задавать "модели для обучения в консоли" - довольно скучное задание! Неужели нет никаких "инструментов" для подобного?
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
11.07.2021, 14:00

Помощь в написании контрольных, курсовых и дипломных работ здесь.

Detect mobile
Здраствуйте! есть сайт,+моб версия в отдельной папке,нужно писать условие что если IOS показать...

Неизвестное имя 'detect'
Неизвестное имя 'detect'

Sorry we still could not detect a valid jdk
sorry we still could not detect a valid jdk В общем, качаю я SDK и NDK, но при установки SDK...

Detect session time-out
Всем доброго времени суток. У меня проект сделан с помощью primefaces. Можно ли как-то отследить...

RichTextBox detect url
Нужно программно вычислить в какой позиции текста стоит ссылка и её длину, подскажите в какую...

Sorry we still could not detect a valid jdk
sorry we still could not detect a valid jdk В общем, качаю я SDK и NDK, но при установки SDK...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
7
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2021, vBulletin Solutions, Inc.