Страница 6 из 6

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

Добавлено: 19 янв 2023, 00:31
Olej
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.

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

Добавлено: 19 янв 2023, 01:28
Olej
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

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

Добавлено: 19 янв 2023, 01:43
Olej
Дальше идут уже совершенно мои коды...

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

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 КБ) 362 просмотра

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

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]
Вот этого числового набора вполне достаточно чтобы распознавать этого человека в любом контексте.

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

Добавлено: 19 янв 2023, 01:51
Olej
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 КБ) 359 просмотров
- это ошибка отождествления ... ни с кем из набора эталонов образ не отождествился:
E2.png
E2.png (256.48 КБ) 357 просмотров
- это просто не обнаружено то что может считаться лицом - отождествлять нечего:
E3.png
E3.png (275.05 КБ) 357 просмотров

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

Добавлено: 19 янв 2023, 02:15
Olej
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-м компонентом имени файла.

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

Добавлено: 19 янв 2023, 02:35
Olej
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

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

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

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