YouTube2Text

Изучение Python OpenCV / Урок #7 – Распознавание лиц — Transcript

by Гоша Дударь · 2,674 words · 450 segments · language en · Watch on YouTube

Full transcript

  1. 0:00привет в ходе этого урока мы научимся
  2. 0:02распознавать лица на различных
  3. 0:03изображениях при помощи библиотеки
  4. 0:05opencv
  5. 0:06но перед началом я рекомендую вам сайт
  6. 0:09айти prodir точка ком на этом сайте вы
  7. 0:11найдете код домашнее задание и много
  8. 0:12другой полезной информации ссылка на
  9. 0:14этот урок на сайте будет в описании к
  10. 0:16этому видео переходите
  11. 0:17не пожалеете для распознавания объектов
  12. 0:20на фото или видео необходимо иметь
  13. 0:22натренированы you нейронную сеть в нашем
  14. 0:24случае нужно иметь нейронную сеть что
  15. 0:26натренировано распознавать лица мы с
  16. 0:28вами в ходе урока не будем тренировать
  17. 0:30нейрон кум так как этот долгий и
  18. 0:32достаточно сложный процесс
  19. 0:34если говорить вкратце об этом процессе
  20. 0:36заключается он в том чтобы дать не рамки
  21. 0:38десятки тысяч фото и дать им
  22. 0:41возможностей самой находить на нем лица
  23. 0:43мы же каждый раз при неверном варианте
  24. 0:45должны говорить ей об этом и тем самым
  25. 0:47после 100 а может и миллиона раз ее
  26. 0:49диапазон для нахождения правильного
  27. 0:51ответа будет скорректирован то есть весы
  28. 0:53для выбора верного ответа они будут
  29. 0:56скорректированы и в дальнейшем при ее
  30. 0:58использовании она будет верно находить
  31. 1:00нужный объект на любом фото или же видео
  32. 1:03натренировать такое в домашних условиях
  33. 1:05достаточно сложно а главное бессмысленно
  34. 1:08ведь уже существуют готовые
  35. 1:09натренированные модели что можно
  36. 1:11использовать в своих целях
  37. 1:12именно так мы и поступим в ходе этого
  38. 1:14урока и будем уже просто использовать
  39. 1:16готовую натренирован ую модель в наших
  40. 1:18целях так же для тех кто хочет все же
  41. 1:20попробовать самостоятельно тренировать
  42. 1:21хоть и простую но все же свою нейрон
  43. 1:23ком-то у меня есть видео на канале на
  44. 1:25эту тему там происходит процесс
  45. 1:27тренировки супер простой нейронной
  46. 1:29системы ссылку на это видео я оставлю в
  47. 1:31описании к этому видео
  48. 1:32найти готовые натренированные модели
  49. 1:34можно на официальной странице о пенсии в
  50. 1:37дет ссылку на эту страницу я оставлю в
  51. 1:40описании этому видео и здесь вы можете
  52. 1:42найти множество различных файлов каждый
  53. 1:45файл это определенная натренированная
  54. 1:46модель но и за счет каждого из этих
  55. 1:48файлов
  56. 1:49вы можете находить определенные объекты
  57. 1:50на изображении вот предположим если вам
  58. 1:53нужно отследить не просто все лицо а
  59. 1:55лишь например глазам то в таком случае
  60. 1:57можно использовать вот эту вот эту
  61. 1:59первую модель которая служит для
  62. 2:00нахождения только глаз или же если вам
  63. 2:03вдруг необходимо найти допустим
  64. 2:05полностью всего человека не просто его
  65. 2:07лицо опять же а полностью всего человека
  66. 2:09то можно использовать вот эту вот модель
  67. 2:11которая называется full body
  68. 2:12также здесь
  69. 2:13есть другие различные модели например
  70. 2:15для нахождения
  71. 2:16номерного знака на автомобиле также для
  72. 2:19нахождения улыбки для нахождения верхней
  73. 2:22части например человеком и так далее нас
  74. 2:25интересует модель что позволяет
  75. 2:26отслеживать исключительно лицо и такая
  76. 2:30модель она называется frontol space
  77. 2:32дефолт соответственно именно эту модель
  78. 2:34мы с вами и будем использовать в будущем
  79. 2:36мы также сможете поработать с
  80. 2:37какими-либо другими моделями так как
  81. 2:39принцип работы с ними ничем не будет
  82. 2:41отличаться от того принципа что мы
  83. 2:43изучим в ходе этого урока на данный
  84. 2:45момент мы давайте перейдем на страницу с
  85. 2:47нужные моделью сама модель она состоит
  86. 2:49лишь из одного файла который достаточно
  87. 2:51огромный потому что он содержит 33
  88. 2:53тысячи строчек кода ну и по факту сам
  89. 2:56этот файл он состоит из xml
  90. 2:58разметки где у нас прописывается
  91. 3:00различные числа сами же эти числа они
  92. 3:03представляют из себя весы на основе
  93. 3:05которых как раз нейронная сеть нейрона и
  94. 3:07вот это вот модель сможет определить
  95. 3:09нужный объект
  96. 3:10мы давайте с вами просто скопируем весь
  97. 3:12вот этот вот код что здесь представлен
  98. 3:14чтобы его скопировать мы нажмем на
  99. 3:16кнопочку row
  100. 3:17в таком случае мы сможем просмотреть
  101. 3:19весь этот код ну как обычный текст
  102. 3:21здесь же мы выбираем весь текст также
  103. 3:23его копируем и далее внутри проекты мы
  104. 3:26давайте создадим некий новый файл
  105. 3:28назвать его можно как угодно я допустим
  106. 3:30его на звук от фейс с главное чтобы у
  107. 3:32него расширение было как точкой xml
  108. 3:34потому что внутри этого файла мы
  109. 3:35действительно будем вставлять с вами
  110. 3:36именно xml ну и внутри файла мы просто
  111. 3:39вставляем полностью весь вот этот вот
  112. 3:41код нам с этим кодом никак не
  113. 3:43потребуется работать по сути это просто
  114. 3:45весы
  115. 3:46ну то есть различные цифры за счет
  116. 3:48которых как раз и геронта будет решать
  117. 3:50что необходимо выбрать нам с этим файлом
  118. 3:53ну по факту и вы изменяете работать
  119. 3:55как-то особо не потребуется
  120. 3:56этом можем перейти в основной файл где
  121. 3:58мы как раз и будем прописывать весь
  122. 3:59необходимый код вот только перед тем как
  123. 4:01мы будем прописывать весь основной год я
  124. 4:04давайте внутрь папки imagex добавлю
  125. 4:06несколько новых изображений
  126. 4:07ну и соответственно мы их сейчас добавим
  127. 4:09внутри проекта а чуть позже будем их
  128. 4:11использовать теперь наконец приступаем к
  129. 4:13написанию кода для начала создадим некую
  130. 4:15переменным и в эту переменную мы
  131. 4:18поместим с вами просто определенное
  132. 4:19изображение для этого используем метод
  133. 4:21ай эм рид здесь обращаемся к папке и
  134. 4:23magic и отсюда я выберу например первое
  135. 4:26мое
  136. 4:26изображение чуть позже будем работать
  137. 4:28еще с другими изображениями далее мы
  138. 4:31давайте это изображение преобразуем к
  139. 4:33серому формату соответственно я в эту же
  140. 4:36перемену им делаю устанавливать
  141. 4:37следующий я обращаюсь к нашей библиотеке
  142. 4:39обращаюсь к методу конверт color и здесь
  143. 4:42я просто говорю что к этому же
  144. 4:44изображением я применяю такой формат
  145. 4:47который мне будет называться как color
  146. 4:49begin the great давайте мы его здесь и
  147. 4:52пропишем в таком случае наше фото она
  148. 4:55становится лишь с одним слоем это серый
  149. 4:57серый как бы слой и конечно же такое
  150. 5:00фото будет обработать гораздо быстрее
  151. 5:02гораздо проще нежели фото где у нас есть
  152. 5:04три слоя далее следующее что нам
  153. 5:07необходимо сделать так это нам
  154. 5:09необходимо вытянуть вот этот вот файл
  155. 5:11css .
  156. 5:12xml по сути нам нужно вытянуть вот эту
  157. 5:14вот натренирован ую модель для этого я
  158. 5:17создаю некую новую переменную
  159. 5:18предположим пускай она будет развиваться
  160. 5:20как fights с далее мы обращаемся опять
  161. 5:23же к нашей библиотеке и обращаемся к
  162. 5:25такому методу с которыми мы пока еще не
  163. 5:27работали этот метод он называется к
  164. 5:29скейт классе фар
  165. 5:30суть этого метода просто он берет некий
  166. 5:32файл и вытягивает этот файл именно как
  167. 5:35натренирован ую модель но и здесь мы
  168. 5:37просто должны указать с каким файлом мы
  169. 5:38работаем поскольку этот файл он мне
  170. 5:40находится там же где и файл main . пайм
  171. 5:43то соответственно просто могу обратиться
  172. 5:45здесь к нему по названию это псс .
  173. 5:47xml все мы вытянули нужную он
  174. 5:49тренированный модель и теперь мы ее
  175. 5:51можем использовать
  176. 5:52давайте мы попробуем с вами создать еще
  177. 5:54некую перемену им давать ее назовем как
  178. 5:57раза лс и эта переменная она будет
  179. 5:59содержать как раз координаты
  180. 6:01найденных лиц и сейчас мы чтобы найти
  181. 6:05вот эти координаты мы обращаемся к css
  182. 6:07напомнив iceice от у нас натренированная
  183. 6:09модель мы обращаемся к натренированной
  184. 6:12модели и дальше через эту внутри
  185. 6:13неровную модель мы обращаемся к такому
  186. 6:15методу как detect молды скейл за счет
  187. 6:18этого метода мы находим координаты всех
  188. 6:21найденных объектов в нашем случае
  189. 6:24найденные объекты найденные объекты это
  190. 6:26будут литься
  191. 6:27здесь же нужно указать изображением на
  192. 6:29котором мы будем все искать а также
  193. 6:31нужно указать такой параметр как скейл
  194. 6:34фактор и на данный момент возможно
  195. 6:35давайте устном как 2
  196. 6:36а также расскажу что же это такое
  197. 6:38предположим что нашу модель нашу
  198. 6:41нейронную модель ён и тренировали на
  199. 6:43таких изображениях которые имели в
  200. 6:45ширину 320 пикселей в высоту ну допустим
  201. 6:48180 пикселей вот такие например были
  202. 6:51маленькие изображения и как раз на
  203. 6:53основе таких маленьких изображений
  204. 6:54натренировали нашу модель мы же на
  205. 6:57данный момент используем достаточно
  206. 6:58большие изображения
  207. 7:00а соответственно этих больших
  208. 7:01изображениях лица тоже намного больше
  209. 7:04нежели отелится который вот могли быть в
  210. 7:07этой вы тех вернее прошлых изображениях
  211. 7:10соответственно мы можем указать то что
  212. 7:12мы в принципе можем сейчас находить лица
  213. 7:15которые могут быть в два раза больше
  214. 7:17нежели те лица что были указаны в
  215. 7:20натренированной модели вообще на данный
  216. 7:22момент я не знаю какое число сюда стоит
  217. 7:24подставить поэтому я возможно один сюда
  218. 7:26подставлю потом мы запустим программу
  219. 7:28если оно обработается некорректно там
  220. 7:30это значение с вами возможно увеличим на
  221. 7:32данный момент мы скажем то что мы ищем
  222. 7:35на фотографиях лица которые по факту
  223. 7:38будут с таким же размером который был
  224. 7:40указан вы тех фотографиях что
  225. 7:43использовались для тренировки самой этой
  226. 7:45модели то есть мы не меняем как бы
  227. 7:47размер лиц возможно нам потребуется это
  228. 7:50сделать а возможно и не потребуется чуть
  229. 7:52позже мы это с вами выясним также
  230. 7:54дополнительно здесь нам ещё необходимо
  231. 7:56указать
  232. 7:57мин ней морс и за счет этого значения мы
  233. 7:59указываем как много может быть соседей
  234. 8:03рядом с найденным объектом и вот
  235. 8:05предположим если мы ищем но и не знаю
  236. 8:08например там самолеты да то
  237. 8:09соответственно
  238. 8:11рядом самолет она прям друг возле друга
  239. 8:13не стоять попросту не могут до 0
  240. 8:15например с ним в воздухе их там за мире
  241. 8:17то здесь можно было бы указать значение
  242. 8:19какой-то побольше
  243. 8:20поскольку мы говорим именно про лица у
  244. 8:22меня здесь есть такие фотографии где
  245. 8:24достаточно все близко находится там и
  246. 8:26давайте сейчас укажем с вами какое-то
  247. 8:28небольшое значение ну допустим 3
  248. 8:30опять-таки после перезапусков найти
  249. 8:32возможно значение будем с вами менять на
  250. 8:34данный момент мне давайте их оставим вот
  251. 8:36в таком формате то бишь скейл фактор он
  252. 8:38указывает насколько крупнее лица мы
  253. 8:40можем искать в нашем случае насколько
  254. 8:42крупнее лица мы можем искать а my
  255. 8:43neighbors он указывает насколько много
  256. 8:46может быть найденных объектов
  257. 8:49как бы который будет находиться друг
  258. 8:51возле друга да ну и опять-таки эти
  259. 8:53значения если что чуть позже мы будем с
  260. 8:55вами менять на данный момент я предлагаю
  261. 8:58пока это все не запускать просто по той
  262. 9:00причине что если мы сейчас то все
  263. 9:02запустим мы особо ничего не заметим ну
  264. 9:04да я могу в принципе вывести эти
  265. 9:06результаты в терминал но это особо нам
  266. 9:09никакой информации не даст мы давайте
  267. 9:11сейчас с вами лучше сделаем так что все
  268. 9:13найденные лица они будут выделены вы
  269. 9:16квадратики ну и тем самым будем понимать
  270. 9:18что нерон к обработала все корректно и
  271. 9:20лица были найдены чтобы нам все
  272. 9:24найденные лица когда ввести в квадратик
  273. 9:26нам необходимо создать цикл
  274. 9:28это цикл он будет содержать несколько
  275. 9:31значений
  276. 9:33поэтому здесь как бы создаем кортеж
  277. 9:34который будет с который будет состоять
  278. 9:36из нескольких значений во первых эта
  279. 9:38позиция
  280. 9:39как бы по координате x это позиция по
  281. 9:42координате y
  282. 9:44также это будет ширина и соответственно
  283. 9:46высота самого найденного
  284. 9:49лица и все это мы перебираем с вами в
  285. 9:51нашем вот этом вот списке которая
  286. 9:53называется резать по факту резалт он нам
  287. 9:55и вернет все вот эти вот значение то что
  288. 9:58вернет как г-координаты где у нас была
  289. 10:00найдена лицо
  290. 10:01а также он и он вернет нам ширину и
  291. 10:04высоту самого этого вот найденного лица
  292. 10:07за счет этих уже значений спокойно
  293. 10:09сможем отчертить квадратик вокруг
  294. 10:11найденного место чтобы нам очертить
  295. 10:14квадратик мы просто обращаемся к самой
  296. 10:16библиотеки обращаемся к к к к к к такому
  297. 10:19методу
  298. 10:19здесь мы говорим с каким изображением
  299. 10:21работаем работаем с тем же самым
  300. 10:23изображением что изначально далее нам
  301. 10:25нужно указать как бы первоначальную
  302. 10:27точку и первоначальная .
  303. 10:29это в нашем случае это вот эти вот
  304. 10:30координате координаты x
  305. 10:32а также игорь и далее нам нужно указать
  306. 10:34точку ну вернее 2 по следующей точке
  307. 10:38нашим этого квадрата и в качестве двух
  308. 10:41последующих точек мы делаем следующее то
  309. 10:43есть мы к первоначальной точки добавляем
  310. 10:46ширину всего нашего
  311. 10:48найденного лица а также мы к точке y
  312. 10:52добавляем высоту всего найденного лица
  313. 10:54тем самым мы как бы очертим нужный для
  314. 10:56нас квадрат вот такая здесь будет логика
  315. 10:58дополнительно мы можем здесь указать
  316. 11:00какой-либо цвет давайте я буду например
  317. 11:02окрашивать это все возможно вы красный
  318. 11:05цвет поэтому 00 255 опять-таки би джей
  319. 11:08ар да то есть вот у нас идет в конце
  320. 11:10поэтому здесь весь 55 конец добавляю ну
  321. 11:14и конечно же нужно указать
  322. 11:15сын князь это ширина обводки здесь
  323. 11:19возможно мы давайте укажем как 3
  324. 11:21если не понравится то потом это исправят
  325. 11:23ну и в самом низу мы давайте еще
  326. 11:26обратимся к и м шоу и здесь просто
  327. 11:28выведем изображением конечно же еще
  328. 11:30забыл указать подписи здесь давайте
  329. 11:32будет написано проезжал ну и также чтобы
  330. 11:34все это обработалось необходимо еще и
  331. 11:37использовать в бейки и здесь на данный
  332. 11:39момент устной просто значение как 0
  333. 11:41ok наконец давайте мы это с вами сейчас
  334. 11:44все запустим мы замечаем что нас
  335. 11:46выдается ошибка мда и ошибка выдается
  336. 11:49под обретение что скилл фактор нужно
  337. 11:51установить чуть больше чем один давить
  338. 11:53он здесь говорит что есть такая проверка
  339. 11:54как скилл фактор больше чем один ну и
  340. 11:57соответственно давайте мы стоим здесь
  341. 11:581.1 таком случае он должен обработать а
  342. 12:00корректная ok программа у нас теперь
  343. 12:02запустилась без ошибок в то же время мы
  344. 12:04можем заметить что программа не особо
  345. 12:06здорово обработала изображением потому
  346. 12:08что лица она конечно же нашла но
  347. 12:11дополнительно были найдены какие-либо
  348. 12:13другие объекты что совершенно не
  349. 12:15являются лицами плюс изображения
  350. 12:17вывелось вы сером формате это мы также
  351. 12:20давайте исправим изначально исправим
  352. 12:22немного
  353. 12:22нейронную сеть мы давайте устроим скилл
  354. 12:25фактор здесь со значением 2 то есть ни
  355. 12:27один и один она пример 2 в таком случае
  356. 12:30мы замечаем что вике уже намного меньше
  357. 12:32стало в дать их вот квадратиков также до
  358. 12:34сих пор остается еще вот этот вот
  359. 12:35квадратик ну и чтобы его тоже убрать мы
  360. 12:37давайте
  361. 12:38neighbors укажем чуть побольше еще раз
  362. 12:41это все запустим и вот замечаем что
  363. 12:43теперь все обработалось точно
  364. 12:45идеально то есть у нас были на один
  365. 12:47только лица они
  366. 12:48были обведены все обработалось без
  367. 12:51каких-либо ошибок также мы давайте
  368. 12:53все-таки наши изображения
  369. 12:54будем выводить цветным и если мы
  370. 12:57попробуем сейчас вот это изображение из
  371. 12:59серого формата сконвертировать в major
  372. 13:02это скорее всего не получится сделать на
  373. 13:05давайте я попробую это сделать но скорее
  374. 13:07всего это не получится сделать то здесь
  375. 13:09указан и м джим также мы указан формат
  376. 13:11это color это color gray ту art by
  377. 13:15например или в нашем случае лучше
  378. 13:17бильярда и если такое попробую запустить
  379. 13:19ну давайте посмотрим до съемки у нас до
  380. 13:22сих пор сера изображение отображается то
  381. 13:24есть это не это нам как бы не помогло
  382. 13:26поэтому чтобы все это исправить мы
  383. 13:29давайте сделаем вот что мы создадим с
  384. 13:31вами здесь новую переменную и в эту
  385. 13:34перемену мы как раз будем помещать сера
  386. 13:36изображением цветное изображение до сих
  387. 13:38пор будет находиться у нас в переменной
  388. 13:40m чем далее здесь мы будем использовать
  389. 13:43именно то же изображение которое
  390. 13:44называется как grey
  391. 13:46а далее мы уже на цветном изображении
  392. 13:48вот здесь будем рисовать эти все
  393. 13:50квадратики и впоследствии именно это
  394. 13:52изображение мы будем показывать
  395. 13:54пользователю если такое перезапустить
  396. 13:56вот оно все обработалось корректно то
  397. 13:58есть логика тут заключается в том что мы
  398. 14:00как бы работаем с вами именно с серым
  399. 14:03изображением но выводим информацию уже
  400. 14:06на цветном изображении вот такая здесь
  401. 14:07присутствовать лойко но и дополнительно
  402. 14:09мы давайте еще протестируем и другие
  403. 14:11изображением например people 2 здесь
  404. 14:14укажем также запускаем программу и вот
  405. 14:16мы замечаем что он не обнаружил здесь
  406. 14:18лицо давайте чтобы он все-таки обнаружил
  407. 14:21лицом и чуть-чуть уменьшим scale factor
  408. 14:23и попробуем с этим немного поиграться
  409. 14:25ну и в таком случае да вот видите я
  410. 14:27уменьшил скилл фактор и он действительно
  411. 14:29нашел нужное лицо также возможно давайте
  412. 14:32мы еще 3 изображение тоже здесь
  413. 14:34протестируем итак запускаем программу и
  414. 14:36вот в принципе он все обнаружил помимо
  415. 14:39вот этих вот двух лиц вернее даже трех
  416. 14:42лиц и на вот это тоже не обнаружил но
  417. 14:44здесь давайте я попробую еще раз steel
  418. 14:45фактор все-таки увеличить но опять же с
  419. 14:47этими значений нужно постоянно играться
  420. 14:49и вот я увеличил скилл фактор и вы
  421. 14:52замечаете что он даже лучше обработал
  422. 14:54делиться что были в прошлый раз
  423. 14:57обработаны и плюс конечно же он теперь
  424. 14:58обнаружил абсолютно все ну
  425. 15:00на ином лица то бишь за счет вот таких
  426. 15:03вот
  427. 15:03нейронных моделей натренированных вы
  428. 15:06можете быстро находить нужные объекты на
  429. 15:08разных фотографиях
  430. 15:10ну и соответственно здесь сейчас мы
  431. 15:12рассмотрели нейронную модель что
  432. 15:14позволяет нам обнаружить конкретно лица
  433. 15:16на различных фотографиях но так же
  434. 15:18существуют другие модели которые будут
  435. 15:20позволять вам находить определенные
  436. 15:22объекты например тот же самый там банан
  437. 15:24кружку там не знаю телевизор и так далее
  438. 15:27то есть это просто
  439. 15:28определенные файлы что натренированы под
  440. 15:30конкретную определенную задачу под
  441. 15:33конкретный определенный объект работа с
  442. 15:35ними будет точно такой же как и работа с
  443. 15:37вот этой вот нейронной моделью ну что ж
  444. 15:40надеюсь урок вам понравился если так то
  445. 15:42не забывайте ставить лайки и
  446. 15:44подписываться на канал
  447. 15:45также вступайте во все наши соцсети
  448. 15:46ссылки на них будут в описании к этому
  449. 15:48видео у меня ж на этом все до скорых
  450. 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.