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 HIGHGUI
Highgui — модуль для ввода/вывода изображений и видео, создания пользовательского интерфейса
— захват видео с камер и из видео файлов, чтение/запись статических изображений.
— функции для организации простого UI (все демо приложения используют HighGUI)
Cvaux — экспериментальные и устаревшие функции
— пространств. зрение: стерео калибрация, само калибрация
— поиск стерео-соответствия, клики в графах
— нахождение и описание черт лица
Примеры патентов или стартапов?
1) Виртуальная примерочная(17%
продаж за 2015 г)
http://zugara.com/virtual-dressing-
room-technology
2) Распознавание автомобильных
номеров (алгоритмы или нейронная
сеть?)
Нейронные сети (механизмы обучения)
1) TensorFlow (Google)
2) Theano, PyLearn2 && EcoSystem
3) Torch
4) Caffe
http://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)

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

  • 1.
    Ruby && OpenCV ComputerVision Intro (интерпретация изображений, калибровка камеры по эталону, устранение оптических искажений, определение сходства, анализ перемещения объекта, определение формы объекта и слежение за объектом, 3D-реконструкция, сегментация объекта, распознавание жестов )
  • 2.
  • 3.
    Использование 1. Google Google Glass GoogleMobile 2. Робототехника и Arduino 3. Промышленное производство
  • 4.
    Сложно или интересно? 1)Big Data? (Google Car 1 Гб/с , человеческий мозг ~ 45 Мб - 3Гб) 2) Алгоритмы? (тензоры, фильтрация) 3) DeepLearning , MachineLearning
  • 5.
  • 6.
    CXCORE * содержит базовыеструктуры данных и алгоритмы: — базовые операции над многомерными числовыми массивами — матричная алгебра, математические ф-ции, генераторы случайных чисел — Запись/восстановление структур данных в/из XML — базовые функции 2D графики
  • 7.
    CV модуль обработки изображенийи компьютерного зрения — базовые операции над изображениями (фильтрация, геометрические преобразования, преобразование цветовых пространств и т. д.) — анализ изображений (выбор отличительных признаков, морфология, поиск контуров, гистограммы) — анализ движения, слежение за объектами — обнаружение объектов, в частности лиц — калибровка камер, элементы восстановления пространственной структуры
  • 8.
    CVCAM CVAUX HIGHGUI Highgui— модуль для ввода/вывода изображений и видео, создания пользовательского интерфейса — захват видео с камер и из видео файлов, чтение/запись статических изображений. — функции для организации простого UI (все демо приложения используют HighGUI) Cvaux — экспериментальные и устаревшие функции — пространств. зрение: стерео калибрация, само калибрация — поиск стерео-соответствия, клики в графах — нахождение и описание черт лица
  • 9.
    Примеры патентов илистартапов? 1) Виртуальная примерочная(17% продаж за 2015 г) http://zugara.com/virtual-dressing- room-technology 2) Распознавание автомобильных номеров (алгоритмы или нейронная сеть?)
  • 10.
    Нейронные сети (механизмыобучения) 1) TensorFlow (Google) 2) Theano, PyLearn2 && EcoSystem 3) Torch 4) Caffe http://deeplearning4j.org/compare-dl4j-torch7-pylearn.html
  • 11.
    Трудности построения системы 1)Soft vs Железо 2) Алгоритм vs Нейронная Сеть Tesseract OCR Это открытое программное обеспечение, выполняющее автоматическое распознавание как единичной буквы, так и сразу текста. Tesseract удобен тем, что есть для любых ОС, стабильно работает и легко обучаем. Но он очень плохо работает с замыленным, битым, грязным и деформированным текстом. K-nearest Очень простой для понимания метод распознавания символов, который, несмотря на свою примитивность, часто может побеждать не самые удачные реализации SVM или нейросетевых методов. Работает он следующим образом: 1) предварительно записываем приличное количество изображений реальных символов уже корректно разбитые на классы своими глазами и руками 2) вводим меру расстояния между символами (если изображение бинаризованно, то операция XOR будет оптимальна) 3) затем, когда мы пытаемся распознать символ, поочередно рассчитываем дистанцию между ним и всеми символами в базе. Среди k ближайших соседей, возможно, будут представители различных классов. Естественно, представителей какого класса больше среди соседей, к тому классу стоит отнести распознаваемый символ.
  • 12.
    Типы данных CvPoint —точка — (структура из двух переменных (x,y)) CvSize — размер — (структура из двух переменных (width,height)) CvRect — прямоугольник — (структура из 4 переменных (x,y,width,height)) CvScalar — скаляр — (4 числа типа double) CvArr — массив — его можно считать «абстрактным базовым классом» для CvMat и далее IplImage (CvArr->CvMat- >IplImage) CvMat — матрица IplImage — изображение
  • 13.
    Загрузка картинки 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);
  • 14.
    Информация, доступная послезагрузки image->nChannels // число каналов картинки (RGB, хотя в OpenCV - BGR ) (1-4) image->depth // глубина в битах image->width // ширина картинки в пикселях image->height // высота картинки в пикселях image->imageSize // память занимаемая картинкой (==image->height*image->widthStep) image->widthStep // расстояние между соседними по вертикали точками изображения (число байт в одной строчке картинки) - может потребоваться для самостоятельного обхода всех пикселей изображения)
  • 15.
    Метод Виолы Джонса Величинакаждого признака вычисляется как сумма пикселей в белых прямоугольниках, из которой вычитается сумма пикселей в черных областях. Прямоугольные признаки более примитивны чем steerable filter, и, несмотря на то, что они чувствительны к вертикальным и горизонтальным особенностям изображений, результат их поиска более груб.
  • 16.
    Свертка — это операция,показывающая «схожесть» одной функции с отражённой и сдвинутой копией другой. cvFilter2D( src, dst, kernel, CvPoint anchor CV_DEFAULT(cvPoint(-1,-1)))
  • 17.
    Нейронные сети — классические2-3х-слойные нейросети, обучающиеся градиентными методами с обратным распространением ошибок (3х-слойная нейросеть изображена на рисунке); — так называемые deep-learning нейросети и сверточные сети.
  • 18.
    Детектор границ Canny Края(границы)— это такие кривые на изображении, вдоль которых происходит резкое изменение яркости или других видов неоднородностей. Проще говоря, край — это резкий переход/изменение яркости. Причины возникновения краёв: * изменение освещенности * изменение цвета * изменение глубины сцены (ориентации поверхности)
  • 19.
    Реализация ))) cvCanny( image,edges, threshold1, threshold2, CV_DEFAULT(3) ); image — одноканальное изображение для обработки (градации серого) edges — одноканальное изображение для хранения границ, найденных функцией threshold1 — порог минимума threshold2 — порог максимума aperture_size — размер для оператора Собеля
  • 20.
    Шаги детектора — Убратьшум и лишние детали из изображения — Рассчитать градиент изображения — Сделать края тонкими (edge thinning) — Связать края в контура (edge linking)