DlibC++ : распознавание лиц

Вопросы написания собственного программного кода (на любых языках)

Модератор: Olej

Аватара пользователя
Olej
Писатель
Сообщения: 21338
Зарегистрирован: 24 сен 2011, 14:22
Откуда: Харьков
Контактная информация:

DlibC++ : распознавание лиц

Непрочитанное сообщение Olej » 19 янв 2023, 00:31

Olej писал(а):
18 янв 2023, 20:54
Следующий необходимый пакет/проект - face_recognition:
Olej писал(а):
24 дек 2018, 13:04
Кроме библиотек и API, пакет face_recognition содержит пару CLI утилит ... для проверки функционирования + оценивания изображений:

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

olej@R420:~/2023/DlibC++/face_recognition$ ls -l /usr/local/bin/face*
-rwxr-xr-x 1 root root  998 янв 18 19:53 /usr/local/bin/face_detection
-rwxr-xr-x 1 root root 1002 янв 18 19:53 /usr/local/bin/face_recognition

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

olej@R420:~/2023/DlibC++/face_recognition$ face_detection --help
Usage: face_detection [OPTIONS] IMAGE_TO_CHECK

Options:
  --cpus INTEGER      number of CPU cores to use in parallel. -1 means "use
                      all in system"
  --model TEXT        Which face detection model to use. Options are "hog" or
                      "cnn".
  --upsample INTEGER  How many times to upsample the image looking for faces.
                      Higher numbers find smaller faces.
  --help              Show this message and exit.

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

olej@R420:~/2023/DlibC++/face_recognition$ face_recognition --help
Usage: face_recognition [OPTIONS] KNOWN_PEOPLE_FOLDER IMAGE_TO_CHECK

Options:
  --cpus INTEGER           number of CPU cores to use in parallel (can speed
                           up processing lots of images). -1 means "use all in
                           system"
  --tolerance FLOAT        Tolerance for face comparisons. Default is 0.6.
                           Lower this if you get multiple matches for the same
                           person.
  --show-distance BOOLEAN  Output face distance. Useful for tweaking tolerance
                           setting.
  --help                   Show this message and exit.

Аватара пользователя
Olej
Писатель
Сообщения: 21338
Зарегистрирован: 24 сен 2011, 14:22
Откуда: Харьков
Контактная информация:

DlibC++ : распознавание лиц

Непрочитанное сообщение Olej » 19 янв 2023, 01:28

Olej писал(а):
19 янв 2023, 00:31
для проверки функционирования + оценивания изображений:
Как это (программы из пакета) работает?

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

olej@R420:~/2023/DlibC++/step-3_face_recognition_cli$ pwd
/home/olej/2023/DlibC++/step-3_face_recognition_cli

olej@R420:~/2023/DlibC++/step-3_face_recognition_cli$ tree
.
├── face_recognition_cli.hist
├── pictures_of_people_i_know_1
│   ├── subject01.glasses
│   ├── subject01.happy
│   ├── subject01.leftlight
│   ├── subject01.normal
│   ├── subject01.sad
│   ├── subject01.sleepy
│   ├── subject01.surprised
│   └── subject01.wink
├── pictures_of_people_i_know_2
│   ├── adhast.1.jpg
│   ├── adhast.2.jpg
│   ├── adhast.3.jpg
│   ├── damvo.1.jpg
│   ├── damvo.2.jpg
│   └── damvo.3.jpg
├── unknown_pictures_1
│   ├── subject01.gif
│   └── subject01.glasses.gif
└── unknown_pictures_2
    ├── adhast.10.jpg
    ├── cywan.10.jpg
    ├── damvo.10.jpg
    ├── howar.10.jpg
    ├── kbartl.10.jpg
    ├── rafox.10.jpg
    └── simm.10.jpg

4 directories, 24 files

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

olej@R420:~/2023/DlibC++/step-3_face_recognition_cli$ face_recognition --cpus -1 pictures_of_people_i_know_2 unknown_pictures_2/adhast.10.jpg
unknown_pictures_2/adhast.10.jpg,adhast.2
unknown_pictures_2/adhast.10.jpg,adhast.3
unknown_pictures_2/adhast.10.jpg,adhast.1

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

olej@R420:~/2023/DlibC++/step-3_face_recognition_cli$ face_detection unknown_pictures_2/adhast.10.jpg
unknown_pictures_2/adhast.10.jpg,54,170,141,83

Аватара пользователя
Olej
Писатель
Сообщения: 21338
Зарегистрирован: 24 сен 2011, 14:22
Откуда: Харьков
Контактная информация:

DlibC++ : распознавание лиц

Непрочитанное сообщение Olej » 19 янв 2023, 01:43

Дальше идут уже совершенно мои коды...

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

olej@R420:~/2023/DlibC++/step-3_face_recognition_aplit$ pwd
/home/olej/2023/DlibC++/step-3_face_recognition_aplit
Olej писал(а):
24 дек 2018, 13:19
Для того, чтобы видеть, как face_recognition выделяет характерные черты лица + формирует те 128 характерных точек, определённые в итоге deep learning, такое тестовое приложение:
00000001.png (можете взять любое своё изображение):
00000001.png
00000001.png (199.55 КБ) 306 просмотров

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

olej@R420:~/2023/DlibC++/step-3_face_recognition_aplit$ ./face_encoding.py 00000001.png
<class 'numpy.ndarray'>
1 <class 'list'>
<class 'tuple'>
(180, 469, 366, 283)
1 <class 'list'>
9 <class 'dict'>
{'chin': [(290, 240), (293, 263), (298, 285), (305, 307), (314, 326), (326, 343), (343, 357), (362, 367), (383, 369), (404, 364), (422, 351), (438, 336), (448, 316), (454, 294), (457, 271), (459, 248), (459, 224)], 'left_eyebrow': [(299, 215), (307, 201), (322, 193), (338, 194), (354, 200)], 'right_eyebrow': [(388, 197), (402, 189), (419, 187), (435, 192), (446, 203)], 'nose_bridge': [(372, 223), (373, 241), (373, 259), (374, 277)], 'nose_tip': [(357, 288), (366, 291), (376, 293), (386, 290), (394, 286)], 'left_eye': [(316, 236), (326, 231), (337, 230), (349, 234), (338, 237), (326, 238)], 'right_eye': [(398, 230), (408, 224), (419, 223), (430, 227), (420, 231), (409, 231)], 'top_lip': [(346, 324), (357, 318), (368, 314), (377, 315), (386, 312), (398, 314), (412, 318), (406, 318), (387, 320), (378, 322), (369, 322), (352, 324)], 'bottom_lip': [(412, 318), (401, 328), (389, 334), (380, 336), (371, 336), (359, 333), (346, 324), (352, 324), (370, 323), (379, 323), (387, 321), (406, 318)]}
chin [(290, 240), (293, 263), (298, 285), (305, 307), (314, 326), (326, 343), (343, 357), (362, 367), (383, 369), (404, 364), (422, 351), (438, 336), (448, 316), (454, 294), (457, 271), (459, 248), (459, 224)]
left_eyebrow [(299, 215), (307, 201), (322, 193), (338, 194), (354, 200)]
right_eyebrow [(388, 197), (402, 189), (419, 187), (435, 192), (446, 203)]
nose_bridge [(372, 223), (373, 241), (373, 259), (374, 277)]
nose_tip [(357, 288), (366, 291), (376, 293), (386, 290), (394, 286)]
left_eye [(316, 236), (326, 231), (337, 230), (349, 234), (338, 237), (326, 238)]
right_eye [(398, 230), (408, 224), (419, 223), (430, 227), (420, 231), (409, 231)]
top_lip [(346, 324), (357, 318), (368, 314), (377, 315), (386, 312), (398, 314), (412, 318), (406, 318), (387, 320), (378, 322), (369, 322), (352, 324)]
bottom_lip [(412, 318), (401, 328), (389, 334), (380, 336), (371, 336), (359, 333), (346, 324), (352, 324), (370, 323), (379, 323), (387, 321), (406, 318)]
1 <class 'list'>
128 <class 'numpy.ndarray'>
[-6.99085146e-02  9.84077826e-02  1.21112026e-01  3.21743079e-04
 -8.06934685e-02 -3.00324205e-02 -2.96985395e-02 -6.87163696e-02
  1.80488706e-01 -6.75299838e-02  1.58340216e-01 -2.03328710e-02
 -2.56850660e-01  6.75959513e-02 -1.02667302e-01  1.90818638e-01
 -1.33553475e-01 -1.25300393e-01 -7.63143077e-02  5.06927259e-04
 -9.69897769e-03  5.19758426e-02  1.30818048e-02  5.43041490e-02
 -8.44295695e-02 -4.11997288e-01 -9.06100795e-02 -9.69127864e-02
  4.06597964e-02 -8.26481655e-02 -6.94197416e-02  1.06586754e-01
 -1.10932887e-01 -4.59331349e-02  1.27042860e-01  3.46936658e-02
 -2.30356120e-02 -7.51237497e-02  2.95453608e-01  7.30510131e-02
 -2.49845490e-01 -3.19938548e-02  1.23676635e-01  3.10146213e-01
  2.39223480e-01  4.04311307e-02  6.09315261e-02 -1.13170289e-01
  1.79889232e-01 -2.66186446e-01 -3.27013731e-02  1.57478407e-01
  8.86571333e-02  1.04656339e-01  8.42583850e-02 -1.68988556e-01
  5.63557446e-03  4.32378277e-02 -2.05842003e-01  2.13440172e-02
  9.83658899e-03 -7.29783475e-02 -1.60745829e-02 -1.90627649e-02
  2.16138527e-01  2.32765730e-02 -1.32712394e-01 -9.71577018e-02
  2.83064336e-01 -2.04470009e-01  1.60779916e-02  6.59383014e-02
 -1.09041549e-01 -1.50104269e-01 -2.32336462e-01 -8.21434408e-02
  4.95616853e-01  1.19069926e-01 -1.26885980e-01  7.11885318e-02
 -1.34624496e-01 -1.24624029e-01 -2.27493364e-02  1.45198688e-01
 -4.43203375e-02  9.13855899e-03  6.91940356e-03  1.47860209e-02
  2.73463368e-01 -1.44846039e-02  5.05373329e-02  2.02544555e-01
  3.26371305e-02  4.51780595e-02  2.32620891e-02  8.14667195e-02
 -1.36481047e-01 -5.39681017e-02 -1.68556228e-01 -4.73946184e-02
 -8.87599662e-02 -4.70957309e-02  5.66911101e-02  1.47512019e-01
 -2.95983404e-01  1.58027336e-01  2.28147116e-02 -4.56366837e-02
  1.88251138e-02  7.08771646e-02 -4.78914380e-02 -6.09939769e-02
  1.54033735e-01 -2.81089604e-01  1.26432493e-01  1.87709451e-01
 -4.99954866e-03  9.15239006e-02 -1.44863576e-02  3.22556794e-02
  3.12945880e-02 -6.52948618e-02 -1.51842445e-01 -1.17168240e-01
  2.14236649e-03 -4.57915142e-02 -2.86754295e-02 -8.76666512e-04]
Вот этого числового набора вполне достаточно чтобы распознавать этого человека в любом контексте.
Вложения
face_encoding.py
(1.18 КБ) 19 скачиваний

Аватара пользователя
Olej
Писатель
Сообщения: 21338
Зарегистрирован: 24 сен 2011, 14:22
Откуда: Харьков
Контактная информация:

DlibC++ : распознавание лиц

Непрочитанное сообщение Olej » 19 янв 2023, 01:51

Olej писал(а):
09 янв 2019, 18:55
Программа, которая с WEB-камеры или записанного с камеры видеоролика распознаёт известных ей людей.

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

olej@R420:~/2023/DlibC++/step-3_face_recognition_aplit$ pwd
/home/olej/2023/DlibC++/step-3_face_recognition_aplit

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

olej@R420:~/2023/DlibC++/step-3_face_recognition_aplit$ ./facerec_from_video.py --help
usage: facerec_from_video.py [-h] [-i IMAGE] -k KNOWN [-t TOLERANCE] [-o OUTPUT] [-s] [-v]

options:
  -h, --help            show this help message and exit
  -i IMAGE, --image IMAGE
                        video stream source
  -k KNOWN, --known KNOWN
                        known persons directory
  -t TOLERANCE, --tolerance TOLERANCE
                        tolerance level
  -o OUTPUT, --output OUTPUT
                        output video stream
  -s, --sightless       without visualization
  -v, --verbose         increase output verbosity

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

olej@R420:~/2023/DlibC++/step-3_face_recognition_aplit$ ./facerec_from_video.py -k Aplit.web.test -v -i Egor1.avi -o Egor1_r.avi -t 0.5 
version 2.05
saved 604 frames as file Egor1_r.avi
processed 748 frames: detected 586 identified persons and 18 not identified
identified as Egor: 586 times
the average identification time was 0.097307 [+/-0.007175] seconds
Наблюдать воспроизводимое при этом видео с отождествлением очень интересно: оно показывает в каких широких пределах поворота головы или масштабирования (расстояния) опознавание ещё успешно осуществляется!
Вот несколько выхваченных кадров из этого видео потока:
- это успешное отождествление с указанием имени (эталонного файла) персоны:
E1.png
E1.png (264.08 КБ) 303 просмотра
- это ошибка отождествления ... ни с кем из набора эталонов образ не отождествился:
E2.png
E2.png (256.48 КБ) 301 просмотр
- это просто не обнаружено то что может считаться лицом - отождествлять нечего:
E3.png
E3.png (275.05 КБ) 301 просмотр
Вложения
common.py
(2.37 КБ) 20 скачиваний
facerec_from_video.py
(5.78 КБ) 18 скачиваний

Аватара пользователя
Olej
Писатель
Сообщения: 21338
Зарегистрирован: 24 сен 2011, 14:22
Откуда: Харьков
Контактная информация:

DlibC++ : распознавание лиц

Непрочитанное сообщение Olej » 19 янв 2023, 02:15

Olej писал(а):
19 янв 2023, 01:51
Программа, которая с WEB-камеры или записанного с камеры видеоролика распознаёт известных ей людей.
Olej писал(а):
09 янв 2019, 19:11
Для наполнения перечня известных к распознаванию лиц достаточно (в этой программе!) всего лишь наполнить каталог, указанный в опции -k заполнить файлами (.jpg или .png) анфас:

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

olej@R420:~/2023/DlibC++/step-3_face_recognition_aplit$ ls -l Aplit.web.test 
итого 76
-rw-rw-rw- 1 olej olej 32310 дек 12  2018 Boris.1.1.jpg
-rw-rw-rw- 1 olej olej 23454 дек 12  2018 Egor.1.2.jpg
-rw-rw-rw- 1 olej olej 20381 дек 12  2018 Olena.3.4.jpg
Olej писал(а):
09 янв 2019, 19:11
1-й компонент имени - это и будет имя персонажа, а все остальные уровни "расширений" (после '.') могут быть любыми.
На самом деле, как вы понимаете, их там может быть гораздо больше, даже файлов для одного лица, с одним именем, 1-м компонентом имени файла.

Аватара пользователя
Olej
Писатель
Сообщения: 21338
Зарегистрирован: 24 сен 2011, 14:22
Откуда: Харьков
Контактная информация:

DlibC++ : распознавание лиц

Непрочитанное сообщение Olej » 19 янв 2023, 02:35

Olej писал(а):
28 янв 2019, 19:44
В развитие этой линии распознавателя:
- приложение, которое ведёт распознавание...
- при распознавании знакомого лица (из БД) оно вызывает внешнее приложение (процесс), который может делать всё что угодно ... дверь открывать, сейф ;-) ... уведомлять хозяина о приходе гостей
Вот в таком варианте запуска (сейчас здесь нет камеры, но это не важно):

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

olej@R420:~/2023/DlibC++/step-3_face_recognition_aplit$ ./locker.py -k Aplit.web.test -t 0.5 -v -a './actps.py -d 10 -s login.wav'
version 2.11
default camera -1
[ WARN:0] global ./modules/videoio/src/cap_gstreamer.cpp (2075) handleMessage OpenCV | GStreamer warning: Embedded video playback halted; module v4l2src0 reported: Cannot identify device '/dev/video-1'.
[ WARN:0] global ./modules/videoio/src/cap_gstreamer.cpp (1053) open OpenCV | GStreamer warning: unable to start pipeline
[ WARN:0] global ./modules/videoio/src/cap_gstreamer.cpp (616) isPipelinePlaying OpenCV | GStreamer warning: GStreamer: pipeline have not been created
[ WARN:0] global ./modules/videoio/src/cap_v4l.cpp (877) open VIDEOIO(V4L2): can't find camera device
- при обноружении легального лица из каталога эталонов Aplit.web.test запускается приложение act.py (например, открывание замка и выдержка времени);
- а вот при обнаружении нелегального доступа запускается aptps.py с множеством параметров ... для тревоги.

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

olej@R420:~/2023/DlibC++/step-3_face_recognition_aplit$ ./locker.py --help
usage: locker.py [-h] [-i IMAGE] -k KNOWN -a ACTION [-t TOLERANCE] [-w WAIT] [-s] [-v]

options:
  -h, --help            show this help message and exit
  -i IMAGE, --image IMAGE
                        video stream source
  -k KNOWN, --known KNOWN
                        known persons directory
  -a ACTION, --action ACTION
                        command for action
  -t TOLERANCE, --tolerance TOLERANCE
                        tolerance level
  -w WAIT, --wait WAIT  waiting pause in sec.
  -s, --sightless       without visualization
  -v, --verbose         increase output verbosity
Вложения
locker.py
(5.52 КБ) 20 скачиваний
act.py
(415 байт) 18 скачиваний
actps.py
(1.27 КБ) 20 скачиваний
common2.py
(5.62 КБ) 18 скачиваний
login.wav
(187.9 КБ) 20 скачиваний

Аватара пользователя
Olej
Писатель
Сообщения: 21338
Зарегистрирован: 24 сен 2011, 14:22
Откуда: Харьков
Контактная информация:

DlibC++ : распознавание лиц

Непрочитанное сообщение Olej » 19 янв 2023, 02:38

На этом текущая проверка (с минимальными коррекциями) всех компонент проекта 4-5 летней давности заканчивается: всё работает на ура :!:

Графические компоненты этой работы описаны отдельно в теме: Python: Tkinter GUI

Ответить

Вернуться в «Программирование»

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и 9 гостей