“computervision(ruby && opencv)”, Людмила Дежкина ( senior ruby, dataart)
TRANSCRIPT
![Page 1: “ComputerVision(Ruby && OpenCV)”, Людмила Дежкина ( Senior Ruby, DataArt)](https://reader033.vdocuments.mx/reader033/viewer/2022042611/588778ad1a28ab63208b466d/html5/thumbnails/1.jpg)
Ruby && OpenCV
Computer Vision Intro(интерпретация изображений, калибровка камеры по эталону, устранение оптических искажений, определение
сходства, анализ перемещения объекта, определение формы объекта и слежение за объектом, 3D-реконструкция,
сегментация объекта, распознавание жестов )
![Page 2: “ComputerVision(Ruby && OpenCV)”, Людмила Дежкина ( Senior Ruby, DataArt)](https://reader033.vdocuments.mx/reader033/viewer/2022042611/588778ad1a28ab63208b466d/html5/thumbnails/2.jpg)
Лена Седерберг 1972
![Page 3: “ComputerVision(Ruby && OpenCV)”, Людмила Дежкина ( Senior Ruby, DataArt)](https://reader033.vdocuments.mx/reader033/viewer/2022042611/588778ad1a28ab63208b466d/html5/thumbnails/3.jpg)
Использование1. Google
Google Glass
Google Mobile
2. Робототехника и Arduino
3. Промышленное производство
![Page 4: “ComputerVision(Ruby && OpenCV)”, Людмила Дежкина ( Senior Ruby, DataArt)](https://reader033.vdocuments.mx/reader033/viewer/2022042611/588778ad1a28ab63208b466d/html5/thumbnails/4.jpg)
Сложно или интересно?
1) Big Data? (Google Car 1 Гб/с , человеческий мозг ~ 45 Мб - 3Гб)
2) Алгоритмы? (тензоры, фильтрация)3) DeepLearning , MachineLearning
![Page 5: “ComputerVision(Ruby && OpenCV)”, Людмила Дежкина ( Senior Ruby, DataArt)](https://reader033.vdocuments.mx/reader033/viewer/2022042611/588778ad1a28ab63208b466d/html5/thumbnails/5.jpg)
Из чего состоит ядро?
![Page 6: “ComputerVision(Ruby && OpenCV)”, Людмила Дежкина ( Senior Ruby, DataArt)](https://reader033.vdocuments.mx/reader033/viewer/2022042611/588778ad1a28ab63208b466d/html5/thumbnails/6.jpg)
CXCORE
* содержит базовые структуры данных и алгоритмы:
— базовые операции над многомерными числовыми массивами
— матричная алгебра, математические ф-ции, генераторы случайных чисел
— Запись/восстановление структур данных в/из XML
— базовые функции 2D графики
![Page 7: “ComputerVision(Ruby && OpenCV)”, Людмила Дежкина ( Senior Ruby, DataArt)](https://reader033.vdocuments.mx/reader033/viewer/2022042611/588778ad1a28ab63208b466d/html5/thumbnails/7.jpg)
CVмодуль обработки изображений и компьютерного зрения
— базовые операции над изображениями (фильтрация, геометрические преобразования, преобразование цветовых пространств и т. д.)
— анализ изображений (выбор отличительных признаков, морфология, поиск контуров, гистограммы)
— анализ движения, слежение за объектами
— обнаружение объектов, в частности лиц
— калибровка камер, элементы восстановления пространственной структуры
![Page 8: “ComputerVision(Ruby && OpenCV)”, Людмила Дежкина ( Senior Ruby, DataArt)](https://reader033.vdocuments.mx/reader033/viewer/2022042611/588778ad1a28ab63208b466d/html5/thumbnails/8.jpg)
CVCAM CVAUX HIGHGUIHighgui — модуль для ввода/вывода изображений и видео, создания пользовательского интерфейса
— захват видео с камер и из видео файлов, чтение/запись статических изображений.
— функции для организации простого UI (все демо приложения используют HighGUI)
Cvaux — экспериментальные и устаревшие функции
— пространств. зрение: стерео калибрация, само калибрация
— поиск стерео-соответствия, клики в графах
— нахождение и описание черт лица
![Page 9: “ComputerVision(Ruby && OpenCV)”, Людмила Дежкина ( Senior Ruby, DataArt)](https://reader033.vdocuments.mx/reader033/viewer/2022042611/588778ad1a28ab63208b466d/html5/thumbnails/9.jpg)
Примеры патентов или стартапов?1) Виртуальная примерочная(17%
продаж за 2015 г)
http://zugara.com/virtual-dressing-room-technology
2) Распознавание автомобильных номеров (алгоритмы или нейронная сеть?)
![Page 10: “ComputerVision(Ruby && OpenCV)”, Людмила Дежкина ( Senior Ruby, DataArt)](https://reader033.vdocuments.mx/reader033/viewer/2022042611/588778ad1a28ab63208b466d/html5/thumbnails/10.jpg)
Нейронные сети (механизмы обучения)
1) TensorFlow (Google)2) Theano, PyLearn2 && EcoSystem3) Torch4) Caffehttp://deeplearning4j.org/compare-dl4j-torch7-pylearn.html
![Page 11: “ComputerVision(Ruby && OpenCV)”, Людмила Дежкина ( Senior Ruby, DataArt)](https://reader033.vdocuments.mx/reader033/viewer/2022042611/588778ad1a28ab63208b466d/html5/thumbnails/11.jpg)
Трудности построения системы1) Soft vs Железо2) Алгоритм vs Нейронная Сеть Tesseract OCR
Это открытое программное обеспечение, выполняющее автоматическое распознавание как единичной буквы, так и сразу текста. Tesseract удобен тем, что есть для любых ОС, стабильно работает и легко обучаем. Но он очень плохо работает с замыленным, битым, грязным и деформированным текстом.
K-nearest
Очень простой для понимания метод распознавания символов, который, несмотря на свою примитивность, часто может побеждать не самые удачные реализации SVM или нейросетевых методов.
Работает он следующим образом:
1) предварительно записываем приличное количество изображений реальных символов уже корректно разбитые на классы своими глазами и руками
2) вводим меру расстояния между символами (если изображение бинаризованно, то операция XOR будет оптимальна)
3) затем, когда мы пытаемся распознать символ, поочередно рассчитываем дистанцию между ним и всеми символами в базе. Среди k ближайших соседей, возможно, будут представители различных классов. Естественно, представителей какого класса больше среди соседей, к тому классу стоит отнести распознаваемый символ.
![Page 12: “ComputerVision(Ruby && OpenCV)”, Людмила Дежкина ( Senior Ruby, DataArt)](https://reader033.vdocuments.mx/reader033/viewer/2022042611/588778ad1a28ab63208b466d/html5/thumbnails/12.jpg)
Типы данныхCvPoint — точка — (структура из двух переменных (x,y))
CvSize — размер — (структура из двух переменных (width,height))
CvRect — прямоугольник — (структура из 4 переменных (x,y,width,height))
CvScalar — скаляр — (4 числа типа double)
CvArr — массив — его можно считать «абстрактным базовым классом» для CvMat и далее IplImage (CvArr->CvMat->IplImage)
CvMat — матрица
IplImage — изображение
![Page 13: “ComputerVision(Ruby && OpenCV)”, Людмила Дежкина ( Senior Ruby, DataArt)](https://reader033.vdocuments.mx/reader033/viewer/2022042611/588778ad1a28ab63208b466d/html5/thumbnails/13.jpg)
Загрузка картинкиcvLoadImage( filename, int iscolor=CV_LOAD_IMAGE_COLOR )// окно для отображения картинки
filename — имя файлаiscolor — определяет как представить картинкуiscolor > 0 — цветная картинка с 3-мя каналамиiscolor == 0 — картинка будет загружена в формате GRAYSCALE (градации серого)iscolor < 0 — картинка будет загружена как есть
cvNamedWindow("original",CV_WINDOW_AUTOSIZE); // показываем картинкуcvShowImage("original",image);
![Page 14: “ComputerVision(Ruby && OpenCV)”, Людмила Дежкина ( Senior Ruby, DataArt)](https://reader033.vdocuments.mx/reader033/viewer/2022042611/588778ad1a28ab63208b466d/html5/thumbnails/14.jpg)
Информация, доступная после загрузкиimage->nChannels // число каналов картинки (RGB, хотя в OpenCV - BGR ) (1-4)image->depth // глубина в битахimage->width // ширина картинки в пикселяхimage->height // высота картинки в пикселяхimage->imageSize // память занимаемая картинкой (==image->height*image->widthStep)image->widthStep // расстояние между соседними по вертикали точками изображения (число байт в одной строчке картинки)- может потребоваться для самостоятельного обхода всех пикселей изображения)
![Page 15: “ComputerVision(Ruby && OpenCV)”, Людмила Дежкина ( Senior Ruby, DataArt)](https://reader033.vdocuments.mx/reader033/viewer/2022042611/588778ad1a28ab63208b466d/html5/thumbnails/15.jpg)
Метод Виолы Джонса
Величина каждого признака вычисляется как сумма пикселей в белых прямоугольниках, из которой вычитается сумма пикселей в черных областях. Прямоугольные признаки более примитивны чем steerable filter, и, несмотря на то, что они чувствительны к вертикальным и горизонтальным особенностям изображений, результат их поиска более груб.
![Page 16: “ComputerVision(Ruby && OpenCV)”, Людмила Дежкина ( Senior Ruby, DataArt)](https://reader033.vdocuments.mx/reader033/viewer/2022042611/588778ad1a28ab63208b466d/html5/thumbnails/16.jpg)
Свертка— это операция, показывающая «схожесть» одной функции с отражённой и сдвинутой копией другой.
cvFilter2D( src, dst, kernel, CvPoint anchor CV_DEFAULT(cvPoint(-1,-1)))
![Page 17: “ComputerVision(Ruby && OpenCV)”, Людмила Дежкина ( Senior Ruby, DataArt)](https://reader033.vdocuments.mx/reader033/viewer/2022042611/588778ad1a28ab63208b466d/html5/thumbnails/17.jpg)
Нейронные сети— классические 2-3х-слойные нейросети, обучающиеся градиентными методами с обратным распространением ошибок (3х-слойная нейросеть изображена на рисунке);
— так называемые deep-learning нейросети и сверточные сети.
![Page 18: “ComputerVision(Ruby && OpenCV)”, Людмила Дежкина ( Senior Ruby, DataArt)](https://reader033.vdocuments.mx/reader033/viewer/2022042611/588778ad1a28ab63208b466d/html5/thumbnails/18.jpg)
Детектор границ CannyКрая(границы) — это такие кривые на изображении, вдоль которых происходит резкое изменение яркости или других видов неоднородностей.
Проще говоря, край — это резкий переход/изменение яркости.
Причины возникновения краёв:
* изменение освещенности
* изменение цвета
* изменение глубины сцены (ориентации поверхности)
![Page 19: “ComputerVision(Ruby && OpenCV)”, Людмила Дежкина ( Senior Ruby, DataArt)](https://reader033.vdocuments.mx/reader033/viewer/2022042611/588778ad1a28ab63208b466d/html5/thumbnails/19.jpg)
Реализация ))) cvCanny( image, edges, threshold1, threshold2, CV_DEFAULT(3) );
image — одноканальное изображение для обработки (градации серого)edges — одноканальное изображение для хранения границ, найденных функциейthreshold1 — порог минимумаthreshold2 — порог максимумаaperture_size — размер для оператора Собеля
![Page 20: “ComputerVision(Ruby && OpenCV)”, Людмила Дежкина ( Senior Ruby, DataArt)](https://reader033.vdocuments.mx/reader033/viewer/2022042611/588778ad1a28ab63208b466d/html5/thumbnails/20.jpg)
Шаги детектора
— Убрать шум и лишние детали из изображения
— Рассчитать градиент изображения
— Сделать края тонкими (edge thinning)
— Связать края в контура (edge linking)