YouTube2Text

Изучение Python OpenCV / Урок #8 – Распознавание номерных знаков и чтение их — Transcript

by Гоша Дударь · 6,132 words · 1,019 segments · language en · Watch on YouTube

Full transcript

  1. 0:00привет ходе этого урока мы научимся
  2. 0:02распознавать номерные знаки а также
  3. 0:04считывать информацию с них при помощи
  4. 0:06библиотеки opencv и но перед началом я
  5. 0:08рекомендую вам сайт айти прагер точка
  6. 0:10ком на этом сайте вы найдете код
  7. 0:12домашнее задание и много другой полезной
  8. 0:14информации ссылка на этот урок на сайте
  9. 0:16будет в описании к этому видео
  10. 0:18переходите не пожалеете
  11. 0:19в ходе этого урока мы также можем
  12. 0:21использовать натренирован ую модель
  13. 0:23точно так же как это мы делали в прошлом
  14. 0:25уроке но я предлагаю поступить немного
  15. 0:27иначе мы лучше будем использовать
  16. 0:29какие-либо сторонние библиотеки так как
  17. 0:31если использовать натренирован ую модель
  18. 0:33то в принципе этот урок он особо ничем
  19. 0:35не будет отличаться от прошлого урока
  20. 0:37поэтому в ходе этого урока мы с вами
  21. 0:40будем использовать различные сторонние
  22. 0:41библиотеки для считывания информации сын
  23. 0:44номерного знака
  24. 0:45ну а сам номерной знак мы уже будем
  25. 0:47находить самостоятельно при помощи
  26. 0:49библиотеки о пенсии и при помощи тех
  27. 0:51функций что мы изучали в ходе всего
  28. 0:53этого видеокурса для начала я предлагаю
  29. 0:56открыть терминал и сейчас мы установим
  30. 0:58кое-какие дополнительные библиотеки что
  31. 1:00нам понадобится в ходе самого этого
  32. 1:02видеоурока
  33. 1:03итак первый библиотека который нам
  34. 1:04понадобится это изи acer за счет этой
  35. 1:08библиотеке мы можем с вами считывать
  36. 1:10информацию с и картинки
  37. 1:12то есть например если там будет написано
  38. 1:13какой то текст то мы сможем вас читать
  39. 1:15поэтому мы давайте скопируем просто
  40. 1:18строку с и установка этой библиотеке им
  41. 1:20ну и так же выполним установку с модами
  42. 1:23блики внутри нашего проекта нам также
  43. 1:25нужна такая библиотека которая
  44. 1:27называется иметь ютился ну или ай эм
  45. 1:30ютилась за счет этой библиотеке мы имеем
  46. 1:32доступ к некоторым дополнительным
  47. 1:34базовым функциям при работе с
  48. 1:37изображениями то например вращение
  49. 1:39изображения это например там какая-то ее
  50. 1:41трансформация дополнительная да такое
  51. 1:43все можно делать при помощи up on se ven
  52. 1:44но даже здесь есть некоторые
  53. 1:46дополнительные интересные возможности
  54. 1:47которые которые нам как раз и
  55. 1:50понадобится входит тоже этого урока и
  56. 1:52так у меня тут пока происходит установка
  57. 1:54давайте я наверное еще открою один
  58. 1:56терминал здесь еще раз прописываю
  59. 1:58установку другой уже библиотеки ну и
  60. 2:01также помимо всех вот этих двух
  61. 2:03витёк я бы еще хотел установить такую
  62. 2:05библиотеку которая называется нет плод у
  63. 2:07рыб за счет этой библиотеке мы можем
  64. 2:09визуализировать различные данные ну и я
  65. 2:12просто за счет этой библиотеке буду
  66. 2:14выводить изображение на экран да можно
  67. 2:17изображение выводить при помощи up in
  68. 2:19seven но мы давайте просто чтобы как
  69. 2:22можно больше библиотека хватить там и
  70. 2:24давайте еще просто будем использовать
  71. 2:25matplotlib из 1
  72. 2:27рассмотрим каким именно образом можно за
  73. 2:29счет этой библиотеке уже что-либо будет
  74. 2:31выводить на экран
  75. 2:32поэтому также копируем строчку с
  76. 2:34установкой данной библиотеки и
  77. 2:36соответственно устанавливаем ее внутрь
  78. 2:38нашего проекта теперь давайте выполним
  79. 2:40все подключения пока давайте терминал
  80. 2:42даже скроем и так конечно же нам
  81. 2:44потребуется о пенсии библиотекам поэтому
  82. 2:46мы и здесь с вами
  83. 2:47импортировали дополнительно нам
  84. 2:49потребуется такая библиотека как нам ой
  85. 2:52мы давайте и здесь подключим и возможно
  86. 2:54даже дадим ей псевдоним н.п.
  87. 2:56обычно так все и прописывает также сюда
  88. 2:57мы импортируем еще библиотеку и мяч you
  89. 3:00tell us ну или просто а.м. ютел
  90. 3:03дополнительном и давайте еще сюда будем
  91. 3:05импортировать
  92. 3:06izeo.ru эту библиотеку ну и конечно же
  93. 3:10нам необходимо еще matplotlib
  94. 3:11импортировать но это не мультика
  95. 3:13научиться лишком огромная а мы по факту
  96. 3:15и будем использовать только для того
  97. 3:17чтобы вывести некое изображение на экран
  98. 3:20поэтому я давайте лучше укажу так что мы
  99. 3:22будем из библиотеки matplotlib мы из нее
  100. 3:25будем импортировать такую вещь как
  101. 3:27функция плод и за счет этой функции мы
  102. 3:31сможем что либо выводить
  103. 3:32но за счет вернее этого объекта мы
  104. 3:33сможем что либо выводить на экран
  105. 3:35например изображение здесь же можно
  106. 3:37указать некий
  107. 3:38псевдоним давайте я здесь укажу пел
  108. 3:41допустимо такое него будет все в доме
  109. 3:42теперь наконец приступаем к написанию
  110. 3:45нашей программы в первую очередь создаем
  111. 3:47некую переменам который будет ссылаться
  112. 3:49на изображение из нашей программке для
  113. 3:52того чтобы ссылаться на некое
  114. 3:54изображение обращаемся к пенсии
  115. 3:56обращаемся к методу
  116. 3:57и иметь рид и здесь мы просто говорим о
  117. 3:59том что я обращаюсь к папке и majeste и
  118. 4:02на данный момент у меня в этой папке нет
  119. 4:04нужного изображения
  120. 4:05сами изображение я уже подготовил
  121. 4:07несколько таких вот изображение ну и
  122. 4:10давайте мы эти все изображения как раз с
  123. 4:12вами сюда и добавим просто их помещаем
  124. 4:14сюда
  125. 4:15ри фактор в принципе не добавлены а
  126. 4:17также не мне открылись они мне на данный
  127. 4:19момент не нужны поэтому давайте вскроем
  128. 4:21ну и далее я просто говорю о том что я
  129. 4:23выбираю такое изображение как лайт 1 .
  130. 4:26и дальше мы будем еще и с другими тоже
  131. 4:28изображениями работать далее нам
  132. 4:31необходимо конечно же это изображение
  133. 4:33привести к серому формату чтобы опять
  134. 4:35таки у нас была не 3 слоем а всего лишь
  135. 4:37один слой мы давайте здесь будем
  136. 4:39использовать с вами некую новую же
  137. 4:41переменную в эту переменную мы будем с
  138. 4:43вами устанавливать следующие так конверт
  139. 4:44color здесь указываем что мы обращаемся
  140. 4:46к нашему первоначальному изображению и
  141. 4:49указан формат просто конвертирован в
  142. 4:51моем случае это бильярд угрей также
  143. 4:54здесь мы давайте выведем наши
  144. 4:56изображением вот только в этот раз мы
  145. 4:58уже будем использовать matplotlib
  146. 5:00мы конкретно там будем использовать
  147. 5:01объект ой плод соответственно обращаемся
  148. 5:03к ним о псевдониму обращаемся к методу
  149. 5:06и м шоу то есть и матч шоу и здесь же мы
  150. 5:09можем указать например чтобы вывести
  151. 5:11серое изображение или мы можем вывести
  152. 5:13наше первоначальное изображение но если
  153. 5:16вот мы сейчас будем выводить просто
  154. 5:17первоначально наше изображение то мы
  155. 5:19заметим что он будет выглядеть не совсем
  156. 5:21корректно давайте мы еще чтобы его
  157. 5:22полностью вывести нам еще нужно здесь
  158. 5:24был шелк прописать и если сейчас такое
  159. 5:27запустить то вот что мы с вами заметим
  160. 5:30сейчас будет будет фотография пока снова
  161. 5:31то мы замечаем что наше изображение но
  162. 5:33выглядит ну совершенно иначе дата здесь
  163. 5:36идут другие сконвертирован ее цвета так
  164. 5:39происходит по той причине что библиотека
  165. 5:41matplotlib
  166. 5:42она отображает изображение в формате art
  167. 5:45baby в тоже время мы сюда передаем
  168. 5:47изображение которое идет в формате pdf
  169. 5:49поэтому чтобы у нас все верно
  170. 5:51отображалась без конвертации цветов а
  171. 5:54нам здесь необходимо обратиться к
  172. 5:55up in seven дальше нам нужно обратиться
  173. 5:58к методу конверт color здесь мы
  174. 6:00обращаемся к нужному изображению и
  175. 6:02просто мы говорим о том что мы из такого
  176. 6:04формата как which are мы преобразовываем
  177. 6:07все вы формат art baby вот этот формат
  178. 6:09ну и дальше опять таки показывал просто
  179. 6:11изображение если сейчас такое запущу
  180. 6:14то мы заметим что вот видите у нас
  181. 6:15изображение абсолютно корректно была
  182. 6:17обработана да то есть верное изображение
  183. 6:20с верными цветами но здесь была выведена
  184. 6:22ну на данный момент возможно давайте мы
  185. 6:24пока такое закомментируем
  186. 6:25момент она мне попросту здесь не нужно
  187. 6:27теперь давайте выполним оптимизацию
  188. 6:30нашей фотографии мы конечно же выполнили
  189. 6:33ее приведение к серому форматом но
  190. 6:35следующее что нам необходимо сделать так
  191. 6:38это нам нужно наложить фильтр дабы
  192. 6:40уменьшить количество различных точек мы
  193. 6:43можем сюда наложить конечно в качестве
  194. 6:45фильтра просто размытие изображения но
  195. 6:48мы давайте вместо размытие воспользуемся
  196. 6:50функцией который позволяет уменьшить шум
  197. 6:53почему мы
  198. 6:54почему мы сейчас будем использовать
  199. 6:56именно эту функцию просто по той причине
  200. 6:57что нам необходимо все-таки иметь
  201. 6:59достаточно хорошую четкую картинку если
  202. 7:02мы размываем изображение то потом понять
  203. 7:05какие там написаны символы на
  204. 7:06изображение будет достаточно сложно
  205. 7:08поэтому мы лучше не будем размывать
  206. 7:10изображение а уменьшим шум изображение
  207. 7:13по факту мы уменьшим количество вот этих
  208. 7:15вот точек и тем самым и оптимизируем
  209. 7:18картинку и не ухудшение качества здесь
  210. 7:20мы давайте создадим некую переменную ну
  211. 7:22допустим это будет переменная фильтром
  212. 7:24ну и тут мы просто обращаемся к нашей
  213. 7:26библиотеке up in seven и обращаемся к
  214. 7:28такому методу которая называется
  215. 7:30bilateral фильтр сюда нужно передать
  216. 7:32несколько параметров во первых это наше
  217. 7:34изображение причем мы должны передать
  218. 7:36именно серая изображение поэтому передаю
  219. 7:39перемен играем дальше второй параметр
  220. 7:42это диаметр то есть это как бы насколько
  221. 7:44много пикселей будет охвачено который
  222. 7:46находится друг вот в игрушки и на данный
  223. 7:48момент давайте укажу здесь число 11 чуть
  224. 7:51позже по необходимости это число могу
  225. 7:54увеличить уменьшить но опять и в
  226. 7:55зависимости от того насколько мне
  227. 7:57понравился и результат на данный момент
  228. 7:58оставим как 11 следующий параметр он
  229. 8:01указывает цветовое пространство
  230. 8:03если мы здесь укажем больше число то
  231. 8:05соответственно это будет указывать на то
  232. 8:07насколько много пикселей с и примерно
  233. 8:10одинаковым цветом будут смешиваться ну и
  234. 8:13опять же давайте сейчас мы укажем ну
  235. 8:14допустим здесь число 15 также мы должны
  236. 8:17указать
  237. 8:18и третий параметр это уже координатное
  238. 8:20пространство работает по схожему
  239. 8:22принципу то есть насколько много у нас
  240. 8:24различных пикселей будут смешиваться
  241. 8:26друг с другом которые будут схожи по
  242. 8:28координатам и здесь мы также укажем
  243. 8:30например число 15 ну на данный момент
  244. 8:33особо можно не внедряться во все эти на
  245. 8:35самом-то деле параметры просто можете их
  246. 8:37записать если она
  247. 8:38если это значение нам по надо ну
  248. 8:39понравится там будем его использовать
  249. 8:42если нет тогда мы эти значения просто
  250. 8:44поменяю следующие после того как мы
  251. 8:47указали уменьшение шума на изображением
  252. 8:50нам необходимо найти еще контуры
  253. 8:52изображения для этого мы давайте
  254. 8:54создадим некую новую перемены пускай она
  255. 8:56будет называться как и джесс ну допустим
  256. 8:58да то есть углы вот эти вот контуры и
  257. 9:00далее мы обращаемся к нашей библиотеке
  258. 9:02обращаемся к методу с которым мы
  259. 9:04работали это метод ткани здесь мы просто
  260. 9:06указом с вами переменную фильтр и
  261. 9:08возможно давайте мы наверное укажи мне
  262. 9:11фильтр а допустим давайте так m&g фильтр
  263. 9:15вот такие называют у перемены просто
  264. 9:16потому что фильтр это зарезервированное
  265. 9:18слово и лучше мы будем называть как-то
  266. 9:20по-другому наши переменные ну допустим и
  267. 9:22эмчи фильтр и так вот здесь выкинем и
  268. 9:25просто указом с вами фильтр да сама это
  269. 9:28изображение с нужным примененным
  270. 9:30фильтром и тут же мы можем указать как
  271. 9:32бы порог начальный
  272. 9:34и максимальный и на самом-то деле мы
  273. 9:36можем указать здесь любые значения можем
  274. 9:38пятки указать здесь 3030 например как
  275. 9:41этом раньше указывать что порог 1 2 он
  276. 9:43совпадал но давайте мы лучше укажем с
  277. 9:45вами какой-то действительный диапазон
  278. 9:46например здесь будет 30 здесь будет 200
  279. 9:49но допустим что то в этом духе а также
  280. 9:51давайте мы опять же протестируем
  281. 9:53посмотрим что же у нас получилось и
  282. 9:55здесь я предлагаю уже выводить не наше
  283. 9:58стандартное изображение а давайте
  284. 9:59выведем
  285. 10:00изображением вот этими всеми краями
  286. 10:02опять-таки запускаем программу посмотрим
  287. 10:04что получилось и вот как выглядит на
  288. 10:06данный момент наши изображения и вот мы
  289. 10:08можем заметить что номер он здесь четко
  290. 10:10выделяется и по факту по этим контуром
  291. 10:12нам легко будет отследить какие же цифры
  292. 10:14какие же символы здесь написано поэтому
  293. 10:17давайте пока скроем это
  294. 10:18и двинемся далее следующее что нам
  295. 10:21необходимо сделать так это после того
  296. 10:23как мы обнаружили все вот эти вот краям
  297. 10:25нам необходимо обнаружить еще и контуры
  298. 10:27потому что именно за счет контуров мы
  299. 10:29можем уже понять где какие объекты
  300. 10:31находятся и а главное мы можем считать
  301. 10:34эти объекты
  302. 10:35а как за счет именно углов мы еще особо
  303. 10:37нечего читать не
  304. 10:38можем ну и давайте мы с вами создадим
  305. 10:41некую переменную пускай она будет
  306. 10:42называться как конт
  307. 10:44ну допустим что то в этом духе далее
  308. 10:46обращаемся к нашей библиотеке
  309. 10:48обращаемся к методу fine конкурс здесь
  310. 10:50нам необходимо сделать следующее мы
  311. 10:52обратимся к нашему к нашему поэтому вот
  312. 10:56изображению с углами и я предлагаю это
  313. 10:58изображение здесь скопировать то есть мы
  314. 11:01не будем на этом же изображение что-либо
  315. 11:03делать да а мы будем копировать это
  316. 11:05изображение и по факту это скопированное
  317. 11:07изображение будет устанавливаться нас
  318. 11:09вот сюда нашу новую перемены здесь же
  319. 11:12нам необходимо указать
  320. 11:13режим нахождение всех этих контуров и
  321. 11:15ранее мы использовали с вами такой режим
  322. 11:18как выезд он позволял нам найти
  323. 11:19абсолютно все контры но сейчас мы будем
  324. 11:23использовать такой режим как 3
  325. 11:24он позволяет нам тоже найти все контуры
  326. 11:26но не будут в иерархическом порядке
  327. 11:29проставлены поэтому давайте именно такой
  328. 11:31режим мы с вами здесь и будем
  329. 11:33использовать также конечно же нам нужно
  330. 11:35еще указать метод нахождения всех этих
  331. 11:37контуров и ранее мы опять же с вами
  332. 11:40использовали такой метод как chain
  333. 11:43approx на но также давайте мы лучше
  334. 11:46будем использовать chain approx simple
  335. 11:48я рассказывал что этот метод он более
  336. 11:50оптимизирован опять же он позволяет нам
  337. 11:53найти просто как бы первоначальную
  338. 11:54конечную точку они находить все еще
  339. 11:56дополнительные точки на этом промежутке
  340. 11:58соответственно это нет более
  341. 11:59оптимизированным и давайте именно его и
  342. 12:01будем использовать
  343. 12:02ну и далее мы давайте с вами сделаем
  344. 12:05следующее мы создадим ещё некую
  345. 12:07переменную ну или даже давать не будем
  346. 12:09создавать возможно новые переменам и
  347. 12:10давайте в ту же переменную мы будем
  348. 12:12устанавливать новые означает мы будем с
  349. 12:15вами сейчас как бы считывать все эти
  350. 12:17контуры и мы будем считывать за счет
  351. 12:20дополнительной библиотеки которая
  352. 12:22называется и мяч ютилась соответственно
  353. 12:24к ней мы обращаемся обращаемся к методу
  354. 12:26grub контур и сюда мы передаем с вами
  355. 12:28просто вот эти вот контуры которые в
  356. 12:30прошлый раз мы просто получили ибо троне
  357. 12:33мы например работали с контурами без
  358. 12:35дополнительной библиотеки сейчас мы
  359. 12:37работаем просто с этой библиотекой по
  360. 12:39этой причине что эта библиотека она
  361. 12:41предоставляет нам вот этот вот
  362. 12:42удобными
  363. 12:43что позволяет нам в удобном формате
  364. 12:45получить все эти контры и плюс мы их
  365. 12:48сможем идти и контуры отсортировать и
  366. 12:50найти только те контуры которые нас
  367. 12:52будут интересовать конкретным не будет
  368. 12:54интересовать только квадратные такие
  369. 12:56продолговатые контуры
  370. 12:57ну которые будут по факту описывать
  371. 12:59именно номерной знак на и вообще меня
  372. 13:01принципе интересует только контуры
  373. 13:02которую описывает какой-либо квадрат вот
  374. 13:04можно так это назвать и сейчас мы скоро
  375. 13:07с вами сделаем то что все наши контуры
  376. 13:09мы отсортируем чтобы их отсортировать мы
  377. 13:12используем встроенный метод которые
  378. 13:13существуют в питоне он называется sorted
  379. 13:16и сюда мы передаем с вами контуры и
  380. 13:18контуры я напомню это список мы его
  381. 13:20сортируем с вами
  382. 13:22также мы с вами сюда передаем еще ключ и
  383. 13:24указываем просто метод сортировки в
  384. 13:28качестве метода sandero сортировки мы
  385. 13:30указываем контур и рио то есть мы как бы
  386. 13:32говорим о том что мы ищем только
  387. 13:34квадратные какие-либо контуры также еще
  388. 13:38интересно указать то что все должно быть
  389. 13:41в обратном порядке потому что ж не какие
  390. 13:44объекты не будут удалены правильно
  391. 13:45поэтому мы просто делаем так что все эти
  392. 13:48объекты что будут похожий на нужные нам
  393. 13:51контур они должны находиться вверху и
  394. 13:53чтобы у нас вот этот был обратный
  395. 13:55порядок мы здесь указом рифе
  396. 13:56реверс труда все как бы нужны нам объект
  397. 14:00они будут находиться вверху и здесь же
  398. 14:02мы еще можем указать с вами то что мы
  399. 14:04будем выбирать ну допустим только
  400. 14:06последние восемь элементов из всего
  401. 14:08этого списка потому что ну опять же
  402. 14:10контуров их очень много там находится на
  403. 14:13самом изображение нам они все
  404. 14:14неинтересным и давайте найдем только
  405. 14:16последний 8 например контуров если что
  406. 14:18это значение чуть позже увеличим ну и
  407. 14:20именно эти контуры
  408. 14:22именно с этими контурами мы и будем
  409. 14:23работать то есть на данный момент мы с
  410. 14:26вами что сделали мы с вами открыли
  411. 14:27изображение немного его оптимизировали
  412. 14:30нашли различные вот здесь нашли
  413. 14:32различные вот эти вот края
  414. 14:33дальше мы по краям нашли контры и дальше
  415. 14:36мы эти контуры просто немного но не то
  416. 14:39что оптимизировали мы их просто
  417. 14:40отсортировали и как бы за счет вот этой
  418. 14:42вот сортировки мы указали что нас
  419. 14:44интересует
  420. 14:44это крупные контуры которые похожи на
  421. 14:47некую поглощать до то есть на некие
  422. 14:49квадрат и вот и
  423. 14:51по факту мы из этого всего списка
  424. 14:53контуров возьмем только последние восемь
  425. 14:55например
  426. 14:55элементов если нам это число будет не
  427. 14:57подходить возьмем чуть чуть попозже
  428. 14:59больше элементов
  429. 15:01теперь давайте переберём наши counter in
  430. 15:03и постараемся найти именно те контуры
  431. 15:05что отвечают за отображение номерного
  432. 15:08знака
  433. 15:08чтобы нам такое сделать мы давайте
  434. 15:10создадим некую новую переменную допустим
  435. 15:12она будет называться как ос то есть
  436. 15:14позишн а чуть позже в эту переменную мы
  437. 15:17запишем возможную позицию нашего
  438. 15:19номерного знака
  439. 15:21далее мы создаем просто с вами цикл
  440. 15:23здесь я давайте создам
  441. 15:25некую перемена пускай она просто будет
  442. 15:27называться у меня как си и дальше говорю
  443. 15:29что я ее что я буду перебирать такой
  444. 15:32список как конт да то есть это у меня
  445. 15:34список что состоит из всех контуров
  446. 15:36здесь же в этом цикле я создам новую
  447. 15:39переменную она называется она будет меня
  448. 15:42называться как approx вообще с
  449. 15:44английского и proxomitron это
  450. 15:46приблизительно примерно и соответственно
  451. 15:48мы сейчас будем стараться примерно найти
  452. 15:51номерной знак и чтобы нам такое сделать
  453. 15:54мы просто обращаемся к нашей библиотеке
  454. 15:56обращаемся к методу который называется и
  455. 15:58prox пол и т.п.
  456. 15:59здесь мы должны передать наш контур ну в
  457. 16:02моем случае это вот эта переменная сен
  458. 16:04соответственно я ее сюда передаю и
  459. 16:06следующий параметр который здесь мне
  460. 16:08необходимо указывать
  461. 16:10это по сути насколько сильно наши
  462. 16:14насколько сильно наш контур должен быть
  463. 16:17в форме именно квадрата что то в этом
  464. 16:19духе можем так это назвать
  465. 16:20например если здесь я укажу значение 1
  466. 16:23это будет означать то что наш наша форма
  467. 16:27она может быть даже примерно кругом и
  468. 16:29все равно мы как бы это засчитаем за
  469. 16:32квадрат если здесь укажу более точному
  470. 16:35более высокое значение например там 4 5
  471. 16:37и так далее то соответственно мы будем
  472. 16:39выбирать только те контуры которые все
  473. 16:42ближе и ближе будут подходить именно на
  474. 16:44форму квадрата но опять же я ищу именно
  475. 16:47номерной знак
  476. 16:48он меня форме квадрата поэтому здесь я
  477. 16:51давайте возможно укажу даже значение как
  478. 16:5310 а возможно мне потребуется и какой то
  479. 16:55большее значение и здесь же мы должны
  480. 16:57еще указать третий параметр и со
  481. 16:59значением true
  482. 17:00тем самым мы говорим что мы находим
  483. 17:02только те контуры чья форма является
  484. 17:04закрытой вот например если мы говорим
  485. 17:06про обычный
  486. 17:07обычную линию в таком случае у линии
  487. 17:10есть начало есть конец но не как эти две
  488. 17:12вещи они не соединены друг с другом если
  489. 17:15же мы ищем с вами именно некий квадрат
  490. 17:17нам важно чтобы
  491. 17:19начальная точка также конечная точка это
  492. 17:21была одна и та же самая координатам и
  493. 17:23соответственно именно такие формы мы и
  494. 17:25ищем
  495. 17:25то есть те формы которые имеют что
  496. 17:28начальную что конечную точку как бы вы 1
  497. 17:30координате ну и далее мы давайте
  498. 17:33пропишем здесь небольшую проверку
  499. 17:34мы с вами просто будем проверять длину
  500. 17:37полученного вот это полученный вот этой
  501. 17:39вот координаты полученного этого контура
  502. 17:41и если у нас длина
  503. 17:43оно будет состоять из четырёх элементов
  504. 17:45то в таком случае мы скорее всего найдем
  505. 17:48с вами именно номерной знак почему
  506. 17:51четыре элемента да просто по той причине
  507. 17:52что четыре элемента это по факту
  508. 17:54координаты всех вот эти вот 4 точек всех
  509. 17:59четырех углов нашего квадрата да именно
  510. 18:02такой нам и нужно поэтому мы и отслежен
  511. 18:05на значение 4 и здесь мы в таком случае
  512. 18:08давайте будем сами вы переменной повышен
  513. 18:11устанавливать с вами вот эту вот approx
  514. 18:12а также мы можем выходить из самого
  515. 18:15цикла по той причине что нам больше не
  516. 18:17нужно перебирать все эти контуры то бишь
  517. 18:19что мы с вами получили мы получили то
  518. 18:21что мы перебираем полностью все контуры
  519. 18:23дальше мы с вами как бы
  520. 18:25пытаемся приблизительно найти те контуры
  521. 18:28которые ну примерно будут похожи на
  522. 18:31квадрат опять же если что это значение
  523. 18:33чуть чуть позже увеличу
  524. 18:34также здесь же я говорю о том что мы
  525. 18:36находим только закрытые формы где
  526. 18:39. начала и . конца совпадает плюс мы с
  527. 18:42вами отслеживаем только те объекты
  528. 18:44только те элементы что содержит четыре в
  529. 18:47себе значение это как бы координаты
  530. 18:50каждого из углов нашего квадрата если мы
  531. 18:53такое находим там и
  532. 18:54предположительно думаем что это наша раз
  533. 18:57номерной знак моего записываем в нашу
  534. 18:59переменную позишн и в общем то дальше мы
  535. 19:01с этой переменной мы уже можем с вами
  536. 19:03работать теперь давайте немного
  537. 19:04протестируем программу для этого я
  538. 19:06просто позицию буду выводить в терминал
  539. 19:09и посмотрим что у нас получилось и на
  540. 19:12данный момент вы можете заметить что на
  541. 19:13сводится здесь значение на на это
  542. 19:15означает то что не было найдено
  543. 19:18не так у которых была длина 40 поскольку
  544. 19:21не было на один таких элементов то и вот
  545. 19:24эта переменная она осталась со значением
  546. 19:25на поэтому мы наверняка давайте с вами
  547. 19:28сейчас укажем то что мы будем выбирать
  548. 19:30полностью все возможные контуры и
  549. 19:33посмотрим вообще в таком случае
  550. 19:35находится ли у нас хоть что-либо
  551. 19:36еда в таком случае действительно стыда
  552. 19:38что-то находится если мы берем полностью
  553. 19:40все контуры а не только некоторые из них
  554. 19:42то в таком случае 10 на мы находим
  555. 19:45нужные координаты ну и давайте на данный
  556. 19:49момент я не буду здесь указывать
  557. 19:50какую-то ну какой то диапазон выборки
  558. 19:53давайте я укажу так что мы выбираем
  559. 19:54полностью все координаты
  560. 19:56вот чуть позже если что и я это изменю
  561. 19:59но пока будем выбирать полностью всех
  562. 20:01координаты теперь из общего фото нам
  563. 20:04необходимо выделить
  564. 20:05исключительно номерной знак и для этого
  565. 20:08мы будем использовать по битовые
  566. 20:09операции также маски который мы
  567. 20:11проходили в прошлых уроках
  568. 20:13итак создадим некую новую переменную
  569. 20:15пускай она будет называться как mask
  570. 20:17здесь мы обращаемся к библиотеке нам
  571. 20:20обращаемся к методу zeroes и тут нам
  572. 20:23необходимо указать то что наше новое
  573. 20:26полотно
  574. 20:26она будет именно с такими же размерами
  575. 20:28что и например наше серое
  576. 20:31изображение здесь здесь же можно было бы
  577. 20:33указать и обычное изображение
  578. 20:35но давайте будем уже сразу работать с и
  579. 20:37каким-либо более оптимизированным
  580. 20:38изображением также здесь нужно указать
  581. 20:41де type и на самом-то деле можно де type
  582. 20:44конечно же указывать как это мы всегда
  583. 20:46делали а еще можно указать здесь
  584. 20:48следующем может просто обратиться к
  585. 20:50н.п. нам ой и здесь мы можем просто
  586. 20:52указать и ю ин 8 соответственно что то
  587. 20:56вот в этом духе только не правильно
  588. 20:57начал писать это будет почти то же самое
  589. 20:59что и указание деталь так что можете в
  590. 21:02дальнейшем смотреть либо так указывать
  591. 21:03либо через один type следующее что нужно
  592. 21:06сделать так это нужно создать новое
  593. 21:08некое изображением его называем как new
  594. 21:10engine здесь мы обращаемся к up in seven
  595. 21:13далее мы давайте обратимся к методу друг
  596. 21:17counters за счет этого метода мы с вами
  597. 21:19рисовали контуры и сейчас он нам тоже
  598. 21:21понадобится и здесь я говорю что на вот
  599. 21:23этом новом полотне как раз и буду
  600. 21:25рисовать контуры причем мне
  601. 21:28нужно указать как бы сами вот эти вот
  602. 21:30контур мне нужно указать их локацию где
  603. 21:33я нарисую их и соответственно качестве
  604. 21:36локации я просто использую нашу вот эту
  605. 21:39вот позицию до
  606. 21:40наш вот этот вот список причем его важно
  607. 21:42передавать тоже именно в формате списка
  608. 21:45поэтому так я здесь и делаю далее здесь
  609. 21:47мы можем с вами указать принципе в
  610. 21:49качестве следующего параметра это просто
  611. 21:51ну в контур аиде мы можем сказать как 0
  612. 21:55цвет мы давайте укажем как 255 тыс это
  613. 21:58будет полностью белый также по желанию
  614. 22:00можете указывать здесь и кортеж
  615. 22:03состоящий из трех цветов
  616. 22:04обводку мы указываем -1 до бы вся
  617. 22:07поверхность была заполнена ну и теперь
  618. 22:10мы давайте выполним побитую операцию мы
  619. 22:13назовем некую новую переменную как вид
  620. 22:15вайс и м.д.
  621. 22:17и сюда мы устанавливаем следующее мы
  622. 22:19обращаемся к нашей библиотеке обращаемся
  623. 22:21к
  624. 22:21with white and здесь мы просто говорим
  625. 22:24что к нашему первому изображение мы как
  626. 22:26бы добавляем еще раз наше первое
  627. 22:28изображение
  628. 22:29такая здесь вот логика и также мы
  629. 22:31указываем здесь маску но в качестве
  630. 22:33маски мы уже используем вот эту вот нашу
  631. 22:36переменную маска теперь давайте
  632. 22:38попробуем вывести все это на экран для
  633. 22:40этого мы опять таки будем использовать
  634. 22:42matplotlib вот только в этот раз мы
  635. 22:44будем выводить уже такую перемену как
  636. 22:46битвой и m&g если мы это сейчас все с
  637. 22:49вами запустим то на самом-то деле мы
  638. 22:51замечаем что ну не все уж корректно
  639. 22:53как-то обработалось да если не сказать
  640. 22:55что вообще некорректная обработалось так
  641. 22:57происходит по той причине что на самом
  642. 22:59то деле я подобрал не лучшую фотографию
  643. 23:01здесь уж слишком есть много различных
  644. 23:04квадратов чего уж говорить даже вот про
  645. 23:06вот эти вот различные квадратики поэтому
  646. 23:08мы давайте сейчас с вами будем
  647. 23:10использовать ну допустим вот такое
  648. 23:11изображение то есть не будем
  649. 23:13использовать предыдущий да будем
  650. 23:14использовать например вот такой вот
  651. 23:16изображением и здесь отчетливо видно
  652. 23:18номерной знак и мы этот номерной знак
  653. 23:20как раз вами и
  654. 23:22считаем скачать такую же картинку вы
  655. 23:24сможете с сайта а эти прагер ссылку на
  656. 23:27урок оставляю в описании к этому видео
  657. 23:29так вот я давайте здесь просто поменяю я
  658. 23:31буду использовать именно plate 3 именно
  659. 23:33вот эту вот мою третью картинку как бы и
  660. 23:35если сейчас это все запущу
  661. 23:37то в таком случае в таком
  662. 23:40удивите номерной знак он корректно здесь
  663. 23:43выделяется вот мы его действительно
  664. 23:45выбрали из всего изображения дальше нам
  665. 23:48только останется его еще как бы
  666. 23:49прочитать ну то есть
  667. 23:51узнать что написано на этом номерном
  668. 23:53знаке и по факту потом еще обвести и
  669. 23:55показать это все пользователю это уже
  670. 23:57так сказать дело за малым и пару слов
  671. 24:00относительно того почему так тут все
  672. 24:01коряво у нас получилось дело в том что
  673. 24:03на данный момент мы не используем с вами
  674. 24:06никакую уже обученную модель а также мы
  675. 24:08с вами не обучаем самостоятельно
  676. 24:10нейронную сеть
  677. 24:11все что мы с вами делаем так это мы
  678. 24:13берем некое изображение и пытаемся
  679. 24:16приблизительно найти на этом изображении
  680. 24:18номерной знак то есть мы пытаемся найти
  681. 24:20как бы те контуры которые подходят под
  682. 24:23номерной знак
  683. 24:24конечно же такой подход он не идеален
  684. 24:26поэтому он иногда выдает вот такие вот
  685. 24:28результаты порой он выдает правильные
  686. 24:30результаты а порой конечно же
  687. 24:31неправильные результаты
  688. 24:33ну и в каких-то крупных уже проектах
  689. 24:36лучше не использовать именно подобный
  690. 24:37подход а лучше использовать либо уже
  691. 24:40готовую натренирован ую модель точно то
  692. 24:43же самое мы делали в прошлом уроке либо
  693. 24:45можно тренировать свою собственную
  694. 24:47модель если вы не нашли уже готовую
  695. 24:49модель
  696. 24:50вот мы же с вами сейчас рассматриваем
  697. 24:52просто дополнительный подход каким
  698. 24:54именно образом можно работать с этими
  699. 24:56всеми изображениями и также можно с них
  700. 24:58вытягивать нужную нам информацию вот
  701. 25:00например мы для номерных знаков пытаемся
  702. 25:02найти квадраты и пытаемся дальше уже
  703. 25:05распознать с них информацию и так мы
  704. 25:08давайте кое-что здесь по скрываем чтобы
  705. 25:10нас как-то меньше было текста и
  706. 25:12следующее что я предлагаю сделать так
  707. 25:14это из всего изображения вырезать только
  708. 25:17номерной знак потому что все остальное
  709. 25:18нам по факту не особо нужно поэтому
  710. 25:20здесь мы создаем две перемены пускай не
  711. 25:23будет x и y дальше мы обращаемся к нам
  712. 25:26пай и обращаемся к такому методу которая
  713. 25:28называется как в
  714. 25:29за счет этого метода мы можем с вами из
  715. 25:32определенной матрицы
  716. 25:34ну или другими словами из нашего
  717. 25:36изображения мы можем вытянуть только те
  718. 25:39ну когда только те
  719. 25:41пиксели которые будут подходить под
  720. 25:43определенное значение в нашем случае я
  721. 25:46здесь указываем маску и
  722. 25:48в качестве значения для этой маски
  723. 25:50указывает 255 то есть те цвета которые
  724. 25:53будут
  725. 25:53приближены к белому они как раз у нас и
  726. 25:56будут
  727. 25:57вытянутый и далее мы с вами просто
  728. 25:59должны найти как бы координаты первой
  729. 26:03нашей точки верхней левой а также
  730. 26:05координаты нижней правой точке и для
  731. 26:07этого я создаю ещё здесь две перемены
  732. 26:09это икс один и игрек один сюда мы
  733. 26:12поместим с вами следующее это мы давайте
  734. 26:14укажем здесь
  735. 26:15обращение к нам ой обращение к функции
  736. 26:18мин она позволяет нам найти минимальный
  737. 26:20элемент и мы находим минимальный элемент
  738. 26:22ну в наших координатах x а также
  739. 26:25дополнительно мы обращаемся к нам пай
  740. 26:28еще раз к той же самой функции и находим
  741. 26:31же только минимальный элемент для
  742. 26:33координаты y точно то же самое мы делаем
  743. 26:37и для нижних координат сейчас вот за
  744. 26:40счет
  745. 26:40x1 y1 мы как бы нашли верхнюю координату
  746. 26:42это верхняя левая координата
  747. 26:44нашего номера а также находим сейчас
  748. 26:46правую нижнюю координату нашего номера и
  749. 26:49здесь соответственно мы используем про
  750. 26:50другие функции там макс
  751. 26:52x и макс y вот и вот вещи мы тут
  752. 26:55прописываем далее нам нужно обрезать
  753. 26:57изображение для этого я давайте создан
  754. 26:59здесь новую переменную пускай она будет
  755. 27:01называться как роб и здесь мы
  756. 27:03прописываем следующее мы обращаемся к
  757. 27:05нашему серому изображение и здесь
  758. 27:07используем индексы из срезы
  759. 27:08то бишь здесь указывает что
  760. 27:10первоначальная . это у нас
  761. 27:12x1 далее мы все это срезаем до x2 и
  762. 27:16дальше здесь я указываю
  763. 27:17y1 и вплоть до и y2 вот такая здесь
  764. 27:20будет идти лойко ну и давайте мы это все
  765. 27:22выведем на экран посмотрим получилось ли
  766. 27:24у нас обрезать корректно изображение и
  767. 27:27соответственно запускаем программку и
  768. 27:30так видимо я где-то допустил ошибки ну
  769. 27:33давайте наверное мы сделаем так ну вот
  770. 27:34здесь повсюду добавляем вот эти вот
  771. 27:37круглые скобки я так делаю по той
  772. 27:39причине что я хочу все-таки кортеж
  773. 27:41создать да и возможно он просто жалуются
  774. 27:44на то что вот у меня нету здесь этих
  775. 27:46круглых скобок и поэтому не хочет все
  776. 27:48запускать давайте мы еще раз теперь
  777. 27:49попробуем запустить программу и ошибка у
  778. 27:52меня была в том что здесь мы не
  779. 27:53присваиваем значение а здесь мы как
  780. 27:56будто указываем проверку на то бишь мы
  781. 27:58находим только те элементы которые
  782. 28:00приближены к белому цвету вот
  783. 28:03соответственно здесь нужно прописать два
  784. 28:05знака равенства они
  785. 28:06один как это было у меня до этого ну и
  786. 28:09теперь давайте возможно еще раз мы
  787. 28:10попробуем это все запустить в таком
  788. 28:13случае все обработалось корректной и вот
  789. 28:15мы действительно нашли наш номерной знак
  790. 28:17он у нас открыт на весь экран просто
  791. 28:19замечательно теперь давайте это пожалуй
  792. 28:22вскроем и теперь нам нужно прочитать
  793. 28:24информацию с этого номерного знака для
  794. 28:26чтения информации с номерного знака мы
  795. 28:28будем использовать нашу библиотеку
  796. 28:29которая называется ezio оси она
  797. 28:32соответственно позволяет нам считывать
  798. 28:33информацию с и каких-либо изображений и
  799. 28:36чтобы нам сейчас не читать информацию мы
  800. 28:38давайте создадим некую новую переменную
  801. 28:40на свои и как текст дальше мы обращаемся
  802. 28:42к izeo.ru
  803. 28:44далее мы обращаемся к такому методу
  804. 28:46который называется как лидер и здесь мы
  805. 28:49просто должны передать с вами язык
  806. 28:51который мы отслеживаем давайте мы будем
  807. 28:53отслеживать
  808. 28:53английский язык так как он наиболее
  809. 28:56точно отслеживается там у меня все равно
  810. 28:58по сути используются латинские вот эти
  811. 29:00вот символы вот поэтому мне принципе
  812. 29:03подойдет здесь отслеживания именно
  813. 29:04английского языка но вообще можете
  814. 29:05указывать и другие языки например р.ю.
  815. 29:07это будет русский и так далее я именно
  816. 29:09пускай пока английский будет отслеживать
  817. 29:12далее мы давайте еще раз в эту же
  818. 29:14переменную будем что либо устанавливать
  819. 29:16здесь мы обращаемся с вами просто к и
  820. 29:18той же переменной да ну вот этой и здесь
  821. 29:22мы просто обращаемся к методу рид текст
  822. 29:24он позволяет нам рассчитать
  823. 29:26изображение и в качестве изображения мы
  824. 29:28сюда передаем изображение crop только
  825. 29:30давайте я один символ лишнее здесь
  826. 29:32повсюду поудаляю вот таким вот образом
  827. 29:34вот то бишь что мы говорим мы говорим то
  828. 29:37что мы будем считывать именно английские
  829. 29:39символы и будем считывать их из такого
  830. 29:41изображения которая называется у меня
  831. 29:42как краб и пересмотрите я уже запустил
  832. 29:45проект сделал я это неспроста дело в том
  833. 29:47что вот эта вот модель то есть модель
  834. 29:50распознавания английских символов она
  835. 29:52должна загрузиться это процесс не самый
  836. 29:54быстрый поэтому я запустил проект
  837. 29:56дождался пока у меня произошла загрузка
  838. 29:58но также мне это просто фото здесь
  839. 30:00отобразилось она мне на самом деле не
  840. 30:02нужно и если вдруг у вас сейчас при
  841. 30:04запуске проекта выдается ошибка
  842. 30:06особенно эта ошибка может быть если вы
  843. 30:08на компьютере mac то в таком случае вам
  844. 30:11необходимо зайти в папку программы здесь
  845. 30:13найти
  846. 30:15питон ваш установленной зайти в эту
  847. 30:17папку и здесь вам просто нужно два раза
  848. 30:19нажать на такой файл как in стол
  849. 30:21certificates . команд 2 раз нажимаете на
  850. 30:24этот файл соответственно сертификаты
  851. 30:25будут установлены и дальше у вас весь
  852. 30:27этот код будет обрабатываться корректно
  853. 30:29мы ж давайте вот здесь еще будем
  854. 30:31выводить просто полученные тексты
  855. 30:33давайте я еще раз запущу программу и
  856. 30:35посмотрим что же у нас по итогу
  857. 30:37получилось опять видите не самый быстрый
  858. 30:40процесс то есть происходит небольшое
  859. 30:42скачивание но после того как у нас
  860. 30:44произошло скачивание мы с вами можем
  861. 30:47заметить что вывелись некие результаты и
  862. 30:49один из результатов это по сути тот
  863. 30:52текст который был с читом смотрите здесь
  864. 30:54были считанные 0 258
  865. 30:57а в принципе все в работалось корректно
  866. 31:00ну понять что это ноль или это буква чко
  867. 31:02от достаточно сложно поэтому он допустим
  868. 31:05это считал именно как за 0 но это уже
  869. 31:08такая погрешность которую можно ему
  870. 31:09спокойно простить теперь мы давайте с
  871. 31:12вами сделаем вот что мы давайте будем
  872. 31:15вот этот вот полученный текст не просто
  873. 31:17отображать в консоли а будем выводить
  874. 31:19от номерным знаком на нашем основном
  875. 31:21фото чтобы такое сделать мы давайте
  876. 31:24создадим новую переменную и в нее я хочу
  877. 31:26поместить только текстовую надпись
  878. 31:28давайте вот я еще раз откроем консоль и
  879. 31:31что у нас получается вот у нас есть
  880. 31:33первый наш кортеж этот кортеж состоит из
  881. 31:36множества элементов но для начала нам
  882. 31:39нужно просто вытянуть как бы сам по себе
  883. 31:40весь этот кортеж поэтому мы открываем
  884. 31:42квадратные скобки указом что я вытягиваю
  885. 31:44ну любой элемент по индексу это будет
  886. 31:46наш вот этот кортеж далее мне необходимо
  887. 31:49вытащить и вот этот вот текст и чтобы
  888. 31:52его вытащить мне нужно просто обратиться
  889. 31:53к как бы предпоследнему элементу для
  890. 31:56этого я могу использовать отрицательные
  891. 31:58индексы например -2 таким образом вот
  892. 32:00этот элемент будет пропущен а именно
  893. 32:02этот
  894. 32:02он будет вытянут это нужно для меня
  895. 32:05текст
  896. 32:05именно этот текст я пик помещу в
  897. 32:07отдельную перемены далее мы давайте с
  898. 32:10вами создадим некую подпись ну нику
  899. 32:13вернее перемену который будет называться
  900. 32:14как подпись и это перемены она будет
  901. 32:17содержать такой метод как путь текст
  902. 32:19здесь мы указываем с вами во первых
  903. 32:22изображений на котором будем все
  904. 32:23рисовать в качестве изображения я
  905. 32:25использую наше основное первое
  906. 32:27изображение
  907. 32:28что еще было в самом начале далее сюда
  908. 32:31же мне необходимо передать текстовую
  909. 32:32надпись моем случае это раз вот это вот
  910. 32:35текстовая надпись далее нам необходимо
  911. 32:37указать координаты и в качестве
  912. 32:40координат я бы хотел указать
  913. 32:42левый нижний угол номерного знака и
  914. 32:44чтобы мне такой указать и указу здесь x1
  915. 32:47y2 x 1 это верхняя наша левая .
  916. 32:51а y2 это просто нижняя точка самого
  917. 32:55номерного знака но и по факту если их
  918. 32:57объединить ну если указать икс один и
  919. 32:59игрек 2 то соответственно это будет
  920. 33:01левая нижняя .
  921. 33:03а также я бы хотел чтобы надпись она
  922. 33:05была чуть ниже нежели номер поэтому
  923. 33:07давайте мы еще к y2 добавим ну допустим
  924. 33:1060 пикселей если что потом это поменяй а
  925. 33:12далее нам необходимо здесь указать шрифт
  926. 33:15в качестве шрифтом и давайте с вами
  927. 33:17будем использовать
  928. 33:18ну какой то обычный plain текст ну то
  929. 33:21есть это самый стандартный такой текст
  930. 33:22будет
  931. 33:23или глаз давайте мы его пожалуй и
  932. 33:26оставим также дополнительно здесь я бы
  933. 33:29хотел указать цвет в качестве ну вернее
  934. 33:32не цвет здесь нужно фон скилл указать
  935. 33:34вернее фон скиллами указом 1 то есть и
  936. 33:37никаких дополнительных увеличение мы не
  937. 33:38делаем дальше нам нужно указать цвет
  938. 33:40давайте у нас текст текст он будет
  939. 33:43выделяться например красным цветом
  940. 33:45поэтому здесь мы укажем 255 как третье
  941. 33:47значение здесь же еще стоит указать
  942. 33:50жирность мы укажем как один например
  943. 33:53если что это мы потом отправили ну пока
  944. 33:55дополнительные не буду дописывать также
  945. 33:57мы давайте с вами наверное сделаем вот
  946. 34:01что давайте я вообще вот это вот перемен
  947. 34:04на переменную как файл и матч допустим и
  948. 34:06так оно будет у меня называется
  949. 34:07и в ту же переменную вернее на и то же
  950. 34:10изображение я допишу еще и
  951. 34:12нарисую еще на этом всем еще квадратик
  952. 34:14здесь мы указом что мы обращаемся опять
  953. 34:17же к нашему основному
  954. 34:18изображению тут нам нужно обрисовать
  955. 34:21весь этот квадратик он рисуется
  956. 34:23во-первых первыми координатами 1 наши
  957. 34:25координаты это икс один и игрек 2 а
  958. 34:28также вторые координаты это x2 y2 дома
  959. 34:32задевать все координаты мы здесь их
  960. 34:35прорисовывая следующее что нам нужно
  961. 34:38было бы здесь сделать так это установить
  962. 34:40еще а цвет цвет мы наверное давайте
  963. 34:42узнаем уже как зеленый и плюс еще
  964. 34:45жирность обводки установим здесь как
  965. 34:47один вот в общем то и все теперь нам
  966. 34:51остается лишь вывести это все на экран
  967. 34:54выводим мы именно наше изображение файл
  968. 34:57и матч ну и наконец давайте мы запустим
  969. 34:59это все и посмотрим что же у нас по
  970. 35:02итогу получилось и получилась у нас не
  971. 35:06совсем то что нам нужно было видимо я
  972. 35:08что-то тут неправильно напутал
  973. 35:10относительно координат но зато мы видим
  974. 35:13что хотя бы текст правильно здесь
  975. 35:14водится также вот эта вот штучка
  976. 35:16выводится корректно давайте мы наверное
  977. 35:18кое-какие теперь моменты поменяем
  978. 35:20во-первых размер текста я бы увеличил
  979. 35:23как минимум в три раза да потому что уж
  980. 35:25слишком маленький и его не видно так
  981. 35:27жирность ему тоже бы добавил жирности
  982. 35:29для обводки тоже я пожалуй укажу чуть
  983. 35:32побольше далее я здесь что-то
  984. 35:35неправильно пан описывал и давайте мы
  985. 35:38возможно а до я неправильно пан описывал
  986. 35:41по причине того что здесь нужно x1 x2
  987. 35:43а здесь y1 и y2 давайте вот мы такое
  988. 35:47попробуем с вами еще раз запустить
  989. 35:48посмотрим что в этот раз у нас
  990. 35:50получилось
  991. 35:51дождемся момента запуска и да в таком
  992. 35:53случае видите у нас примерно все
  993. 35:55корректно обработалось вы видите просто
  994. 35:57номер он здесь не идеально как бы ровно
  995. 35:59по стандал немного с таким вращением
  996. 36:02поэтому обводка не супер идеально
  997. 36:04получилось но то же время в целом
  998. 36:06выглядит все это очень даже неплохо в
  999. 36:08общем не еще немного пришлось поиграться
  1000. 36:10с вот этими вот настройками ну я в общем
  1001. 36:12указал что от x1 я отнимаю 200 ну а от
  1002. 36:16y2 я к нему добавляющего 160 таком
  1003. 36:19случае текст отображается вполне себе
  1004. 36:21неплохо мы все это выглядит достаточно
  1005. 36:23здорово опять же данная программа она не
  1006. 36:26является идеальной потому что здесь мы
  1007. 36:29не создали какую-либо нейронную сеть
  1008. 36:31которая именно обучается самостоятельно
  1009. 36:34также мы не использовали уже готовую
  1010. 36:36обученную нейронную сеть
  1011. 36:37здесь мы лишь используем как бы activate
  1012. 36:40приблизительные
  1013. 36:41данные и стараемся найти верные номерные
  1014. 36:44знаки например для этого для этого фото
  1015. 36:46нам это удалось сделать ну что ж надеюсь
  1016. 36:49урок вам понравился если так то не
  1017. 36:52забывайте подписываться на канал и
  1018. 36:54вступать в наши соцсети на этом же у
  1019. 36:56меня все до скорых встреч пока

About this transcript

This page contains the full transcript of Изучение Python OpenCV / Урок #8 – Распознавание номерных знаков и чтение их by Гоша Дударь, generated from the public captions YouTube serves with the video. The transcript has 6,132 words across 1,019 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.