Александр Мищанин,(UX/UI дизайнер, Fortifier), "О дизайн-процессе и трудностя...
“ComputerVision(Ruby && OpenCV)”, Людмила Дежкина ( Senior Ruby, DataArt)
1. Ruby && OpenCV
Computer Vision Intro
(интерпретация изображений, калибровка камеры по эталону, устранение оптических искажений, определение
сходства, анализ перемещения объекта, определение формы объекта и слежение за объектом, 3D-реконструкция,
сегментация объекта, распознавание жестов )
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) Распознавание автомобильных
номеров (алгоритмы или нейронная
сеть?)
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)