“ComputerVision(Ruby && OpenCV)”, Людмила Дежкина ( Senior Ruby, DataArt)

Preview:

Citation preview

Ruby && OpenCV

Computer Vision Intro(интерпретация изображений, калибровка камеры по эталону, устранение оптических искажений, определение

сходства, анализ перемещения объекта, определение формы объекта и слежение за объектом, 3D-реконструкция,

сегментация объекта, распознавание жестов )

Лена Седерберг 1972

Использование1. Google

Google Glass

Google Mobile

2. Робототехника и Arduino

3. Промышленное производство

Сложно или интересно?

1) Big Data? (Google Car 1 Гб/с , человеческий мозг ~ 45 Мб - 3Гб)

2) Алгоритмы? (тензоры, фильтрация)3) DeepLearning , MachineLearning

Из чего состоит ядро?

CXCORE

* содержит базовые структуры данных и алгоритмы:

— базовые операции над многомерными числовыми массивами

— матричная алгебра, математические ф-ции, генераторы случайных чисел

— Запись/восстановление структур данных в/из XML

— базовые функции 2D графики

CVмодуль обработки изображений и компьютерного зрения

— базовые операции над изображениями (фильтрация, геометрические преобразования, преобразование цветовых пространств и т. д.)

— анализ изображений (выбор отличительных признаков, морфология, поиск контуров, гистограммы)

— анализ движения, слежение за объектами

— обнаружение объектов, в частности лиц

— калибровка камер, элементы восстановления пространственной структуры

CVCAM CVAUX HIGHGUIHighgui — модуль для ввода/вывода изображений и видео, создания пользовательского интерфейса

— захват видео с камер и из видео файлов, чтение/запись статических изображений.

— функции для организации простого UI (все демо приложения используют HighGUI)

Cvaux — экспериментальные и устаревшие функции

— пространств. зрение: стерео калибрация, само калибрация

— поиск стерео-соответствия, клики в графах

— нахождение и описание черт лица

Примеры патентов или стартапов?1) Виртуальная примерочная(17%

продаж за 2015 г)

http://zugara.com/virtual-dressing-room-technology

2) Распознавание автомобильных номеров (алгоритмы или нейронная сеть?)

Нейронные сети (механизмы обучения)

1) TensorFlow (Google)2) Theano, PyLearn2 && EcoSystem3) Torch4) Caffehttp://deeplearning4j.org/compare-dl4j-torch7-pylearn.html

Трудности построения системы1) Soft vs Железо2) Алгоритм vs Нейронная Сеть Tesseract OCR

Это открытое программное обеспечение, выполняющее автоматическое распознавание как единичной буквы, так и сразу текста. Tesseract удобен тем, что есть для любых ОС, стабильно работает и легко обучаем. Но он очень плохо работает с замыленным, битым, грязным и деформированным текстом.

K-nearest

Очень простой для понимания метод распознавания символов, который, несмотря на свою примитивность, часто может побеждать не самые удачные реализации SVM или нейросетевых методов.

Работает он следующим образом:

1) предварительно записываем приличное количество изображений реальных символов уже корректно разбитые на классы своими глазами и руками

2) вводим меру расстояния между символами (если изображение бинаризованно, то операция XOR будет оптимальна)

3) затем, когда мы пытаемся распознать символ, поочередно рассчитываем дистанцию между ним и всеми символами в базе. Среди k ближайших соседей, возможно, будут представители различных классов. Естественно, представителей какого класса больше среди соседей, к тому классу стоит отнести распознаваемый символ.

Типы данныхCvPoint — точка — (структура из двух переменных (x,y))

CvSize — размер — (структура из двух переменных (width,height))

CvRect — прямоугольник — (структура из 4 переменных (x,y,width,height))

CvScalar — скаляр — (4 числа типа double)

CvArr — массив — его можно считать «абстрактным базовым классом» для CvMat и далее IplImage (CvArr->CvMat->IplImage)

CvMat — матрица

IplImage — изображение

Загрузка картинки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);

Информация, доступная после загрузкиimage->nChannels // число каналов картинки (RGB, хотя в OpenCV - BGR ) (1-4)image->depth // глубина в битахimage->width // ширина картинки в пикселяхimage->height // высота картинки в пикселяхimage->imageSize // память занимаемая картинкой (==image->height*image->widthStep)image->widthStep // расстояние между соседними по вертикали точками изображения (число байт в одной строчке картинки)- может потребоваться для самостоятельного обхода всех пикселей изображения)

Метод Виолы Джонса

Величина каждого признака вычисляется как сумма пикселей в белых прямоугольниках, из которой вычитается сумма пикселей в черных областях. Прямоугольные признаки более примитивны чем steerable filter, и, несмотря на то, что они чувствительны к вертикальным и горизонтальным особенностям изображений, результат их поиска более груб.

Свертка— это операция, показывающая «схожесть» одной функции с отражённой и сдвинутой копией другой.

cvFilter2D( src, dst, kernel, CvPoint anchor CV_DEFAULT(cvPoint(-1,-1)))

Нейронные сети— классические 2-3х-слойные нейросети, обучающиеся градиентными методами с обратным распространением ошибок (3х-слойная нейросеть изображена на рисунке);

— так называемые deep-learning нейросети и сверточные сети.

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

Проще говоря, край — это резкий переход/изменение яркости.

Причины возникновения краёв:

* изменение освещенности

* изменение цвета

* изменение глубины сцены (ориентации поверхности)

Реализация ))) cvCanny( image, edges, threshold1, threshold2, CV_DEFAULT(3) );

image — одноканальное изображение для обработки (градации серого)edges — одноканальное изображение для хранения границ, найденных функциейthreshold1 — порог минимумаthreshold2 — порог максимумаaperture_size — размер для оператора Собеля

Шаги детектора

— Убрать шум и лишние детали из изображения

— Рассчитать градиент изображения

— Сделать края тонкими (edge thinning)

— Связать края в контура (edge linking)

Recommended