⛳️ ЦСль этого поста - ΡΠΎΠ·Π΄Π°Ρ‚ΡŒ ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ для распознавания Π»ΠΈΡ†, Π° Ρ‚Π°ΠΊΠΆΠ΅ ΠΏΠΎΠ·Π½Π°ΠΊΠΎΠΌΠΈΡ‚ΡŒ вас с ΠΎΡ‡Π΅Π½ΡŒ интСрСсной ΠΈ ΠΏΠΎΠ»Π΅Π·Π½ΠΎΠΉ Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠΎΠΉ OpenCV. Π£Π²Π΅Ρ€Π΅Π½, Ρ‡Ρ‚ΠΎ этот ΠΌΠ°Ρ‚Π΅Ρ€ΠΈΠ°Π» Π±ΡƒΠ΄Π΅Ρ‚ ΠΏΠΎΠ»Π΅Π·Π΅Π½ Π½ΠΎΠ²ΠΈΡ‡ΠΊΠ°ΠΌ.

Абстрактный

Π’ этой ΡΡ‚Π°Ρ‚ΡŒΠ΅ ΠΌΡ‹ ΠΏΠΎΠΈΠ³Ρ€Π°Π΅ΠΌ с Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΌΠΈ встроСнными ΠΌΠ΅Ρ‚ΠΎΠ΄Π°ΠΌΠΈ, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌΡ‹ΠΌΠΈ Π² ΠΊΠΎΠΌΠΏΡŒΡŽΡ‚Π΅Ρ€Π½ΠΎΠΌ Π·Ρ€Π΅Π½ΠΈΠΈ ΠΈ машинном ΠΎΠ±ΡƒΡ‡Π΅Π½ΠΈΠΈ. Для обнаруТСния особСй Π±Ρ‹Π» Π²Ρ‹Π±Ρ€Π°Π½ Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌ Π₯Π°Π°Ρ€Π°-ΠΏΠΎΠ΄ΠΎΠ±Π½Ρ‹ΠΉ ΠΏΡ€ΠΈΠ·Π½Π°ΠΊ, Π° для распознавания Π»ΠΈΡ† - ΠΌΠ΅Ρ‚ΠΎΠ΄, основанный Π½Π° построСнии гистограмм Π»ΠΎΠΊΠ°Π»ΡŒΠ½Ρ‹Ρ… Π±ΠΈΠ½Π°Ρ€Π½Ρ‹Ρ… ΠΏΠ°Ρ‚Ρ‚Π΅Ρ€Π½ΠΎΠ², ΡƒΠΆΠ΅ описанных Π² ΠΌΠΎΠ΅ΠΉ ΠΏΡ€Π΅Π΄Ρ‹Π΄ΡƒΡ‰Π΅ΠΉ Ρ€Π°Π±ΠΎΡ‚Π΅ .

ВСория

1-Ρ†ΠΈΡ„Ρ€ΠΎΠ²Ρ‹Π΅ изобраТСния

Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ простоС ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΈΠ΅ пиксСля?

«ПиксСль - это самая малСнькая Π΅Π΄ΠΈΠ½ΠΈΡ†Π° Π²ΠΈΠ·ΡƒΠ°Π»ΡŒΠ½ΠΎΠΉ ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΠΈ Π² Ρ†ΠΈΡ„Ρ€ΠΎΠ²ΠΎΠΌ ΠΌΠΈΡ€Π΅. КаТдая цифровая фотография, ΠΈΠ»Π»ΡŽΡΡ‚Ρ€Π°Ρ†ΠΈΡ, Π²ΠΈΠ΄Π΅ΠΎ ΠΈ ΠΈΠ³Ρ€Π° состоят ΠΈΠ· пиксСлСй, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΈΠΌΠ΅ΡŽΡ‚ Ρ‚Π΅Π½Π΄Π΅Π½Ρ†ΠΈΡŽ Π±Ρ‹Ρ‚ΡŒ идСально ΠΊΡ€ΡƒΠ³Π»Ρ‹ΠΌΠΈ ΠΈΠ»ΠΈ ΠΊΠ²Π°Π΄Ρ€Π°Ρ‚Π½Ρ‹ΠΌΠΈ Β»[1].

Для ΠΈΠ·ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΠΉ Π² ΠΎΡ‚Ρ‚Π΅Π½ΠΊΠ°Ρ… сСрого ΠΊΠ°ΠΆΠ΄Ρ‹ΠΉ 8-Π±ΠΈΡ‚Π½Ρ‹ΠΉ пиксСль ΠΈΠΌΠ΅Π΅Ρ‚ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ интСнсивности Π² Π΄ΠΈΠ°ΠΏΠ°Π·ΠΎΠ½Π΅ 0–255 Ρ‚Π°ΠΊΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ, Ρ‡Ρ‚ΠΎ 0 прСдставляСт Ρ‡Π΅Ρ€Π½Ρ‹ΠΉ пиксСль, Π° 255 прСдставляСт собой Π±Π΅Π»Ρ‹ΠΉ.

Π¦Π²Π΅Ρ‚Π½Ρ‹Π΅ изобраТСния Π² основном состоят ΠΈΠ· Ρ‚Ρ€Π΅Ρ… ΠΊΠ°Π½Π°Π»ΠΎΠ² (RGB), ΠΊΠ°ΠΊ ΠΏΠΎΠΊΠ°Π·Π°Π½ΠΎ Π½ΠΈΠΆΠ΅. :

ΠžΠΊΠΎΠ½Ρ‡Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎΠ΅ ΠΈΠ·ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅ отобраТаСтся Π½Π° экранС ΠΊΠΎΠΌΠΏΡŒΡŽΡ‚Π΅Ρ€Π° ΠΏΡƒΡ‚Π΅ΠΌ объСдинСния этих Ρ‚Ρ€Π΅Ρ… (RGB) ΠΊΠ°Π½Π°Π»ΠΎΠ² Π² ΠΎΠ΄ΠΈΠ½ ΠΊΠ°Π½Π°Π».

Для получСния Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΠΉ ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΠΈ ΠΎ изобраТСниях ΠΈ Ρ†Π²Π΅Ρ‚ΠΎΠ²Ρ‹Ρ… пространствах Π²Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ Π² любоС врСмя ΠΎΠ±Ρ€Π°Ρ‚ΠΈΡ‚ΡŒΡΡ ΠΊ ΠΌΠΎΠ΅ΠΉ ΠΏΡ€Π΅Π΄Ρ‹Π΄ΡƒΡ‰Π΅ΠΉ ΠΏΡƒΠ±Π»ΠΈΠΊΠ°Ρ†ΠΈΠΈ [4].

2- Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ ΠΎΠ±Π½Π°Ρ€ΡƒΠΆΠ΅Π½ΠΈΠ΅ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ²?

ΠžΠ±Π½Π°Ρ€ΡƒΠΆΠ΅Π½ΠΈΠ΅ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ² - это ΠΏΠΎΠ΄Ρ…ΠΎΠ΄, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌΡ‹ΠΉ Π² ΠΊΠΎΠΌΠΏΡŒΡŽΡ‚Π΅Ρ€Π½ΠΎΠΌ Π·Ρ€Π΅Π½ΠΈΠΈ ΠΈ ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠ΅ ΠΈΠ·ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΠΉ для обнаруТСния экзСмпляров ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ² ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π½ΠΎΠ³ΠΎ класса (Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, кошСк, собак ΠΈΠ»ΠΈ людСй) Π² Ρ†ΠΈΡ„Ρ€ΠΎΠ²Ρ‹Ρ… изобраТСниях ΠΈ Π²ΠΈΠ΄Π΅ΠΎ.

ΠšΠ°ΠΆΠ΄Ρ‹ΠΉ класс ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π° ΠΈΠΌΠ΅Π΅Ρ‚ свои особыС особСнности, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΏΠΎΠΌΠΎΠ³Π°ΡŽΡ‚ Π² классификации класса - Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, всС ΠΊΡ€ΡƒΠ³ΠΈ Ρ€Π°ΡƒΠ½Π΄. ΠžΠ±Π½Π°Ρ€ΡƒΠΆΠ΅Π½ΠΈΠ΅ класса ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π° ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ эти ΡΠΏΠ΅Ρ†ΠΈΠ°Π»ΡŒΠ½Ρ‹Π΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ. НапримСр, ΠΏΡ€ΠΈ поискС ΠΊΡ€ΡƒΠ³ΠΎΠ² ищутся ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Ρ‹, находящиСся Π½Π° ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π½ΠΎΠΌ расстоянии ΠΎΡ‚ Ρ‚ΠΎΡ‡ΠΊΠΈ (Ρ‚. Π•. Π¦Π΅Π½Ρ‚Ρ€Π°). Π’ΠΎΡ‡Π½ΠΎ Ρ‚Π°ΠΊ ΠΆΠ΅ ΠΏΡ€ΠΈ поискС ΠΊΠ²Π°Π΄Ρ€Π°Ρ‚ΠΎΠ² Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΡ‹ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Ρ‹, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ пСрпСндикулярны Β»ΡƒΠ³Π»Π°ΠΌ ΠΈ ΠΈΠΌΠ΅ΡŽΡ‚ Ρ€Π°Π²Π½Ρ‹Π΅ стороны. Аналогичный ΠΏΠΎΠ΄Ρ…ΠΎΠ΄ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ для ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ†ΠΈΠΈ Π»ΠΈΡ†Π°, Π³Π΄Π΅ ΠΌΠΎΠΆΠ½ΠΎ Π½Π°ΠΉΡ‚ΠΈ Π³Π»Π°Π·Π°, нос ΠΈ Π³ΡƒΠ±Ρ‹, Π° Ρ‚Π°ΠΊΠΆΠ΅ Ρ‡Π΅Ρ€Ρ‚Ρ‹, Ρ‚Π°ΠΊΠΈΠ΅ ΠΊΠ°ΠΊ Ρ†Π²Π΅Ρ‚ ΠΊΠΎΠΆΠΈ ΠΈ расстояниС ΠΌΠ΅ΠΆΠ΄Ρƒ Π³Π»Π°Π·Π°ΠΌΠΈ. [ 6]

ΠžΠ±Π½Π°Ρ€ΡƒΠΆΠ΅Π½ΠΈΠ΅ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ² ΡˆΠΈΡ€ΠΎΠΊΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ Π² Π·Ρ€Π΅Π½ΠΈΠΈ ΠΊΠΎΠΌΠΏΡŒΡŽΡ‚Π΅Ρ€Π½Ρ‹Ρ… Π·Π°Π΄Π°Ρ‡, Ρ‚Π°ΠΊΠΈΡ… ΠΊΠ°ΠΊ ΠΎΠ±Π½Π°Ρ€ΡƒΠΆΠ΅Π½ΠΈΠ΅ Π»ΠΈΡ†, сСгмСнтация Π²ΠΈΠ΄Π΅ΠΎΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ², Ρ‡Ρ‚ΠΎ ΠΏΠΎΠΊΠ°Π·Π°Π½ΠΎ Π½Π° ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅ΠΌ рисункС:

2-Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ распознаваниС Π»ΠΈΡ†?

F ΠžΠ±Π½Π°Ρ€ΡƒΠΆΠ΅Π½ΠΈΠ΅ ace - это процСсс поиска ΠΈ извлСчСния Π»ΠΈΡ†Π° Π½Π° любом ΠΈΠ·ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΠΈ, Π²ΠΈΠ΄Π΅ΠΎ, Π²Π΅Π±-камСрС… Π½Π° основС Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… ΠΊΠΎΠ½ΠΊΡ€Π΅Ρ‚Π½Ρ‹Ρ… характСристик (Ρ†Π²Π΅Ρ‚Π° ΠΊΠΎΠΆΠΈ , нос, Π³Π»Π°Π·Π°, рот…) [8]

ΠœΠ΅Ρ‚ΠΎΠ΄, ΠΏΡ€Π΅Π΄Π»ΠΎΠΆΠ΅Π½Π½Ρ‹ΠΉ Полом Π’ΠΈΠΎΠ»ΠΎΠΉ ΠΈ Майклом ДТонсом Π² 2001 [9], Π°ΠΊΡ‚ΡƒΠ°Π»Π΅Π½ ΠΈ Π² наши Π΄Π½ΠΈ. Алгоритм позволяСт ΠΎΠ±Π½Π°Ρ€ΡƒΠΆΠΈΠ²Π°Ρ‚ΡŒ Ρ€Π°Π·Π»ΠΈΡ‡Π½Ρ‹Π΅ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Ρ‹, Π½ΠΎ Π² ΠΏΠ΅Ρ€Π²ΡƒΡŽ ΠΎΡ‡Π΅Ρ€Π΅Π΄ΡŒ Π±Ρ‹Π» ΠΎΡ€ΠΈΠ΅Π½Ρ‚ΠΈΡ€ΠΎΠ²Π°Π½ Π½Π° ΠΎΠ±Π½Π°Ρ€ΡƒΠΆΠ΅Π½ΠΈΠ΅ Π»ΠΈΡ† ΠΊΠ°ΠΊ Π½Π° изобраТСниях, Ρ‚Π°ΠΊ ΠΈ Π½Π° Π²ΠΈΠ΄Π΅ΠΎ ...

Π’ этом ΠΌΠ΅Ρ‚ΠΎΠ΄Π΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‚ΡΡ Π·Π½Π°ΠΊΠΈ Π₯Π°Π°Ρ€Π° - Π½Π°Π±ΠΎΡ€ элСмСнтарных сочСтаний Ρ‚Π΅ΠΌΠ½Ρ‹Ρ… ΠΈ свСтлых участков. Как ΠΏΠΎΠΊΠ°Π·Π°Π½ΠΎ Π½Π° рисункС Π½ΠΈΠΆΠ΅, Π·Π½Π°ΠΊΠΈ дСлятся Π½Π° Ρ‚Ρ€ΠΈ Ρ‚ΠΈΠΏΠ°: ΠΊΡ€ΠΎΠΌΠΎΡ‡Π½Ρ‹Π΅, Π»ΠΈΠ½Π΅ΠΉΠ½Ρ‹Π΅ ΠΈ Ρ†Π΅Π½Ρ‚Ρ€Π°Π»ΡŒΠ½Ρ‹Π΅.

Π’Π°ΠΊ Ρ‡Ρ‚ΠΎ Ссли участок, Π² ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΌ ΠΎΠ½ находится Π½Π° ΠΈΠ·ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΠΈ, Ссли Π·Π½Π°ΠΊΠΎΠ² достаточно, Ρ‚ΠΎ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ ΠΌΠΎΠΆΠ½ΠΎ ΡΡ‡ΠΈΡ‚Π°Ρ‚ΡŒ Π½Π°ΠΉΠ΄Π΅Π½Π½Ρ‹ΠΌ. Π’Π°ΠΊ, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, извСстно, Ρ‡Ρ‚ΠΎ вСрхняя Ρ‡Π°ΡΡ‚ΡŒ Ρ‰Π΅ΠΊ ΠΈ нос свСтлСС, Ρ‡Π΅ΠΌ ΠΎΠ±Π»Π°ΡΡ‚ΡŒ чСловСчСского Π³Π»Π°Π·Π°.

ΠšΠ°ΠΆΠ΄Ρ‹ΠΉ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ рассчитываСтся ΠΏΡƒΡ‚Π΅ΠΌ вычитания суммы пиксСлСй ΠΏΠΎΠ΄ Π±Π΅Π»Ρ‹ΠΌ ΠΏΡ€ΡΠΌΠΎΡƒΠ³ΠΎΠ»ΡŒΠ½ΠΈΠΊΠΎΠΌ ΠΈΠ· суммы пиксСлСй ΠΏΠΎΠ΄ Ρ‡Π΅Ρ€Π½Ρ‹ΠΌ ΠΏΡ€ΡΠΌΠΎΡƒΠ³ΠΎΠ»ΡŒΠ½ΠΈΠΊΠΎΠΌ . [11] Π­Ρ‚ΠΈ значСния ΠΏΡ€Π΅Π΄ΡΡ‚Π°Π²Π»ΡΡŽΡ‚ собой пиксСли Π² цСлостном ΠΈΠ·ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΠΈ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΡΠΎΠ²ΠΏΠ°Π΄Π°ΡŽΡ‚ с ΡƒΠ³Π»Π°ΠΌΠΈ ΠΏΡ€ΡΠΌΠΎΡƒΠ³ΠΎΠ»ΡŒΠ½ΠΈΠΊΠ° Π²ΠΎ Π²Ρ…ΠΎΠ΄Π½ΠΎΠΌ ΠΈΠ·ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΠΈ. Π­Ρ‚ΠΎ ΠΏΠΎΠΊΠ°Π·Π°Π½ΠΎ Π½Π° рисункС Π½ΠΈΠΆΠ΅. [12]

ΠšΡ€Π°Ρ‚ΠΊΠΎΠ΅ описаниС Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌΠ° Π’ΠΈΠΎΠ»Ρ‹-ДТонса:

  • Π˜Π·ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΡ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‚ΡΡ Π² ΠΈΠ½Ρ‚Π΅Π³Ρ€Π°Π»ΡŒΠ½ΠΎΠΌ прСдставлСнии, Ρ‡Ρ‚ΠΎ позволяСт быстро Ρ€Π°ΡΡΡ‡ΠΈΡ‚Π°Ρ‚ΡŒ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΡ‹Π΅ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Ρ‹;
  • Π‘ ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ свойств Π₯Π°Π°Ρ€Π° осущСствляСтся поиск Π½ΡƒΠΆΠ½ΠΎΠ³ΠΎ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π° (Π² Π΄Π°Π½Π½ΠΎΠΌ контСкстС сущности ΠΈ Π΅Π΅ характСристик);

  • ΠŸΠΎΠ²Ρ‹ΡˆΠ΅Π½ΠΈΠ΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ (ΡƒΠ»ΡƒΡ‡ΡˆΠ΅Π½ΠΈΠ΅, усилСниС) для Π²Ρ‹Π±ΠΎΡ€Π° Π½Π°ΠΈΠ±ΠΎΠ»Π΅Π΅ подходящих характСристик для ΠΆΠ΅Π»Π°Π΅ΠΌΠΎΠ³ΠΎ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π° Π² Π·Π°Π΄Π°Π½Π½ΠΎΠΉ части изобраТСния;

Для получСния Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΠΉ ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΠΈ Π²Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΠΏΡ€ΠΎΡ‡ΠΈΡ‚Π°Ρ‚ΡŒ этот пост, посвящСнный Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌΡƒ Π’ΠΈΠΎΠ»Ρ‹ ДТонса.

3- Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ распознаваниС Π»ΠΈΡ†?

ПослС примСнСния обнаруТСния Π»ΠΈΡ†Π° ΠΊ Π·Π°Π΄Π°Π½Π½ΠΎΠΌΡƒ ΠΊΠ°Π΄Ρ€Ρƒ (ΠΈΠ·ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΡŽ), Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌ распознаваниС Π»ΠΈΡ† пытаСтся Π½Π°ΠΉΡ‚ΠΈ Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ΅ совпадСниС этого ΠΈΠ·Π²Π»Π΅Ρ‡Π΅Π½Π½ΠΎΠ³ΠΎ Π»ΠΈΡ†Π° с Ρ‚Π΅ΠΌΠΈ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π΅ΡΡ‚ΡŒ Π² Π±Π°Π·Π΅ Π΄Π°Π½Π½Ρ‹Ρ… (ΠΎΠ±ΡƒΡ‡Π΅Π½Π½Ρ‹Π΅ ΠΎΠ±Ρ€Π°Π·Ρ†Ρ‹ / изобраТСния).

Бписок Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌΠΎΠ² распознавания Π»ΠΈΡ†:

1- LBPH
2- БобствСнныС Π»ΠΈΡ†Π°
3- Π Ρ‹Π±ΠΎΠ»ΠΎΠ²Ρ‹
4- SIFT
5- SURF

Π£ ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌΠ° Π΅ΡΡ‚ΡŒ свой собствСнный Π½Π°Π±ΠΎΡ€ инструкций ΠΈ ΠΏΡ€Π°Π²ΠΈΠ»Π° для распознавания Π»ΠΈΡ†Π° Π½Π° Π·Π°Π΄Π°Π½Π½ΠΎΠΌ ΠΈΠ·ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΠΈ.

Как ΡƒΠΏΠΎΠΌΠΈΠ½Π°Π»ΠΎΡΡŒ Π² Π½Π°Π·Π²Π°Π½ΠΈΠΈ, наша ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ° распознавания Π»ΠΈΡ† основана Π½Π° ΠΏΠΎΠ΄Ρ…ΠΎΠ΄Π΅ LBPH, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ описан Π² ΠΌΠΎΠ΅ΠΌ ΠΏΡ€Π΅Π΄Ρ‹Π΄ΡƒΡ‰Π΅ΠΌ постС (LBP).

Π˜Π·Π²Π»Π΅Ρ‡Π΅Π½ΠΈΠ΅ ΠΏΡ€ΠΈΠ·Π½Π°ΠΊΠΎΠ²

Π’ ΠΏΡ€Π΅Π΄Ρ‹Π΄ΡƒΡ‰Π΅ΠΌ постС ΠΌΡ‹ обсудили Π±Π°Π·ΠΎΠ²Ρ‹ΠΉ Ρ‚ΠΈΠΏ локального дСскриптора (LBP) ΠΈ Ρ‚ΠΎ, ΠΊΠ°ΠΊ ΠΎΠ½ рассчитываСтся. Π’Π΅ΠΏΠ΅Ρ€ΡŒ вопрос: "Π§Ρ‚ΠΎ дальшС?"

  • Π Π°Π·Π΄Π΅Π»ΠΈΡ‚Π΅ изобраТСния Π»ΠΈΡ† Π½Π° Π»ΠΎΠΊΠ°Π»ΡŒΠ½Ρ‹Π΅ области R (Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, R = 8 x 8 = 64 области), Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΈΠ·Π²Π»Π΅Ρ‡ΡŒ гистограммы LBP.

  • Гистограммы LBP, ΠΈΠ·Π²Π»Π΅Ρ‡Π΅Π½Π½Ρ‹Π΅ ΠΈΠ· ΠΊΠ°ΠΆΠ΄ΠΎΠΉ подобласти, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‚ΡΡ для расчСта ΠΈ ΠΎΠ±ΡŠΠ΅Π΄ΠΈΠ½ΡΡŽΡ‚ΡΡ Π² ΠΎΠ΄Π½Ρƒ гистограмму с Ρ€Π°ΡΡˆΠΈΡ€Π΅Π½Π½Ρ‹ΠΌΠΈ пространствСнными функциями, ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π½Ρ‹ΠΌΠΈ ΠΊΠ°ΠΊ:

Π“Π΄Π΅ :

n: - количСство Ρ€Π°Π·Π»ΠΈΡ‡Π½Ρ‹Ρ… этикСток, созданных ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€ΠΎΠΌ LBP.

m: - количСство субрСгионов.

Π° I {…} опрСдСляСтся ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ:

  • ΠšΠ»Π°ΡΡΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€ блиТайшСго сосСда ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ для сопоставлСния Π½ΠΎΠ²ΠΎΠ³ΠΎ изобраТСния с ΠΎΠ±ΡƒΡ‡Π΅Π½Π½Ρ‹ΠΌ шаблоном, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ вычисляСтся ΠΏΠΎ ΠΎΠ΄Π½ΠΎΠΉ ΠΈΠ· ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΡ… Ρ„ΠΎΡ€ΠΌΡƒΠ»:

Π³Π΄Π΅ S ΠΈ M - Π΄Π²Π΅ гистограммы LBP.

Поиск гистограммы Π½Π°ΠΈΠ»ΡƒΡ‡ΡˆΠ΅Π³ΠΎ совпадСния ΠΈΠ· списка Ρ‚Π°ΠΊΠΆΠ΅ ΠΌΠΎΠΆΠ½ΠΎ Ρ€Π΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Ρ‚ΡŒ, вычислив Π΅Π²ΠΊΠ»ΠΈΠ΄ΠΎΠ²ΠΎ расстояниС ΠΌΠ΅ΠΆΠ΄Ρƒ Π½ΠΎΠ²ΠΎΠΉ ΠΈ доступной гистограммами:

Π­Ρ‚ΠΎ всС для извлСчСния Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ.

Π”Π°Π»Π΅Π΅ процСсс распознавания выглядит ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ:
a- Π”ΠΎΠ±Π°Π²Π»Π΅Π½ΠΈΠ΅ Π½ΠΎΠ²ΠΎΠ³ΠΎ изобраТСния Π² ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡƒ для распознавания Π»ΠΈΡ†.
b- Π­Ρ‚ΠΎΡ‚ Ρ€Π°ΡΠΏΠΎΠ·Π½Π°Π²Π°Ρ‚Π΅Π»ΡŒ Π³Π΅Π½Π΅Ρ€ΠΈΡ€ΡƒΠ΅Ρ‚ гистограмму LBP для Π½ΠΎΠ²Ρ‹Ρ… ΠΈΠ·ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΠΉ.
c) Π—Π°Ρ‚Π΅ΠΌ ΠΎΠ½ сравниваСт эту гистограмму с ΡΡƒΡ‰Π΅ΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΠΌΠΈ.
d) НаконСц, ΠΎΠ½ Π½Π°Ρ…ΠΎΠ΄ΠΈΡ‚ Π»ΡƒΡ‡ΡˆΠ΅Π΅ совпадСниС ΠΈ Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ имя Ρ‡Π΅Π»ΠΎΠ²Π΅ΠΊΠ°, связанного с этим Π»ΡƒΡ‡ΡˆΠΈΠΌ совпадСниСм.

РСализация Python

Для Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ этого ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π° я Ρ€Π΅ΡˆΠΈΠ» Π²Ρ‹Π±Ρ€Π°Ρ‚ΡŒ python Π² качСствС ΠΌΠΎΠ΅Π³ΠΎ любимого языка программирования ΠΈΠ·-Π·Π° Π΅Π³ΠΎ большой популярности Π² ΠΊΠΎΠΌΠΏΡŒΡŽΡ‚Π΅Ρ€Π½ΠΎΠΌ Π·Ρ€Π΅Π½ΠΈΠΈ ΠΈ машинном ΠΎΠ±ΡƒΡ‡Π΅Π½ΠΈΠΈ.

ΠŸΠ΅Ρ€Π΅Π΄ запуском ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ ΡƒΡΡ‚Π°Π½ΠΎΠ²ΠΈΡ‚ΡŒ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠ΅ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΡ‹Π΅ Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠΈ:

-----------------------------OpenCV---------------------------------
# OpenCV with conda
conda install -c conda-forge opencv
# Update pip :package manager for Python packages
pip install -U pip 
pip show pip
# OpenCV with pip
pip install opencv-python  
pip install opencv-contrib-python
# Install pip3 :package manager for Python3 packages
sudo apt-get -y install python3-pip
# OpenCV with pip3
pip3 install opencv-python
pip3 --version
--------------------------Numpy library-----------------------------
# With conda
conda update conda # update conda
conda install -c anaconda numpy
# with pip, pip3
pip install numpy
pip3 install numpy

Код Python для распознавания Π»ΠΈΡ†

ΠžΠ±Π½Π°Ρ€ΡƒΠΆΠ΅Π½ΠΈΠ΅ Π»ΠΈΡ† выполняСтся с использованиСм классификатора каскадного Ρ‚ΠΈΠΏΠ° с Python ΠΈ OpenCV.

НаТмитС Π—Π΄Π΅ΡΡŒ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΎΡ‚ΠΊΡ€Ρ‹Ρ‚ΡŒ ΠΎΡ„ΠΈΡ†ΠΈΠ°Π»ΡŒΠ½ΠΎΠ΅ руководство ΠΏΠΎ OpenCV, ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ΅ доступно Π½Π° Ρ‚Ρ€Π΅Ρ… Ρ€Π°Π·Π½Ρ‹Ρ… языках: Python, C ++. ΠΈ Java.

Π‘ΠΎΠ·Π΄Π°Π½ΠΈΠ΅ экзСмпляра класса каскадного классификатора для обнаруТСния ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ²:

cascade_file_path = "path for certain cascade file (xml extension)" 
face_cascade = cv2.CascadeClassifier(cascade_file_path)

detectMultiScale-Ѐункция для обнаруТСния Π»ΠΈΡ† ΠΈ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ². Π§Ρ‚ΠΎΠ±Ρ‹ функция Π½Π°Ρ…ΠΎΠ΄ΠΈΠ»Π° ΠΈΠΌΠ΅Π½Π½ΠΎ Π»ΠΈΡ†Π°, ΠΏΠ΅Ρ€Π΅Π΄Π°Π΅ΠΌ Π΅Π΅ Π² ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΠΉ каскад.

Ѐункция detectMultiScale ΠΏΡ€ΠΈΠ½ΠΈΠΌΠ°Π΅Ρ‚ 7 ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΎΠ², срСди ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… Π΅ΡΡ‚ΡŒ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ 4 Π²Π°ΠΆΠ½Ρ‹Ρ… Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚Π°:

void cv::CascadeClassifier::detectMultiScale(
InputArray image,                                         std::vector< Rect > & objects,
double scaleFactor = 1.1,
int minNeighbors = 3,
int flags = 0,
Size minSize = Size(),
Size maxSize = Size() )
  • ScaleFactor - ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€, ΠΏΠΎΠΊΠ°Π·Ρ‹Π²Π°ΡŽΡ‰ΠΈΠΉ, насколько Ρ€Π°Π·ΠΌΠ΅Ρ€ изобраТСния ΡƒΠΌΠ΅Π½ΡŒΡˆΠ°Π΅Ρ‚ΡΡ ΠΏΡ€ΠΈ ΠΊΠ°ΠΆΠ΄ΠΎΠΌ ΠΌΠ°ΡΡˆΡ‚Π°Π±Π΅ изобраТСния. Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, Β«1,1Β» ΠΎΠ·Π½Π°Ρ‡Π°Π΅Ρ‚ ΡƒΠΌΠ΅Π½ΡŒΡˆΠ΅Π½ΠΈΠ΅ Ρ€Π°Π·ΠΌΠ΅Ρ€Π° Π½Π° 10%, увСличивая Π²Π΅Ρ€ΠΎΡΡ‚Π½ΠΎΡΡ‚ΡŒ Ρ‚ΠΎΠ³ΠΎ, Ρ‡Ρ‚ΠΎ Ρ€Π°Π·ΠΌΠ΅Ρ€ соотвСтствуСт Π½Π°ΠΉΠ΄Π΅Π½Π½ΠΎΠΌΡƒ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Ρƒ для обнаруТСния.

  • minNeighbors - этот ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ влияСт Π½Π° качСство распознавания Π»ΠΈΡ†. Π§Π΅ΠΌ Π²Ρ‹ΡˆΠ΅ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅, Ρ‚Π΅ΠΌ мСньшС ΠΎΠ±Π½Π°Ρ€ΡƒΠΆΠ΅Π½ΠΈΠΉ, Π½ΠΎ с Π±ΠΎΠ»Π΅Π΅ высоким качСством. 3~6 - Ρ…ΠΎΡ€ΠΎΡˆΠ΅Π΅ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ для распознавания Π»ΠΈΡ†.
  • minSize - минимально Π²ΠΎΠ·ΠΌΠΎΠΆΠ½Ρ‹ΠΉ Ρ€Π°Π·ΠΌΠ΅Ρ€ ΠΎΠ±Π½Π°Ρ€ΡƒΠΆΠΈΠ²Π°Π΅ΠΌΠΎΠ³ΠΎ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π°. ΠžΠ±ΡŠΠ΅ΠΊΡ‚Ρ‹ мСньшСго Ρ€Π°Π·ΠΌΠ΅Ρ€Π° ΠΈΠ³Π½ΠΎΡ€ΠΈΡ€ΡƒΡŽΡ‚ΡΡ. ΠžΠ±Ρ‹Ρ‡Π½ΠΎ [30, 30] is a ΠΏΠΎΠ΄Ρ…ΠΎΠ΄ΠΈΡ‚ для распознавания Π»ΠΈΡ†.
  • maxSize- Максимально Π²ΠΎΠ·ΠΌΠΎΠΆΠ½Ρ‹ΠΉ Ρ€Π°Π·ΠΌΠ΅Ρ€ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π°. ΠžΠ±ΡŠΠ΅ΠΊΡ‚Ρ‹ большСго Ρ€Π°Π·ΠΌΠ΅Ρ€Π° ΠΈΠ³Π½ΠΎΡ€ΠΈΡ€ΡƒΡŽΡ‚ΡΡ. По ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ для распознавания Π»ΠΈΡ† Π½Π΅Ρ‚ Π²Π΅Ρ€Ρ…Π½Π΅Π³ΠΎ ΠΏΡ€Π΅Π΄Π΅Π»Π°.

Π’ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅ΠΌΠΎΠ΅ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ этой Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ:

Массив NumPy , Ссли Π»ΠΈΡ†ΠΎ ΡƒΡΠΏΠ΅ΡˆΠ½ΠΎ ΠΎΠ±Π½Π°Ρ€ΡƒΠΆΠ΅Π½ΠΎ. [[X, y, width, height]]

Или пустой ΠΊΠΎΡ€Ρ‚Π΅ΠΆ, Ссли Π½ΠΈΡ‡Π΅Π³ΠΎ Π½Π΅ ΠΎΠ±Π½Π°Ρ€ΡƒΠΆΠ΅Π½ΠΎ. ()

image_path ="absolute or relative path for a given image"
image = cv2.imread(image_path)
gray = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY)
faces = face_cascade.detectMultiScale(
    gray,
    scaleFactor= 1.1,
    minNeighbors= 4,
    minSize=(30, 30)
)

ПослС обнаруТСния Π»ΠΈΡ† ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ° ΠΈΡ‰Π΅Ρ‚ ΠΏΡ€Π°Π²Ρ‹ΠΉ Π³Π»Π°Π· (Π±Π΅Π»Ρ‹ΠΉ ΠΏΡ€ΡΠΌΠΎΡƒΠ³ΠΎΠ»ΡŒΠ½ΠΈΠΊ) ΠΈ Π»Π΅Π²Ρ‹ΠΉ Π³Π»Π°Π· (ΠΆΠ΅Π»Ρ‚Ρ‹ΠΉ ΠΏΡ€ΡΠΌΠΎΡƒΠ³ΠΎΠ»ΡŒΠ½ΠΈΠΊ), ΠΊΠ°ΠΊ ΠΏΠΎΠΊΠ°Π·Π°Π½ΠΎ Π½Π° рисункС:

ПослС нахоТдСния Ρ†Π΅Π½Ρ‚Ρ€ΠΎΠ² Π³Π»Π°Π· ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ° выполняСт ΠΏΠΎΠ²ΠΎΡ€ΠΎΡ‚ Π½Π° ΡƒΠ³ΠΎΠ» ΞΈ, вычислСнный ΠΏΠΎ Ρ„ΠΎΡ€ΠΌΡƒΠ»Π΅:

Богласно Google [21], Π²Ρ‹Ρ€Π°Π²Π½ΠΈΠ²Π°Π½ΠΈΠ΅ Π»ΠΈΡ† ΡƒΠ²Π΅Π»ΠΈΡ‡ΠΈΠ²Π°Π΅Ρ‚ Ρ‚ΠΎΡ‡Π½ΠΎΡΡ‚ΡŒ Π΅Π³ΠΎ ΠΌΠΎΠ΄Π΅Π»ΠΈ распознавания Π»ΠΈΡ† FaceNet с 98,87 Π΄ΠΎ 99,63.

Π§Ρ‚ΠΎΠ±Ρ‹ Π½Π°ΠΉΡ‚ΠΈ ΡƒΠ³ΠΎΠ» ΠΏΠΎΠ²ΠΎΡ€ΠΎΡ‚Π°, ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ΅ Ρ‚Ρ€Π΅Π±ΡƒΡŽΡ‚ΡΡ значСния Β«eyeXdisΒ» (смСТный) ΠΈ Β«eyeYdisΒ» (ΠΏΡ€ΠΎΡ‚ΠΈΠ²ΠΎΠΏΠΎΠ»ΠΎΠΆΠ½Ρ‹ΠΉ), ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΌΠΎΠΆΠ½ΠΎ Ρ€Π°ΡΡΡ‡ΠΈΡ‚Π°Ρ‚ΡŒ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ:

eyeXdis = (lx + w / 2 + lw / 2) - (rx + rw / 2)
eyeYdis = (ly + lh / 2) - (ry + rh / 2)
angle_rad = np.arctan (eyeYdis / eyeXdis)
# convert rad to degree
angle_degree = angle_rad * 180 / np.pi

ПослС нахоТдСния значСния ΡƒΠ³Π»Π° выравнивания Π²Ρ€Π°Ρ‰Π΅Π½ΠΈΠ΅ ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΎ с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΎΠ² Β«warpAffineΒ» ΠΈ Β«getRotationMatrix2DΒ» , прСдоставлСнных OpenCV.

# Find the center of the image
image_center = tuple(np.array(gray_chunk.shape) / 2)rot_mat = cv2.getRotationMatrix2D(image_center, angle_degree, 1.0)
rotated_image = cv2.warpAffine(gray_chunk, rot_mat,gray_chunk.shape, flags=cv2.INTER_LINEAR)

ΠœΠ΅Ρ‚ΠΎΠ΄ cv2.warpAffine ΠΏΡ€ΠΈΠ½ΠΈΠΌΠ°Π΅Ρ‚ Ρ‚Ρ€ΠΈ основных ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Π°.

1- исходноС ΠΈΠ·ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅: gray_chunk

2-ΠΌΠ°Ρ‚Ρ€ΠΈΡ†Π° прСобразования, Π² Π΄Π°Π½Π½ΠΎΠΌ случаС ΠΌΠ°Ρ‚Ρ€ΠΈΡ†Π° вращСния: rot_mat

3-ΠΊΠΎΡ€Ρ‚Π΅ΠΆ с Ρ€Π°Π·ΠΌΠ΅Ρ€Π°ΠΌΠΈ Π²Ρ‹Ρ…ΠΎΠ΄Π½ΠΎΠ³ΠΎ изобраТСния: gray_chunk.shape

Π­Ρ‚ΠΎΡ‚ ΠΌΠ΅Ρ‚ΠΎΠ΄ Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ ΠΏΠΎΠ²Π΅Ρ€Π½ΡƒΡ‚ΠΎΠ΅ ΠΈΠ·ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅.

Π’Π΅ΠΏΠ΅Ρ€ΡŒ ΠΏΠΎΠ²Π΅Ρ€Π½ΡƒΡ‚ΠΎΠ΅ ΠΈΠ·ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅ Π±ΡƒΠ΄Π΅Ρ‚ сохранСно Π² ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π½ΠΎΠΉ ΠΏΠ°ΠΏΠΊΠ΅ (Π½Π°Π±ΠΎΡ€Π΅ Π΄Π°Π½Π½Ρ‹Ρ…) с Π½ΠΎΠΌΠ΅Ρ€ΠΎΠΌ Ρ„ΠΎΡ‚ΠΎΠ³Ρ€Π°Ρ„ΠΈΠΈ (счСтчиком) ΠΈ ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€ΠΎΠΌ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π°.
Π­Ρ‚ΠΎΡ‚ процСсс повторяСтся Π΄ΠΎ Ρ‚Π΅Ρ… ΠΏΠΎΡ€, ΠΏΠΎΠΊΠ° Π½Π΅ Π±ΡƒΠ΄Π΅Ρ‚ ΠΏΠΎΠ»ΡƒΡ‡Π΅Π½ΠΎ 50 ΠΈΠ·ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΠΉ Π»ΠΈΡ†. ПозТС эти ΠΎΠ±Ρ€Π°Π·Ρ†Ρ‹ Π±ΡƒΠ΄ΡƒΡ‚ Π·Π°Π³Ρ€ΡƒΠΆΠ΅Π½Ρ‹ Π² модСль для Ρ†Π΅Π»Π΅ΠΉ обучСния.

МодСльноС ΠΎΠ±ΡƒΡ‡Π΅Π½ΠΈΠ΅

Π’ этот ΠΌΠΎΠΌΠ΅Π½Ρ‚ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ ΡƒΠΊΠ°Π·Π°Ρ‚ΡŒ, ΠΊΠ°ΠΊΠΎΠΉ ΠΌΠ΅Ρ‚ΠΎΠ΄ распознавания ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Π² ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ΅, Π° ΠΈΠΌΠ΅Π½Π½ΠΎ ΠΌΠ΅Ρ‚ΠΎΠ΄ гистограмм Π»ΠΎΠΊΠ°Π»ΡŒΠ½Ρ‹Ρ… Π΄Π²ΠΎΠΈΡ‡Π½Ρ‹Ρ… ΠΎΠ±Ρ€Π°Π·ΠΎΠ². Π­Ρ‚ΠΎ ΠΌΠΎΠΆΠ½ΠΎ Ρ€Π΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Ρ‚ΡŒ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΌ способом.

recognizer = cv2.face.LBPHFaceRecognizer_create(
int radius = 1,
int neighbors = 8,
int grid_x = 8,
int grid_y = 8)

1- Радиус: «Радиус, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌΡ‹ΠΉ для построСния ΠΊΡ€ΡƒΠ³ΠΎΠ²ΠΎΠ³ΠΎ локального Π΄Π²ΠΎΠΈΡ‡Π½ΠΎΠ³ΠΎ массива. Π§Π΅ΠΌ большС радиус, Ρ‚Π΅ΠΌ Ρ€ΠΎΠ²Π½Π΅Π΅ ΠΈΠ·ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅, Π½ΠΎ Π²Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ большС пространствСнной ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΠΈ Β». [22]

2- БосСди: Β«ΠšΠΎΠ»ΠΈΡ‡Π΅ΡΡ‚Π²ΠΎ Ρ‚ΠΎΡ‡Π΅ΠΊ Π²Ρ‹Π±ΠΎΡ€ΠΊΠΈ для построСния ΠΊΡ€ΡƒΠ³ΠΎΠ²ΠΎΠΉ локальной Π΄Π²ΠΎΠΈΡ‡Π½ΠΎΠΉ структуры. ΠŸΠΎΠ΄Ρ…ΠΎΠ΄ΡΡ‰ΠΈΠΌ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ΠΌ являСтся использованиС 8 Ρ‚ΠΎΡ‡Π΅ΠΊ Π²Ρ‹Π±ΠΎΡ€ΠΊΠΈ. ΠŸΠΎΠΌΠ½ΠΈΡ‚Π΅: Ρ‡Π΅ΠΌ большС Ρ‚ΠΎΡ‡Π΅ΠΊ Π²Ρ‹ Π²ΠΊΠ»ΡŽΡ‡ΠΈΡ‚Π΅, Ρ‚Π΅ΠΌ Π²Ρ‹ΡˆΠ΅ Π±ΡƒΠ΄ΡƒΡ‚ Π²Ρ‹Ρ‡ΠΈΡΠ»ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹Π΅ Π·Π°Ρ‚Ρ€Π°Ρ‚Ρ‹ Β». [22]

3- Grid_x: Β«ΠšΠΎΠ»ΠΈΡ‡Π΅ΡΡ‚Π²ΠΎ ячССк ΠΏΠΎ Π³ΠΎΡ€ΠΈΠ·ΠΎΠ½Ρ‚Π°Π»ΠΈ, 8 - это ΠΎΠ±Ρ‰Π΅Π΅ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌΠΎΠ΅ Π² публикациях. Π§Π΅ΠΌ большС ячССк, Ρ‚Π΅ΠΌ ΠΌΠ΅Π»ΡŒΡ‡Π΅ сСтка, Ρ‚Π΅ΠΌ Π²Ρ‹ΡˆΠ΅ Ρ€Π°Π·ΠΌΠ΅Ρ€Π½ΠΎΡΡ‚ΡŒ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚ΠΈΡ€ΡƒΡŽΡ‰Π΅Π³ΠΎ Π²Π΅ΠΊΡ‚ΠΎΡ€Π° ΠΏΡ€ΠΈΠ·Π½Π°ΠΊΠΎΠ² Β». [22]

4- Grid_y: Β«ΠšΠΎΠ»ΠΈΡ‡Π΅ΡΡ‚Π²ΠΎ ячССк Π² Π²Π΅Ρ€Ρ‚ΠΈΠΊΠ°Π»ΡŒΠ½ΠΎΠΌ Π½Π°ΠΏΡ€Π°Π²Π»Π΅Π½ΠΈΠΈ, 8 - ΠΎΠ±Ρ‹Ρ‡Π½ΠΎΠ΅ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌΠΎΠ΅ Π² публикациях. Π§Π΅ΠΌ большС ячССк, Ρ‚Π΅ΠΌ ΠΌΠ΅Π»ΡŒΡ‡Π΅ сСтка, Ρ‚Π΅ΠΌ Π²Ρ‹ΡˆΠ΅ Ρ€Π°Π·ΠΌΠ΅Ρ€Π½ΠΎΡΡ‚ΡŒ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚ΠΈΡ€ΡƒΡŽΡ‰Π΅Π³ΠΎ Π²Π΅ΠΊΡ‚ΠΎΡ€Π° ΠΏΡ€ΠΈΠ·Π½Π°ΠΊΠΎΠ² Β». [22]

Π—Π°Ρ‚Π΅ΠΌ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ° Π½Π°Ρ…ΠΎΠ΄ΠΈΡ‚ всС изобраТСния Π² ΠΏΠ°ΠΏΠΊΠ΅ Π½Π°Π±ΠΎΡ€Π° Π΄Π°Π½Π½Ρ‹Ρ… ΠΏΠΎ ΠΈΠΌΠ΅Π½ΠΈ ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ изобраТСния (Π² Ρ„Π°ΠΉΠ»Π΅ users_name.txt), ΠΏΡ€Π΅ΠΎΠ±Ρ€Π°Π·ΡƒΠ΅Ρ‚ эти изобраТСния Π² массивы, Π° Π·Π°Ρ‚Π΅ΠΌ ΠΏΠ΅Ρ€Π΅Π΄Π°Π΅Ρ‚ ΠΈΡ… ΠΈ ΠΈΡ… ID Π² Ρ€Π°ΡΠΏΠΎΠ·Π½Π°Π²Π°Ρ‚Π΅Π»ΡŒ для обучСния. ПослС этого модСль создаСт Ρ„Π°ΠΉΠ» Ρ„ΠΎΡ€ΠΌΠ°Ρ‚Π° .yaml, содСрТащий ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΠ΅ гистограммы ΠΈ ΠΈΡ… ΠΌΠ΅Ρ‚ΠΊΠΈ (ΠΊΠΎΠ½Ρ‚Ρ€ΠΎΠ»ΠΈΡ€ΡƒΠ΅ΠΌΠΎΠ΅ ΠΎΠ±ΡƒΡ‡Π΅Π½ΠΈΠ΅), для дальнСйшСго распознавания.

Π Π°Π±ΠΎΡ‡ΠΈΠΉ процСсс ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹

Π’ этом Ρ€Π°Π·Π΄Π΅Π»Π΅ ΠΌΡ‹ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌ 2 сцСнария:
a- сбор Π΄Π°Π½Π½Ρ‹Ρ… ΠΈ ΠΎΠ±ΡƒΡ‡Π΅Π½ΠΈΠ΅:

python3 Train.py -v videos/video3.mkv # if you have a pre-recorded #video
python3 Train.py -c 0 # 0 is the id of the built-in camera

Π’Π΅ΠΏΠ΅Ρ€ΡŒ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ° запросит имя Ρ‡Π΅Π»ΠΎΠ²Π΅ΠΊΠ°:

ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ° Π·Π°Ρ‚Π΅ΠΌ сгСнСрируСт Ρ„Π°ΠΉΠ» users_name.txt, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΡΠΎΡ…Ρ€Π°Π½ΠΈΡ‚ΡŒ имя Ρ‡Π΅Π»ΠΎΠ²Π΅ΠΊΠ° ΠΈ Π΅Π³ΠΎ ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€.

Π’Π΅ΠΏΠ΅Ρ€ΡŒ начнСтся процСсс Π·Π°Ρ…Π²Π°Ρ‚Π°:

ПослС Π·Π°Ρ…Π²Π°Ρ‚Π° 50 ΠΎΠ±Ρ€Π°Π·Ρ†ΠΎΠ², ΠΊΠ°ΠΊ это прСдусмотрСно Π² основной Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ, начнСтся этап обучСния:

это сгСнСрируСт Ρ„Π°ΠΉΠ» Β«train.YAMLΒ», содСрТащий гистограммы ΠΈ ΠΈΡ… ΠΌΠ΅Ρ‚ΠΊΠΈ:

Π’Π΅ΠΏΠ΅Ρ€ΡŒ Π²Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΠΏΠ΅Ρ€Π΅ΠΉΡ‚ΠΈ ΠΊ основной ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΈ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ - Ρ€Π°ΡΠΏΠΎΠ·Π½Π°Π²Π°Π½ΠΈΡŽ Π»ΠΈΡ†:

b- распознаваниС Π»ΠΈΡ†:

python3 Recognize.py -v videos/video3.mkv # if you have a pre-recorded #video
python3 Recognize.py -c 0 # 0 is the id of the built-in camera

ΠžΠ±Ρ€Π°Ρ‚ΠΈΡ‚Π΅ Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅, Ρ‡Ρ‚ΠΎ Π΄ΠΎΡΡ‚ΠΎΠ²Π΅Ρ€Π½ΠΎΡΡ‚ΡŒ мСньшС 100. Π‘ΠΎΠ»Π΅Π΅ низкая Π΄ΠΎΡΡ‚ΠΎΠ²Π΅Ρ€Π½ΠΎΡΡ‚ΡŒ ΠΎΠ·Π½Π°Ρ‡Π°Π΅Ρ‚, Ρ‡Ρ‚ΠΎ Π»ΠΈΡ†ΠΎ Π±ΠΎΠ»Π΅Π΅ ΠΏΠΎΡ…ΠΎΠΆΠ΅ Π½Π° ΠΎΠ±ΡƒΡ‡Π΅Π½Π½ΠΎΠ΅ Π»ΠΈΡ†ΠΎ. Β«0Β» - идСальноС совпадСниС.

Π’Π΅ΠΏΠ΅Ρ€ΡŒ я Π΄ΠΎΠ±Π°Π²ΠΈΠ» Π½ΠΎΠ²ΡƒΡŽ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ для этой ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹: ΠΊΠΎΠ³Π΄Π° Π»ΠΈΡ†ΠΎ Π½Π΅ обнаруТиваСтся каскадом волос, ΠΎΠ½ΠΎ Π±ΡƒΠ΄Π΅Ρ‚ ΠΎΠ±Π½Π°Ρ€ΡƒΠΆΠ΅Π½ΠΎ Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌΠΎΠΌ ΠΏΠΎΡ€ΠΎΠ³ΠΎΠ²ΠΎΠ³ΠΎ значСния Ρ‚ΠΎΠ½Π° ΠΊΠΎΠΆΠΈ, описанным Π² ΠΌΠΎΠΈΡ… ΠΏΡ€Π΅Π΄Ρ‹Π΄ΡƒΡ‰ΠΈΡ… сообщСниях [8]

Π§Ρ‚ΠΎΠ±Ρ‹ Π½Π°ΠΏΠΈΡΠ°Ρ‚ΡŒ тСкст Π½Π° ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ»ΡŒΠ½ΠΎΠΌ ΠΈΠ·ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΠΈ, Π²Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ [23]:

putText (image, text, coordinates, font type, font scale,color [, pen thickness [, line type [, center of coordinates]]])

ΠŸΡ€ΠΈΠ½ΠΈΠΌΠ°Π΅Ρ‚ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠ΅ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Ρ‹:

  • Ρ€Π°ΠΌΠΊΠ° - ΠΈΠ·ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅, Π½Π° ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΌ ΠΌΡ‹ Ρ…ΠΎΡ‚ΠΈΠΌ Π½Π°ΠΏΠΈΡΠ°Ρ‚ΡŒ тСкст;
  • тСкст - тСкст, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΠΌΡ‹ собираСмся ΠΎΡ‚ΠΎΠ±Ρ€Π°Π·ΠΈΡ‚ΡŒ Π²ΠΎ Ρ„Ρ€Π΅ΠΉΠΌΠ΅;
  • ΠΊΠΎΠΎΡ€Π΄ΠΈΠ½Π°Ρ‚Ρ‹ - Π½Π°Π±ΠΎΡ€ ΠΈΠ· Π΄Π²ΡƒΡ… ΠΊΠΎΠΎΡ€Π΄ΠΈΠ½Π°Ρ‚ Π² Π½ΠΈΠΆΠ½Π΅ΠΌ Π»Π΅Π²ΠΎΠΌ ΡƒΠ³Π»Ρƒ тСкста, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€ (1,5);
  • Ρ‚ΠΈΠΏ ΡˆΡ€ΠΈΡ„Ρ‚Π° - ΠΎΠ΄Π½Π° ΠΈΠ· ΡƒΠΊΠ°Π·Π°Π½Π½Ρ‹Ρ… Π½ΠΈΠΆΠ΅ констант;
  • ΠΌΠ°ΡΡˆΡ‚Π°Π± ΡˆΡ€ΠΈΡ„Ρ‚Π° - Ρ€Π°Π·ΠΌΠ΅Ρ€ ΡˆΡ€ΠΈΡ„Ρ‚Π°. НапримСр, для увСличСния ΡˆΡ€ΠΈΡ„Ρ‚Π° Π² 3 Ρ€Π°Π·Π° - ΡΡ‚Π°Π²ΡŒΡ‚Π΅ 2, для ΡƒΠΌΠ΅Π½ΡŒΡˆΠ΅Π½ΠΈΡ Π² 3 Ρ€Π°Π·Π° - 0,3;
  • Ρ†Π²Π΅Ρ‚ - ΠΊΠΎΡ€Ρ‚Π΅ΠΆ ΠΈΠ· Ρ‚Ρ€Π΅Ρ… чисСл ΠΎΡ‚ 0 Π΄ΠΎ 255, ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΡΡŽΡ‰ΠΈΡ… Ρ†Π²Π΅Ρ‚ Π² ΠΌΠΎΠ΄Π΅Π»ΠΈ RGB. Π—Π΅Π»Π΅Π½Ρ‹ΠΉ Ρ†Π²Π΅Ρ‚ - (0,255,0);
  • Ρ‚ΠΎΠ»Ρ‰ΠΈΠ½Π° ΠΏΠ΅Ρ€Π° - Π½Π΅ΠΎΠ±ΡΠ·Π°Ρ‚Π΅Π»ΡŒΠ½Ρ‹ΠΉ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€;
  • Ρ‚ΠΈΠΏ Π»ΠΈΠ½ΠΈΠΈ - Π½Π΅ΠΎΠ±ΡΠ·Π°Ρ‚Π΅Π»ΡŒΠ½Ρ‹ΠΉ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€, ΠΎΠ΄Π½ΠΎ ΠΈΠ· Ρ‚Ρ€Π΅Ρ… Π·Π½Π°Ρ‡Π΅Π½ΠΈΠΉ: LINE_8 пунктирная линия малая, LINE_4 - пунктирная линия большая, LINE_AA - сглаТСнная линия;
  • Ρ†Π΅Π½Ρ‚Ρ€ ΠΊΠΎΠΎΡ€Π΄ΠΈΠ½Π°Ρ‚ - Π½Π΅ΠΎΠ±ΡΠ·Π°Ρ‚Π΅Π»ΡŒΠ½Ρ‹ΠΉ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€. По ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ ΠΊΠΎΠΎΡ€Π΄ΠΈΠ½Π°Ρ‚Ρ‹ тСкста ΠΎΡ‚ΡΡ‡ΠΈΡ‚Ρ‹Π²Π°ΡŽΡ‚ΡΡ ΠΎΡ‚ Π»Π΅Π²ΠΎΠ³ΠΎ Π²Π΅Ρ€Ρ…Π½Π΅Π³ΠΎ ΡƒΠ³Π»Π°.

Π’ΠΈΠΏΡ‹ ΡˆΡ€ΠΈΡ„Ρ‚ΠΎΠ²:

  • FONT_HERSHEY_SIMPLEX
  • FONT_HERSHEY_PLAIN
  • FONT_HERSHEY_DUPLEX
  • FONT_HERSHEY_COMPLEX
  • FONT_HERSHEY_TRIPLEX
  • FONT_HERSHEY_COMPLEX_SMALL
  • FONT_HERSHEY_SCRIPT_SIMPLEX
  • FONT_HERSHEY_SCRIPT_COMPLEX

функция для рисования настраиваСмого ΠΏΡ€ΡΠΌΠΎΡƒΠ³ΠΎΠ»ΡŒΠ½ΠΈΠΊΠ° Π²ΠΎΠΊΡ€ΡƒΠ³ ΠΎΠ±Π½Π°Ρ€ΡƒΠΆΠ΅Π½Π½ΠΎΠ³ΠΎ Π»ΠΈΡ†Π°:

def Draw_Rect(self,Image,face,color):
        x,y,w,h = face
        # line 1 : top left corner horizontal line 
        cv2.line(Image, (x, y), (int(x + (w/5)),y), color, 2)
        # line 2 : top right corner horizontal line 
        cv2.line(Image, (int(x+((w/5)*4)), y), (x+w, y), color, 2)
        # line 3 : top left corner vertical line 
        cv2.line(Image, (x, y), (x,int(y+(h/5))), color, 2)
        # line 4 : top right corner vertical line 
        cv2.line(Image, (x+w, y), (x+w, int(y+(h/5))), color, 2)
        # line 5 : bottom left corner vertical line 
        cv2.line(Image, (x, int(y+(h/5*4))), (x, y+h), color, 2)
        # line 6 : bottom left corner horizontal line 
        cv2.line(Image, (x, int(y+h)), (x + int(w/5) ,y+h), color,2)
        # line 6 : bottom right corner horizontal line 
        cv2.line(Image,(x+int((w/5)*4),y+h),(x + w, y + h),color, 2)
        # line 6 : bottom right corner verticals line 
        cv2.line(Image, (x+w, int(y+(h/5*4))), (x+w, y+h), color, 2)

OpenCV прСдоставляСт Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ для прогнозирования ΠΌΠ΅Ρ‚ΠΊΠΈ Π½ΠΎΠ²ΠΎΠ³ΠΎ изобраТСния:

id, confidence = recognizer.predict(gray_scale_face)

Он ΠΏΡ€ΠΈΠ½ΠΈΠΌΠ°Π΅Ρ‚ Π² качСствС ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Π° Π·Π°Ρ…Π²Π°Ρ‡Π΅Π½Π½ΡƒΡŽ Ρ‡Π°ΡΡ‚ΡŒ Π»ΠΈΡ†Π°, ΠΊΠΎΡ‚ΠΎΡ€ΡƒΡŽ Π½ΡƒΠΆΠ½ΠΎ ΠΏΡ€ΠΎΠ°Π½Π°Π»ΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ ΠΈ Π²Π΅Ρ€Π½ΡƒΡ‚ΡŒ Π΅Π΅ ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€ ΠΈ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ достовСрности.

Бводная ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΡŒ дСйствий ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹:
1. Π—Π°Ρ…Π²Π°Ρ‚ ΠΈΠ·ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΠΉ.
2. Π˜Π·Π²Π»Π΅ΠΊΠΈΡ‚Π΅ ΠΎΠ±Π»Π°ΡΡ‚ΡŒ Π»ΠΈΡ†Π° с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ классификатора Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ Π₯Π°Π°Ρ€Π°.
3. ΠŸΠΎΠ²Π΅Ρ€Π½ΠΈΡ‚Π΅ ΠΈΠ·ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅ с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ ΠΏΠΎΠ΄ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π½Ρ‹ΠΌ ΡƒΠ³Π»ΠΎΠΌ.
4. ΠžΠ±ΡƒΡ‡ΠΈΡ‚Π΅ изобраТСния ΠΈ ΠΌΠ΅Ρ‚ΠΊΠΈ Π² качСствС ΠΎΠ±ΡƒΡ‡Π°ΡŽΡ‰ΠΈΡ… Π΄Π°Π½Π½Ρ‹Ρ… с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ FaceRecognizer (train ()).
5. ΠŸΠΎΠ²Ρ‚ΠΎΡ€ΠΈΡ‚Π΅ шаги с 1 ΠΏΠΎ 4 для всСх ΠΎΠ±ΡƒΡ‡Π°ΡŽΡ‰ΠΈΡ… ΠΈΠ·ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΠΉ.
6. Π—Π°Π³Ρ€ΡƒΠ·ΠΈΡ‚Π΅ тСстовыС изобраТСния для распознаваниС.
7. Π˜Π·Π²Π»Π΅ΠΊΠΈΡ‚Π΅ ΠΎΠ±Π»Π°ΡΡ‚ΡŒ Π»ΠΈΡ†Π° с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ классификатора ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ² Ρ‚ΠΈΠΏΠ° Π₯Π°Π°Ρ€Π°.
8. Π˜Π·ΠΌΠ΅Π½ΠΈΡ‚Π΅ Ρ€Π°Π·ΠΌΠ΅Ρ€ области Π»ΠΈΡ†Π° Π΄ΠΎ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π½ΠΎΠ³ΠΎ Ρ€Π°Π·ΠΌΠ΅Ρ€Π°.
9. ВСстовоС ΠΈΠ·ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅ с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ FaceRecognizer Prediction (prediction () ) β‡’ [id, Π΄ΠΎΡΡ‚ΠΎΠ²Π΅Ρ€Π½ΠΎΡΡ‚ΡŒ].
10. ΠŸΠΎΠ²Ρ‚ΠΎΡ€ΠΈΡ‚Π΅ шаги 6–9 для всСх тСстовых ΠΈΠ·ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΠΉ.

Π—Π°ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅

РаспознаваниС Π»ΠΈΡ† Π½Π° сСгодняшний дСнь являСтся ΠΎΠ΄Π½ΠΎΠΉ ΠΈΠ· самых Π²Π°ΠΆΠ½Ρ‹Ρ… Ρ‚Π΅Ρ…Π½ΠΎΠ»ΠΎΠ³ΠΈΠΉ, которая ΡˆΠΈΡ€ΠΎΠΊΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ Π²ΠΎ ΠΌΠ½ΠΎΠ³ΠΈΡ… областях ΠΈ сСкторах, Ρ‚Π°ΠΊΠΈΡ… ΠΊΠ°ΠΊ Π·Π΄Ρ€Π°Π²ΠΎΠΎΡ…Ρ€Π°Π½Π΅Π½ΠΈΠ΅, Ρ€Π΅ΠΊΠ»Π°ΠΌΠ°, Π±Π΅Π·ΠΎΠΏΠ°ΡΠ½ΠΎΡΡ‚ΡŒ, ΠΏΠ»Π°Ρ‚Π΅ΠΆΠΈ ΠΈ ΠΌΠ½ΠΎΠ³ΠΈΠ΅ Π΄Ρ€ΡƒΠ³ΠΈΠ΅.

Богласно Π½ΠΎΠ²ΠΎΠΌΡƒ исслСдованию, ΠΏΡ€ΠΎΠ²Π΅Π΄Π΅Π½Π½ΠΎΠΌΡƒ Grand View Research, Inc., Π³Π»ΠΎΠ±Π°Π»ΡŒΠ½Ρ‹ΠΉ Ρ€Ρ‹Π½ΠΎΠΊ биомСтричСских Ρ‚Π΅Ρ…Π½ΠΎΠ»ΠΎΠ³ΠΈΠΉ, вСроятно, достигнСт 59,31 ΠΌΠΈΠ»Π»ΠΈΠ°Ρ€Π΄Π° Π΄ΠΎΠ»Π»Π°Ρ€ΠΎΠ² БША ΠΊ 2025 Π³ΠΎΠ΄Ρƒ. CAGR 19,5% Π² Ρ‚Π΅Ρ‡Π΅Π½ΠΈΠ΅ ΠΏΡ€ΠΎΠ³Π½ΠΎΠ·ΠΈΡ€ΡƒΠ΅ΠΌΠΎΠ³ΠΎ ΠΏΠ΅Ρ€ΠΈΠΎΠ΄Π°. [27]

Π˜ΡΡ…ΠΎΠ΄Π½Ρ‹ΠΉ ΠΊΠΎΠ΄ этой ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ ΠΌΠΎΠΆΠ½ΠΎ Π½Π°ΠΉΡ‚ΠΈ Π½ΠΈΠΆΠ΅:



πŸ“šΠ»ΠΈΡ‚Π΅Ρ€Π°Ρ‚ΡƒΡ€Π°, ΠΏΠΎΠ»Π΅Π·Π½Ρ‹Π΅ рСсурсы:

[1] Shutterstock, Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ пиксСль? (2020 Π³.)

[2] М.Π›ΠΈΡ€Π°, А.ΠŸΠ»ΡƒΡΡΠΈ ΠΈ А.Π“Π΅ΠΎΡ€Π³Π°Π½Ρ†ΠΎΠ³Π»Ρƒ, MATLAB ΠΊΠ°ΠΊ инструмСнт ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ ΠΈΠ·ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΠΉ Π² ядСрной ΠΌΠ΅Π΄ΠΈΡ†ΠΈΠ½Π΅ (2011 Π³.), MATLAB - ΡƒΠ½ΠΈΠ²Π΅Ρ€ΡΠ°Π»ΡŒΠ½Ρ‹ΠΉ инструмСнт для ΠΈΠ½ΠΆΠ΅Π½Π΅Ρ€ΠΎΠ²-ΠΏΡ€Π°ΠΊΡ‚ΠΈΠΊΠΎΠ², Π“Π»Π°Π²Π°: 23.

[3] Wikiwand, ΠžΡ‚Ρ‚Π΅Π½ΠΊΠΈ сСрого ΠΊΠ°ΠΊ ΠΎΡ‚Π΄Π΅Π»ΡŒΠ½Ρ‹Π΅ ΠΊΠ°Π½Π°Π»Ρ‹ ΠΌΠ½ΠΎΠ³ΠΎΠΊΠ°Π½Π°Π»ΡŒΠ½Ρ‹Ρ… Ρ†Π²Π΅Ρ‚Π½Ρ‹Ρ… ΠΈΠ·ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΠΉ.

[4] М. Π₯Π°Ρ€ΠΌΡƒΡˆ, ΠšΠ»Π°ΡΡΠΈΡ„ΠΈΠΊΠ°Ρ†ΠΈΡ Ρ†Π²Π΅Ρ‚Π° ΠΊΠΎΠΆΠΈ Ρ‡Π΅Π»ΠΎΠ²Π΅ΠΊΠ° с использованиСм ΠΏΠΎΡ€ΠΎΠ³ΠΎΠ²ΠΎΠ³ΠΎ классификатора: RGB, YCbCr, HSV (ΠΊΠΎΠ΄ Python), (2020)

[5] Microsoft, Π£Ρ‡Π΅Π±Π½ΠΎΠ΅ пособиС: ΠΎΠ±Π½Π°Ρ€ΡƒΠΆΠ΅Π½ΠΈΠ΅ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ² с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ ONNX Π² ML.NET (2020 Π³.)

[6] Dasiopoulou, Stamatia, et al. Β« ΠžΠ±Π½Π°Ρ€ΡƒΠΆΠ΅Π½ΠΈΠ΅ сСмантичСских Π²ΠΈΠ΄Π΅ΠΎΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ² с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ Π·Π½Π°Π½ΠΈΠΉ . IEEE Transactions on Circuits and Systems for Video Technology 15.10 (2005): 1210–1224.

[7] NAVER Engineering, БСгмСнтация Π²ΠΈΠ΄Π΅ΠΎΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ² Π² Π²ΠΈΠ΄Π΅ΠΎ (2017), слайд-5

[8] М.Π₯Π°Ρ€ΠΌΡƒΡˆ, РаспознаваниС Π»ΠΈΡ† с использованиСм ΠΏΠΎΡ€ΠΎΠ³Π° тСлСсного Ρ‚ΠΎΠ½Π° (RGB-YCrCb): рСализация Python ( 2020)

[9] П. Π’ΠΈΠΎΠ»Π° ΠΈ М. ДТонс, РобастноС ΠΎΠ±Π½Π°Ρ€ΡƒΠΆΠ΅Π½ΠΈΠ΅ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ² Π² Ρ€Π΅Π°Π»ΡŒΠ½ΠΎΠΌ Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ (2001), Π’Π’ΠžΠ ΠžΠ™ ΠœΠ•Π–Π”Π£ΠΠΠ ΠžΠ”ΠΠ«Π™ Π‘Π•ΠœΠ˜ΠΠΠ  ПО Π‘Π’ΠΠ’Π˜Π‘Π’Π˜ΠšΠ• И Π’Π«Π§Π˜Π‘Π›Π•ΠΠ˜Π―Πœ

[10] М. Амин Π§Ρ…Π°Π΄ΠΆΡ€ΠΎ, КамлСш ΠšΡƒΠΌΠ°Ρ€, М. ΠœΠ°Π»ΡƒΠΊ Π ΠΈΠ½Π΄, Афтаб АхмСд Π¨Π΅ΠΉΡ…, Π₯Π°ΠΊ Наваз ΠΈ Π Π°Ρ„Π°ΠΊΠ°Ρ‚ Π₯уссСйн Арайн, ΠŸΠΎΠ΄Ρ…ΠΎΠ΄ ΠΊ ΠΎΠ±Π½Π°Ρ€ΡƒΠΆΠ΅Π½ΠΈΡŽ ΠΏΠ΅ΡˆΠ΅Ρ…ΠΎΠ΄ΠΎΠ² для систСмы ΠΏΠΎΠΌΠΎΡ‰ΠΈ Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŽ с использованиСм каскадных классификаторов Π½Π° основС Π₯Π°Π°Ρ€Π° (2018), ΠœΠ΅ΠΆΠ΄ΡƒΠ½Π°Ρ€ΠΎΠ΄Π½Ρ‹ΠΉ ΠΆΡƒΡ€Π½Π°Π» ΠΏΠ΅Ρ€Π΅Π΄ΠΎΠ²Ρ‹Ρ… Ρ‚Π΅Ρ…Π½ΠΎΠ»ΠΎΠ³ΠΈΠΉ Π˜Π½Ρ„ΠΎΡ€ΠΌΠ°Ρ‚ΠΈΠΊΠ° ΠΈ прилоТСния.

[11] АлСксандр ΠœΠΎΡ€Π΄Π²ΠΈΠ½Ρ†Π΅Π² ΠΈ Абид К., ΠžΠ±Π½Π°Ρ€ΡƒΠΆΠ΅Π½ΠΈΠ΅ Π»ΠΈΡ† с использованиСм каскадов Π₯Π°Π°Ρ€Π° (2013).

[12] Π₯Сльвиг ЙСнсСн, РСализация Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌΠ° распознавания Π»ΠΈΡ† Π’ΠΈΠΎΠ»Ρ‹-ДТонса. P-11 (2008 Π³.), Kongens Lyngby IMM-M.Sc.-2008–93

[13] Π‘Ρ‚ΠΈΠ²Π΅Π½ΠŸΡƒΡ‚Ρ‚Π΅ΠΌΠ°Π½Ρ, Π½ΠΎ ΠŸΠ°ΠΊΡ‚, КаскадноС ΠΎΠ±ΡƒΡ‡Π΅Π½ΠΈΠ΅ классификаторов.

[14] Π§ΠΆΡƒΠΎ Π’Π°Π½, Π¦Π·ΠΈΠ½ΡŒΡ‚Π°ΠΎ Π§ΠΆΠ°Π½ ΠΈ Навин Π’Π΅Ρ€ΠΌΠ°, РСализация низкоэнСргСтичСских систСм классификации ΠΏΡƒΡ‚Π΅ΠΌ Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ умноТСния ΠΌΠ°Ρ‚Ρ€ΠΈΡ† нСпосрСдствСнно Π² ADC (2015), IEEE Transactions on Biomedical Circuits and Systems

[15] Π’.Π‘. Мада БандТая, Π”ΡŒΡ АнгграСни, Кики Закария, Атип Π”ΠΆΡƒΠ°Ρ€Π΄ΠΈ ΠΈ ΠœΠ°Π΄ΠΈΠ½Π°Ρ‚ΡƒΠ» ΠœΡƒΠ½Π°Π²Π²Π°Ρ€ΠΎ, Π”ΠΈΠ·Π°ΠΉΠ½ распознавания Π»ΠΈΡ† ΠΈ отслСТивания взаимодСйствия Ρ‡Π΅Π»ΠΎΠ²Π΅ΠΊΠ° ΠΈ Ρ€ΠΎΠ±ΠΎΡ‚Π°, (2017), Рис. 4. Π˜Π»Π»ΡŽΡΡ‚Ρ€Π°Ρ†ΠΈΡ каскадного классификатора.

[16] Π’ΠΈΠΌΠΎ АхонСн, АбдСнур Π₯Π°Π΄ΠΈΠ΄ ΠΈ ΠœΠ°Ρ‚Ρ‚ΠΈ ΠŸΠΈΠ΅Ρ‚ΠΈΠΊΡ‡Π°ΠΉΠ½Π΅Π½, РаспознаваниС Π»ΠΈΡ† с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ Π»ΠΎΠΊΠ°Π»ΡŒΠ½Ρ‹Ρ… Π΄Π²ΠΎΠΈΡ‡Π½Ρ‹Ρ… ΠΏΠ°Ρ‚Ρ‚Π΅Ρ€Π½ΠΎΠ² (2004), P-472

[17] [18] М. Π₯Π°Ρ€ΠΌΡƒΡˆ, РаспознаваниС Π»ΠΈΡ†, (2020), GitHub

[19] Π’ΠΈΠΌΠΎ АхонСн, АбдСнур Π₯Π°Π΄ΠΈΠ΄ ΠΈ ΠœΠ°Ρ‚Ρ‚ΠΈ ΠŸΠΈΠ΅Ρ‚ΠΈΠΊΡ‡Π°ΠΉΠ½Π΅Π½, РаспознаваниС Π»ΠΈΡ† с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ Π»ΠΎΠΊΠ°Π»ΡŒΠ½Ρ‹Ρ… Π΄Π²ΠΎΠΈΡ‡Π½Ρ‹Ρ… ΠΏΠ°Ρ‚Ρ‚Π΅Ρ€Π½ΠΎΠ² (2004), НСсколько Π²ΠΎΠ·ΠΌΠΎΠΆΠ½Ρ‹Ρ… ΠΌΠ΅Ρ€ нСсходства для гистограмм LBP.p-472.

[20] Π€.Комаски, РаспознаваниС Π»ΠΈΡ† Π’ΠΈΠΎΠ»Ρ‹-ДТонса (2012)

[21] ΠžΠΌΠΊΠ°Ρ€ М. ΠŸΠ°Ρ€Ρ…ΠΈ, АндрСа Π’Π΅Π΄Π°Π»ΡŒΠ΄ΠΈ ΠΈ Π­Π½Π΄Ρ€ΡŽ ЗиссСрман, ΠŸΠ»Π°ΠΊΠ°Ρ‚ Deep Face Recognition.

[22] OpenCV, ОписаниС класса cv :: face :: LBPHFaceRecognizer

[23] OpenCV docs, Π€ΡƒΠ½ΠΊΡ†ΠΈΠΈ рисования (2011–2014)

[24] OpenCV, ΠŸΡ€Π΅ΠΎΠ±Ρ€Π°Π·ΠΎΠ²Π°Π½ΠΈΡ гСомСтричСских ΠΈΠ·ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΠΉ (2011–2014)

[25] АлалСк, ΠšΠ°ΡΠΊΠ°Π΄Π½Ρ‹Π΅ классификаторы Π₯Π°Π°Ρ€Π°, Github (2013).

[26] Quora, Какой Π»ΡƒΡ‡ΡˆΠΈΠΉ Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌ распознавания Π»ΠΈΡ† Π² OpenCV Python?, (2016)

[27] Π¨Π΅Ρ€Ρ€ΠΈ ДТСймс, ОбъСм Ρ€Ρ‹Π½ΠΊΠ° биомСтричСских Ρ‚Π΅Ρ…Π½ΠΎΠ»ΠΎΠ³ΠΈΠΉ ΠΊ 2025 Π³ΠΎΠ΄Ρƒ составит 59,31 ΠΌΠΈΠ»Π»ΠΈΠ°Ρ€Π΄Π° Π΄ΠΎΠ»Π»Π°Ρ€ΠΎΠ²: Grand View Research, Inc. (2019)