З чого початививчення комп’ютерного зору
Доброго часу доби)
Спробувавши себе у популярних галузях програмування та розробки, я зрозумів, що мені це все не подобається. Загалом немає бажання навіть зв'язуватися із цим усім. Пробував я на дуже примітивному рівні, бо тільки-но закінчив 11 клас і знання мої бажають кращого. Але й малого дотику мені вистачило, щоби зрозуміти: це не моє.
Ацікаво меніось що:
0. Data mining 1. Комп'ютерний зір 2. Нейросети та системи прийняття рішень 4. Системи аналізу ймовірностей та передбачення процесів.
Список я безсовісно скомуніздил запозичив у нашого улюбленого тостера, попередньо погуглив, що представляє кожен напрям і "викресливши" не цікаві)
До речі вступив я на математичний напрямок і програмування буде дуже мало.
Як вибрати щось одне, коли все цікаво? Але це досить риторичне питання, яке залежить від особистих переваг, і я це розумію. Тому мені хотілося б розпочати з комп'ютерного зору. Серед умінь у вакансіях постійно зустрічається приблизно такий список:
Математична підготовка: основи лінійної алгебри аналітичної геометрії теорія ймовірностей Алгоритмічна підготовка: знання базових алгоритмів (сортування, пошук.) та алгоритмів 3D графіки та комп'ютерного зору аналіз ефективності алгоритмів знання Python і C++ технічна англійська
У цьому списку мені зрозуміло все. крім
- знання базових алгоритмів (сортування, пошук.) та алгоритмів 3D графіки та комп'ютерного
- аналіз ефективності алгоритмів
І ось нарештісаме питання.
З чого розпочати, чим продовжити? До речі по С++ займаюся за книгою Прата, Python осягатиму буду з Лутцем.
Ну й насамкінець:буде актуальним цей напрямокнайближчі роки до кінця відкладених мені днів або всі мої бажання даремно?
Дякую, якщо прочитали цю довгу і нудну розповідь)
Приділяйте багато часу математиці, навіть якщо вона вам в житті не знадобиться - це здорово розвиває мізки (якщо це вам потрібно, звичайно:). Причому, коли проходитиме у вузі, наприклад матриці чи системи лінійних рівнянь - відразу практикуйте їх у C++/Python (спочатку буде і базових знань). Ну і налягайте на англійську.
З серйозним комп'ютерним зором наскоком познайомитися непросто. Коли у вас буде необхідна математична база та більш-менш впевнене володіння ЯП, тоді зможете заглибитись. Наприклад, є чудовий стенфордський курс з комп'ютерного зору.
з.и. Щодо бази для алгоритмів і т.п. погуглить SICP - тепер цей курс на Python.
По-перше, комп'ютерний зір - це дуже проста математика, але все-таки математика. Для того, щоб розуміти, що відбувається, треба розбиратися в дискретній та диференціальній математиках, знати про способи переходу від однієї до іншої, мати уявлення про такі речі, як теорема Котельникова (хоча, це вже до кібернетики ближче), не кажучи вже про банальні способи подання сигналу. Щоб у всьому цьому розібратися, знадобиться не один рік навчання. Просто попереджаю, однією книжечкою тут не обійдешся.
По-друге, вся складність у розумінні, що обробка сигналів на папері – це купа триповерхових рівнянь та нерівностей, а вона ж у комп'ютері – кількавкладених циклів із парою інкрементів. Тоді як багато речей у книгах опускаються сподіваючись на деяку як математичну підкованість читача, так і суто практичну вміння закодувати обчислення інтеграла. Причому без розкладів у тейлорі, а банальним наближеним обчисленням площі.
Зрештою, рекомендую піти іншим шляхом. Без ґрунтовних розглядів як це працює. Берете OpenCV і читаєте посібники. Єдине, що потрібно засвоїти, це пара структур та уявлення зображень.
Єдине, що слід помітити, так це те, що OpenCV все-таки шлак. Тобто він дуже непоганий для навчання, але являє собою різношерстний смітник часом коду, що ледве працює. Цьому є логічне пояснення - її роблять не професійні програмісти, які зачитуються МакКоннеллом, а якісь там професори та аспіранти, які захоплюються плюсами та пайтонами. Отже, не варто брати приклад із того коду, а продакшн у жодному разі не повинен містити ні грама цієї бібліотеки. Але це так, лірико.
Знання алгоритмів потрібне лише для вирішення завдань, які вже були вирішені раніше. Наприклад, для того ж сортування є безліч алгоритмів, і серед них немає універсального, який найшвидше працював би у всіх випадках (зазвичай це залежить від обсягу та змішаності даних). Звичайно, можна поверхово ознайомитися з алгоритмами, але на практиці варто використовувати готові рішення, якщо немає особливих вимог.
З алгоритмами в 3D графіці можна ознайомитися як у теорії, так і з OpenGL/Direct3D погратися (а щоб не ходити можна WebGL).
За комп. зору, імхо, краще просто почати з лекцій
За іншими напрямками особливо нема чого додати: з математики взагалі книги початку 2000-х цілком актуальні)))