20 лет назад, в 1999 году, компания Kyocera выпустила первый мобильный телефон с цифровой камерой – Visual Phone VP-210. С тех пор, благодаря невероятно большому и растущему рынку мобильных устройств связи, ПЗС-матрицы цифровых камер совершили невероятный скачок по всем параметрам. Чувствительность, диапазон, размер, энергопотребление, но что ещё важнее – цена.

В наших реалиях модуль камеры, вообще-то весьма технологически сложное устройство, может стоить всего несколько долларов. Это кардинально меняет взгляд на многие процессы и задачи. Ранее сложной задачей было заполучить камеру, технически удовлетворяющую минимальным требованиям. Пройдя такое испытание, решение вопросов обработки изображений казалось лишь приятными хлопотами. Теперь же вопрос софта, который будет обрабатывать информацию с камеры, стоит более остро. Планка физического и экономического доступа к технологии упала так низко, что коснулась границы компетентности пользователя.

Давайте на реальных примерах рассмотрим, насколько сложно (или просто) сейчас работать с изображениями и какие задачи под силу айтишнику иной специализации.

Безусловно, главным инструментом для работы с изображениями является Open Source библиотека OpenCV. Написанная на C++ – также имеет интерфейсы для работы с Python, Java, PHP, JavaScript и другими, менее популярными языками. На примере нескольких проектов с использованием OpenCV, опубликованных на хабре в 2018-2019, рассмотрим, какие задачи решались и какие технологии использовались.

1) Умная кормушка: Machine Learning, Raspberry Pi, Telegram, немножко магии обучения + инструкция по сборке
Пост о хоббийном проекте ZlodeiBaal: 27.6k просмотров, 289 закладок. Raspberry Pi B+, камера, OpenCV, Caffe, Python.

2) DIY тепловизор на Raspberry PI или «Кажется теперь я знаю, чем займусь этим летом»
Пост о хоббийном проекте Walker2000: 73.8k просмотров, 425 закладок. Raspberry Pi B+/Raspberry Pi Zero W, тепловизионная матрица, OpenCV, Python.

3) Печать гобелена «Игры престолов» на фискальном принтере с использованием Python
Пост о хоббийном проекте viking_unet: 7,9k просмотров, 50 закладок. Фискальный принтер, OpenCV, Python.

4) StereoPi — наша железка для изучения компьютерного зрения, дронов и роботов
Пост об отечественном железячном проекте Realizator: 14,1k просмотров, 117 закладок. Raspberry Pi, OpenCV.

5) Восстановление смазанных и расфокусированных изображений с помощью фильтра Винера. Реализация на C++ OpenCV
Пост об опыте VladislavBK: 16,7k просмотров, 154 закладки. Nikon, OpenCV, C++.

6) OpenCV на STM32F7-Discovery
Пост о хоббийном проекте 0xdde: 6,4k просмотров, 71 закладка. STM32, OpenCV, Qt, C++.

7) Запускаем свой нейросетевой детектор на Raspberry Pi с помощью Neural Compute Stick и OpenVINO
Пост о хоббийном проекте BeloborodovDS: 14.7k просмотров, 126 закладок. Raspberry Pi. Neural Compute Stick, OpenCV, OpenVINO, C++.

8) Компьютерное зрение и машинное обучение в PHP используя библиотеку opencv
Пост о хоббийном проекте morozovsk: 21.6 тыс просмотров, 236 закладок. OpenCV, PHP, php-opencv.

9) opencv4arts: Нарисуй мой город, Винсент
Пост о компьютерном зрении и нейросетях в браузере dkurt: 5.4k просмотров, 63 закладки. OpenCV, JavaScript, OpenCV.js

10) *Место вакантно*
Последний пункт предназначался для проекта на Java, так как этот язык вполне официально поддерживается OpenCV, однако мне не удалось найти на Хабре подходящий пост. Пишите свои предположения, почему? А ещё лучше пишите пост по теме. Java весьма распространённый язык, и я крайне удивлён столь скудному представлению на хоббийном ландшафте айтишников.

Не трудно подметить – в большинстве случаев авторы впервые работали с OpenCV и компьютерным зрением в частности. Это не помешало им сравнительно небольшими усилиями создать функционирующий проект и даже решать реальные задачи удобным способом.

Комментарии (6)


  1. Realizator
    18.11.2019 16:53
    +1

    Пункт 4, «Пост об отечественном(?) железячном проекте»
    А почему вопросик? Да, проект отечественный, это мы с Gol и еще парой человек сделали…


    1. IMnEpaTOP Автор
      18.11.2019 16:56
      +1

      Не был уверен относительно остальных участников команды и самоидентификации. Вопросик снимается.


      1. Realizator
        18.11.2019 17:05

        Оки! Вопросов больше не имею!
        Про второй опросник — прототипировать проще на Python, а для скорости уже сишечка на втором этапе.


  1. viking_unet
    18.11.2019 23:44

    То странное чувство, когда твою статью упоминают в другой статье на Хабре) Вообще не очень понятно что хотел сказать автор. Немножко похоже на пост для привлечения внимания. Уверен, что на хабре есть масса достойных статей на тему компьютерного зрения. OpenCV используется для безумного числа полезных и не очень вещей. От автоматизации рыбалки в WOW до зомби шутера в дополненной реальности. Про Java вопрос странный — у каждого языка свои области применения, а также своя секта адептов, решающих все задачи только на этом языке, не знаю в каком соотношении находятся эти группы людей. Дабы не разводить holy war скажу, что ещё многое зависит от библиотек вокруг языка. Вот кстати о Java — сейчас мне пришлось писать мобильное приложение под android для оценки качества сотовой связи. Начал я в android studio на Java, а закончил бульдозером и киви на python: ничего не имею против Java, но я просто не нашёл библиотек, которые могут выполнять sppedtest, работать с youtube и instagram — запросы в гугле не дали результата. А вот на python я нашёл все три либы за минуту. А возможно, я просто адепт секты python и нормальный джавист бы нашёл нужные либы за пол минуты. ИМХО нужно быть гибким и не зацикливаться на одном языке (я всё же написал часть программы на java, но стал переписывать на python в силу недостатка времени, но чёрт возьми, через три дня знакомства с java я стал немного понимать этот мир).


    1. IMnEpaTOP Автор
      19.11.2019 07:42

      В первую очередь я хотел напомнить — технический прогресс за последние 20 лет для очень широкого круга задач буквально обнулил порог «железного» входа. Теперь для многих единственное препятствие — необходимость изучать библиотеки (даже не даташиты и ассамблер).
      А ещё это удобная подборка свежих проектов. Вместо десятка отдельных закладок хватит одной, что бы к ним вернуться по необходимости.


      1. viking_unet
        19.11.2019 11:54

        Ещё добавлю, что стало гораздо проще искать информацию — теперь проще и быстрее нагуглить проблему, чем открыть книжку или найти раздел в мануале/документации, даже если точно помнишь где искать :) Всё это безумно ускоряет разработку. Если конечно вы не сидите в строгой организации без доступа к интернету, от этого кстати очень страдает наша оборонка =((