Изучение Python OpenCV / Урок #7 – Распознавание лиц — Transcript
Full transcript
- 0:00привет в ходе этого урока мы научимся
- 0:02распознавать лица на различных
- 0:03изображениях при помощи библиотеки
- 0:05opencv
- 0:06но перед началом я рекомендую вам сайт
- 0:09айти prodir точка ком на этом сайте вы
- 0:11найдете код домашнее задание и много
- 0:12другой полезной информации ссылка на
- 0:14этот урок на сайте будет в описании к
- 0:16этому видео переходите
- 0:17не пожалеете для распознавания объектов
- 0:20на фото или видео необходимо иметь
- 0:22натренированы you нейронную сеть в нашем
- 0:24случае нужно иметь нейронную сеть что
- 0:26натренировано распознавать лица мы с
- 0:28вами в ходе урока не будем тренировать
- 0:30нейрон кум так как этот долгий и
- 0:32достаточно сложный процесс
- 0:34если говорить вкратце об этом процессе
- 0:36заключается он в том чтобы дать не рамки
- 0:38десятки тысяч фото и дать им
- 0:41возможностей самой находить на нем лица
- 0:43мы же каждый раз при неверном варианте
- 0:45должны говорить ей об этом и тем самым
- 0:47после 100 а может и миллиона раз ее
- 0:49диапазон для нахождения правильного
- 0:51ответа будет скорректирован то есть весы
- 0:53для выбора верного ответа они будут
- 0:56скорректированы и в дальнейшем при ее
- 0:58использовании она будет верно находить
- 1:00нужный объект на любом фото или же видео
- 1:03натренировать такое в домашних условиях
- 1:05достаточно сложно а главное бессмысленно
- 1:08ведь уже существуют готовые
- 1:09натренированные модели что можно
- 1:11использовать в своих целях
- 1:12именно так мы и поступим в ходе этого
- 1:14урока и будем уже просто использовать
- 1:16готовую натренирован ую модель в наших
- 1:18целях так же для тех кто хочет все же
- 1:20попробовать самостоятельно тренировать
- 1:21хоть и простую но все же свою нейрон
- 1:23ком-то у меня есть видео на канале на
- 1:25эту тему там происходит процесс
- 1:27тренировки супер простой нейронной
- 1:29системы ссылку на это видео я оставлю в
- 1:31описании к этому видео
- 1:32найти готовые натренированные модели
- 1:34можно на официальной странице о пенсии в
- 1:37дет ссылку на эту страницу я оставлю в
- 1:40описании этому видео и здесь вы можете
- 1:42найти множество различных файлов каждый
- 1:45файл это определенная натренированная
- 1:46модель но и за счет каждого из этих
- 1:48файлов
- 1:49вы можете находить определенные объекты
- 1:50на изображении вот предположим если вам
- 1:53нужно отследить не просто все лицо а
- 1:55лишь например глазам то в таком случае
- 1:57можно использовать вот эту вот эту
- 1:59первую модель которая служит для
- 2:00нахождения только глаз или же если вам
- 2:03вдруг необходимо найти допустим
- 2:05полностью всего человека не просто его
- 2:07лицо опять же а полностью всего человека
- 2:09то можно использовать вот эту вот модель
- 2:11которая называется full body
- 2:12также здесь
- 2:13есть другие различные модели например
- 2:15для нахождения
- 2:16номерного знака на автомобиле также для
- 2:19нахождения улыбки для нахождения верхней
- 2:22части например человеком и так далее нас
- 2:25интересует модель что позволяет
- 2:26отслеживать исключительно лицо и такая
- 2:30модель она называется frontol space
- 2:32дефолт соответственно именно эту модель
- 2:34мы с вами и будем использовать в будущем
- 2:36мы также сможете поработать с
- 2:37какими-либо другими моделями так как
- 2:39принцип работы с ними ничем не будет
- 2:41отличаться от того принципа что мы
- 2:43изучим в ходе этого урока на данный
- 2:45момент мы давайте перейдем на страницу с
- 2:47нужные моделью сама модель она состоит
- 2:49лишь из одного файла который достаточно
- 2:51огромный потому что он содержит 33
- 2:53тысячи строчек кода ну и по факту сам
- 2:56этот файл он состоит из xml
- 2:58разметки где у нас прописывается
- 3:00различные числа сами же эти числа они
- 3:03представляют из себя весы на основе
- 3:05которых как раз нейронная сеть нейрона и
- 3:07вот это вот модель сможет определить
- 3:09нужный объект
- 3:10мы давайте с вами просто скопируем весь
- 3:12вот этот вот код что здесь представлен
- 3:14чтобы его скопировать мы нажмем на
- 3:16кнопочку row
- 3:17в таком случае мы сможем просмотреть
- 3:19весь этот код ну как обычный текст
- 3:21здесь же мы выбираем весь текст также
- 3:23его копируем и далее внутри проекты мы
- 3:26давайте создадим некий новый файл
- 3:28назвать его можно как угодно я допустим
- 3:30его на звук от фейс с главное чтобы у
- 3:32него расширение было как точкой xml
- 3:34потому что внутри этого файла мы
- 3:35действительно будем вставлять с вами
- 3:36именно xml ну и внутри файла мы просто
- 3:39вставляем полностью весь вот этот вот
- 3:41код нам с этим кодом никак не
- 3:43потребуется работать по сути это просто
- 3:45весы
- 3:46ну то есть различные цифры за счет
- 3:48которых как раз и геронта будет решать
- 3:50что необходимо выбрать нам с этим файлом
- 3:53ну по факту и вы изменяете работать
- 3:55как-то особо не потребуется
- 3:56этом можем перейти в основной файл где
- 3:58мы как раз и будем прописывать весь
- 3:59необходимый код вот только перед тем как
- 4:01мы будем прописывать весь основной год я
- 4:04давайте внутрь папки imagex добавлю
- 4:06несколько новых изображений
- 4:07ну и соответственно мы их сейчас добавим
- 4:09внутри проекта а чуть позже будем их
- 4:11использовать теперь наконец приступаем к
- 4:13написанию кода для начала создадим некую
- 4:15переменным и в эту переменную мы
- 4:18поместим с вами просто определенное
- 4:19изображение для этого используем метод
- 4:21ай эм рид здесь обращаемся к папке и
- 4:23magic и отсюда я выберу например первое
- 4:26мое
- 4:26изображение чуть позже будем работать
- 4:28еще с другими изображениями далее мы
- 4:31давайте это изображение преобразуем к
- 4:33серому формату соответственно я в эту же
- 4:36перемену им делаю устанавливать
- 4:37следующий я обращаюсь к нашей библиотеке
- 4:39обращаюсь к методу конверт color и здесь
- 4:42я просто говорю что к этому же
- 4:44изображением я применяю такой формат
- 4:47который мне будет называться как color
- 4:49begin the great давайте мы его здесь и
- 4:52пропишем в таком случае наше фото она
- 4:55становится лишь с одним слоем это серый
- 4:57серый как бы слой и конечно же такое
- 5:00фото будет обработать гораздо быстрее
- 5:02гораздо проще нежели фото где у нас есть
- 5:04три слоя далее следующее что нам
- 5:07необходимо сделать так это нам
- 5:09необходимо вытянуть вот этот вот файл
- 5:11css .
- 5:12xml по сути нам нужно вытянуть вот эту
- 5:14вот натренирован ую модель для этого я
- 5:17создаю некую новую переменную
- 5:18предположим пускай она будет развиваться
- 5:20как fights с далее мы обращаемся опять
- 5:23же к нашей библиотеке и обращаемся к
- 5:25такому методу с которыми мы пока еще не
- 5:27работали этот метод он называется к
- 5:29скейт классе фар
- 5:30суть этого метода просто он берет некий
- 5:32файл и вытягивает этот файл именно как
- 5:35натренирован ую модель но и здесь мы
- 5:37просто должны указать с каким файлом мы
- 5:38работаем поскольку этот файл он мне
- 5:40находится там же где и файл main . пайм
- 5:43то соответственно просто могу обратиться
- 5:45здесь к нему по названию это псс .
- 5:47xml все мы вытянули нужную он
- 5:49тренированный модель и теперь мы ее
- 5:51можем использовать
- 5:52давайте мы попробуем с вами создать еще
- 5:54некую перемену им давать ее назовем как
- 5:57раза лс и эта переменная она будет
- 5:59содержать как раз координаты
- 6:01найденных лиц и сейчас мы чтобы найти
- 6:05вот эти координаты мы обращаемся к css
- 6:07напомнив iceice от у нас натренированная
- 6:09модель мы обращаемся к натренированной
- 6:12модели и дальше через эту внутри
- 6:13неровную модель мы обращаемся к такому
- 6:15методу как detect молды скейл за счет
- 6:18этого метода мы находим координаты всех
- 6:21найденных объектов в нашем случае
- 6:24найденные объекты найденные объекты это
- 6:26будут литься
- 6:27здесь же нужно указать изображением на
- 6:29котором мы будем все искать а также
- 6:31нужно указать такой параметр как скейл
- 6:34фактор и на данный момент возможно
- 6:35давайте устном как 2
- 6:36а также расскажу что же это такое
- 6:38предположим что нашу модель нашу
- 6:41нейронную модель ён и тренировали на
- 6:43таких изображениях которые имели в
- 6:45ширину 320 пикселей в высоту ну допустим
- 6:48180 пикселей вот такие например были
- 6:51маленькие изображения и как раз на
- 6:53основе таких маленьких изображений
- 6:54натренировали нашу модель мы же на
- 6:57данный момент используем достаточно
- 6:58большие изображения
- 7:00а соответственно этих больших
- 7:01изображениях лица тоже намного больше
- 7:04нежели отелится который вот могли быть в
- 7:07этой вы тех вернее прошлых изображениях
- 7:10соответственно мы можем указать то что
- 7:12мы в принципе можем сейчас находить лица
- 7:15которые могут быть в два раза больше
- 7:17нежели те лица что были указаны в
- 7:20натренированной модели вообще на данный
- 7:22момент я не знаю какое число сюда стоит
- 7:24подставить поэтому я возможно один сюда
- 7:26подставлю потом мы запустим программу
- 7:28если оно обработается некорректно там
- 7:30это значение с вами возможно увеличим на
- 7:32данный момент мы скажем то что мы ищем
- 7:35на фотографиях лица которые по факту
- 7:38будут с таким же размером который был
- 7:40указан вы тех фотографиях что
- 7:43использовались для тренировки самой этой
- 7:45модели то есть мы не меняем как бы
- 7:47размер лиц возможно нам потребуется это
- 7:50сделать а возможно и не потребуется чуть
- 7:52позже мы это с вами выясним также
- 7:54дополнительно здесь нам ещё необходимо
- 7:56указать
- 7:57мин ней морс и за счет этого значения мы
- 7:59указываем как много может быть соседей
- 8:03рядом с найденным объектом и вот
- 8:05предположим если мы ищем но и не знаю
- 8:08например там самолеты да то
- 8:09соответственно
- 8:11рядом самолет она прям друг возле друга
- 8:13не стоять попросту не могут до 0
- 8:15например с ним в воздухе их там за мире
- 8:17то здесь можно было бы указать значение
- 8:19какой-то побольше
- 8:20поскольку мы говорим именно про лица у
- 8:22меня здесь есть такие фотографии где
- 8:24достаточно все близко находится там и
- 8:26давайте сейчас укажем с вами какое-то
- 8:28небольшое значение ну допустим 3
- 8:30опять-таки после перезапусков найти
- 8:32возможно значение будем с вами менять на
- 8:34данный момент мне давайте их оставим вот
- 8:36в таком формате то бишь скейл фактор он
- 8:38указывает насколько крупнее лица мы
- 8:40можем искать в нашем случае насколько
- 8:42крупнее лица мы можем искать а my
- 8:43neighbors он указывает насколько много
- 8:46может быть найденных объектов
- 8:49как бы который будет находиться друг
- 8:51возле друга да ну и опять-таки эти
- 8:53значения если что чуть позже мы будем с
- 8:55вами менять на данный момент я предлагаю
- 8:58пока это все не запускать просто по той
- 9:00причине что если мы сейчас то все
- 9:02запустим мы особо ничего не заметим ну
- 9:04да я могу в принципе вывести эти
- 9:06результаты в терминал но это особо нам
- 9:09никакой информации не даст мы давайте
- 9:11сейчас с вами лучше сделаем так что все
- 9:13найденные лица они будут выделены вы
- 9:16квадратики ну и тем самым будем понимать
- 9:18что нерон к обработала все корректно и
- 9:20лица были найдены чтобы нам все
- 9:24найденные лица когда ввести в квадратик
- 9:26нам необходимо создать цикл
- 9:28это цикл он будет содержать несколько
- 9:31значений
- 9:33поэтому здесь как бы создаем кортеж
- 9:34который будет с который будет состоять
- 9:36из нескольких значений во первых эта
- 9:38позиция
- 9:39как бы по координате x это позиция по
- 9:42координате y
- 9:44также это будет ширина и соответственно
- 9:46высота самого найденного
- 9:49лица и все это мы перебираем с вами в
- 9:51нашем вот этом вот списке которая
- 9:53называется резать по факту резалт он нам
- 9:55и вернет все вот эти вот значение то что
- 9:58вернет как г-координаты где у нас была
- 10:00найдена лицо
- 10:01а также он и он вернет нам ширину и
- 10:04высоту самого этого вот найденного лица
- 10:07за счет этих уже значений спокойно
- 10:09сможем отчертить квадратик вокруг
- 10:11найденного место чтобы нам очертить
- 10:14квадратик мы просто обращаемся к самой
- 10:16библиотеки обращаемся к к к к к к такому
- 10:19методу
- 10:19здесь мы говорим с каким изображением
- 10:21работаем работаем с тем же самым
- 10:23изображением что изначально далее нам
- 10:25нужно указать как бы первоначальную
- 10:27точку и первоначальная .
- 10:29это в нашем случае это вот эти вот
- 10:30координате координаты x
- 10:32а также игорь и далее нам нужно указать
- 10:34точку ну вернее 2 по следующей точке
- 10:38нашим этого квадрата и в качестве двух
- 10:41последующих точек мы делаем следующее то
- 10:43есть мы к первоначальной точки добавляем
- 10:46ширину всего нашего
- 10:48найденного лица а также мы к точке y
- 10:52добавляем высоту всего найденного лица
- 10:54тем самым мы как бы очертим нужный для
- 10:56нас квадрат вот такая здесь будет логика
- 10:58дополнительно мы можем здесь указать
- 11:00какой-либо цвет давайте я буду например
- 11:02окрашивать это все возможно вы красный
- 11:05цвет поэтому 00 255 опять-таки би джей
- 11:08ар да то есть вот у нас идет в конце
- 11:10поэтому здесь весь 55 конец добавляю ну
- 11:14и конечно же нужно указать
- 11:15сын князь это ширина обводки здесь
- 11:19возможно мы давайте укажем как 3
- 11:21если не понравится то потом это исправят
- 11:23ну и в самом низу мы давайте еще
- 11:26обратимся к и м шоу и здесь просто
- 11:28выведем изображением конечно же еще
- 11:30забыл указать подписи здесь давайте
- 11:32будет написано проезжал ну и также чтобы
- 11:34все это обработалось необходимо еще и
- 11:37использовать в бейки и здесь на данный
- 11:39момент устной просто значение как 0
- 11:41ok наконец давайте мы это с вами сейчас
- 11:44все запустим мы замечаем что нас
- 11:46выдается ошибка мда и ошибка выдается
- 11:49под обретение что скилл фактор нужно
- 11:51установить чуть больше чем один давить
- 11:53он здесь говорит что есть такая проверка
- 11:54как скилл фактор больше чем один ну и
- 11:57соответственно давайте мы стоим здесь
- 11:581.1 таком случае он должен обработать а
- 12:00корректная ok программа у нас теперь
- 12:02запустилась без ошибок в то же время мы
- 12:04можем заметить что программа не особо
- 12:06здорово обработала изображением потому
- 12:08что лица она конечно же нашла но
- 12:11дополнительно были найдены какие-либо
- 12:13другие объекты что совершенно не
- 12:15являются лицами плюс изображения
- 12:17вывелось вы сером формате это мы также
- 12:20давайте исправим изначально исправим
- 12:22немного
- 12:22нейронную сеть мы давайте устроим скилл
- 12:25фактор здесь со значением 2 то есть ни
- 12:27один и один она пример 2 в таком случае
- 12:30мы замечаем что вике уже намного меньше
- 12:32стало в дать их вот квадратиков также до
- 12:34сих пор остается еще вот этот вот
- 12:35квадратик ну и чтобы его тоже убрать мы
- 12:37давайте
- 12:38neighbors укажем чуть побольше еще раз
- 12:41это все запустим и вот замечаем что
- 12:43теперь все обработалось точно
- 12:45идеально то есть у нас были на один
- 12:47только лица они
- 12:48были обведены все обработалось без
- 12:51каких-либо ошибок также мы давайте
- 12:53все-таки наши изображения
- 12:54будем выводить цветным и если мы
- 12:57попробуем сейчас вот это изображение из
- 12:59серого формата сконвертировать в major
- 13:02это скорее всего не получится сделать на
- 13:05давайте я попробую это сделать но скорее
- 13:07всего это не получится сделать то здесь
- 13:09указан и м джим также мы указан формат
- 13:11это color это color gray ту art by
- 13:15например или в нашем случае лучше
- 13:17бильярда и если такое попробую запустить
- 13:19ну давайте посмотрим до съемки у нас до
- 13:22сих пор сера изображение отображается то
- 13:24есть это не это нам как бы не помогло
- 13:26поэтому чтобы все это исправить мы
- 13:29давайте сделаем вот что мы создадим с
- 13:31вами здесь новую переменную и в эту
- 13:34перемену мы как раз будем помещать сера
- 13:36изображением цветное изображение до сих
- 13:38пор будет находиться у нас в переменной
- 13:40m чем далее здесь мы будем использовать
- 13:43именно то же изображение которое
- 13:44называется как grey
- 13:46а далее мы уже на цветном изображении
- 13:48вот здесь будем рисовать эти все
- 13:50квадратики и впоследствии именно это
- 13:52изображение мы будем показывать
- 13:54пользователю если такое перезапустить
- 13:56вот оно все обработалось корректно то
- 13:58есть логика тут заключается в том что мы
- 14:00как бы работаем с вами именно с серым
- 14:03изображением но выводим информацию уже
- 14:06на цветном изображении вот такая здесь
- 14:07присутствовать лойко но и дополнительно
- 14:09мы давайте еще протестируем и другие
- 14:11изображением например people 2 здесь
- 14:14укажем также запускаем программу и вот
- 14:16мы замечаем что он не обнаружил здесь
- 14:18лицо давайте чтобы он все-таки обнаружил
- 14:21лицом и чуть-чуть уменьшим scale factor
- 14:23и попробуем с этим немного поиграться
- 14:25ну и в таком случае да вот видите я
- 14:27уменьшил скилл фактор и он действительно
- 14:29нашел нужное лицо также возможно давайте
- 14:32мы еще 3 изображение тоже здесь
- 14:34протестируем итак запускаем программу и
- 14:36вот в принципе он все обнаружил помимо
- 14:39вот этих вот двух лиц вернее даже трех
- 14:42лиц и на вот это тоже не обнаружил но
- 14:44здесь давайте я попробую еще раз steel
- 14:45фактор все-таки увеличить но опять же с
- 14:47этими значений нужно постоянно играться
- 14:49и вот я увеличил скилл фактор и вы
- 14:52замечаете что он даже лучше обработал
- 14:54делиться что были в прошлый раз
- 14:57обработаны и плюс конечно же он теперь
- 14:58обнаружил абсолютно все ну
- 15:00на ином лица то бишь за счет вот таких
- 15:03вот
- 15:03нейронных моделей натренированных вы
- 15:06можете быстро находить нужные объекты на
- 15:08разных фотографиях
- 15:10ну и соответственно здесь сейчас мы
- 15:12рассмотрели нейронную модель что
- 15:14позволяет нам обнаружить конкретно лица
- 15:16на различных фотографиях но так же
- 15:18существуют другие модели которые будут
- 15:20позволять вам находить определенные
- 15:22объекты например тот же самый там банан
- 15:24кружку там не знаю телевизор и так далее
- 15:27то есть это просто
- 15:28определенные файлы что натренированы под
- 15:30конкретную определенную задачу под
- 15:33конкретный определенный объект работа с
- 15:35ними будет точно такой же как и работа с
- 15:37вот этой вот нейронной моделью ну что ж
- 15:40надеюсь урок вам понравился если так то
- 15:42не забывайте ставить лайки и
- 15:44подписываться на канал
- 15:45также вступайте во все наши соцсети
- 15:46ссылки на них будут в описании к этому
- 15:48видео у меня ж на этом все до скорых
- 15:51встреч пока
About this transcript
This page contains the full transcript of Изучение Python OpenCV / Урок #7 – Распознавание лиц by Гоша Дударь, generated from the public captions YouTube serves with the video. The transcript has 2,674 words across 450 segments, with the original timestamps preserved so you can click any line to jump to that moment in the embedded player.
What you can do with it
Use the transcript to take notes, quote the speaker, build a study guide, generate a summary with ChatGPT or Claude via the YouTube Summary tool, or export it as a timed subtitle file with YouTube to SRT. You can also re-open it in the transcriber to translate the transcript into 100+ languages.
Free YouTube transcript tool
YouTube2Text is a free YouTube transcript generator — no signup, no daily limit. Paste any YouTube link and get the full transcript instantly, with timestamps, click-to-jump, translation to 100+ languages, AI prompts for ChatGPT, Claude, and Gemini, and exports to TXT, SRT, VTT, or Markdown.