OpenCV производительность: C++ vs EMGU vs JavaCV

Тест производительности OpenCV. Среди испытуемых:

1. Нативная opencv 2.4.8 из «коробки» без перекомпиляции библиотек. С++ (visual studio 2013)

2. Emgu CV 2.9 (2.4.9). С# (visual studio 2013)

3. javaCV 2.4.8. java (eclips)

Тестовые предельные простые: 1000 проходов canny по lena, время замеряется без учета загрузки фотографии. Код почти идентичный, каждая версия запускалось 6 раз на одной и той же системе (Intel(R) Core(TM) i5-3210M CPU @ 2.50GHz, nvidia 635m, win 8)

clip_image002

clip_image004

Как видно разницы между C++, C# и Java все же есть и предсказуемо C++ быстрее, но разница ничтожна, правда java все же чуть медленнее конкурентов. Кроме того, и в среднеквадратичном отклонении нет какого-то сильно преимущества C++. А вот разница между x86 и x64 заметная, хотя удивительно, но в Cuda реализации x64 наоборот медленнее. Из всего этого можно сделать вывод: никакой существенной разницы в производительности opencv при ее прямом использовании(с++) или же через обертки (c#, java) нет.

Technorati Теги: ,,,

Active shape models for .net

Active shape models  — активные формы внешнего вида, это метод поиска на лице точек которые определяют его геометрию (контур, нос …). Необходимая штука для распознавания, лиц или же можно взять эти точки угадать эмоция или же вообще сделать анимированный аватара, блага скорость работы позволяет использовать в раилтайме. Кроме того asm можно заточить под определение формы руки, и много чего еще. Чудная штука но все реализации на с++, а .net как всегда обделен. Вернее был обделен. http://asmfordotnet.codeplex.com/ враппер на китайскую С++ библиотеку, взято только самое необходимое.

Безымянный

Бустинг и нейросети (на примере распознавание номера автомобиля)

Существует задача обучить нейросеть для распознавания букв и цифр на автомобильном номере. Алгоритм распознавания сегментирует номер на символы, бинаризует каждый символ, приводит к размеру 10/15 пикселей, результат  передает нейросети в виде  вектора из  150 значений(0 черный 1 белый пиксель). Всего нейросети 3: буквы, цифры, цифры региона. Сами нейросети  в 5 слоев  полно-связные (150-116-100-100-10/12) метод обучения incremental обучение проводилось в FANN.

Для обучение и теста используя реальные фото номеров снятые с разных камер в разных условиях. Тестовая выборка разбита на 7 частей (7 разных камер). Необходимо было проверить эффективность применение бустинга при обучение этих нейросетей.

  1. обучение применяя бустинг. Брал 1000 образцов(выборка для обучения) обучал сети, распознавал ей дорогие 2000  образцов те что были распознаны не правильно добавлял их в выборку для обучения снова обучал сети, и так пока не закончились образцы. в итоге концечная выборка состояла из  15000 образцов (всего 50000)
  2. берем все образцы и обучаем сеть. но для то чтобы посмотреть на скорость обучения и сравнить с первым методом  обучал частями  по 10 000( 10 … 20….50000).

График для обучения с битенгом, по оси Х  величина выборки по Y процент верно распознанных в тестовых выборках (в номерах по 7-8 символов ошибки умножаются, к тому же образцы сильно разнятся так как камеры разные условия и т.п. поэтому числа не высокие но задача была сравнить)

image

И такой же график но с обучением без бустинга.

image

И для сравнения возьмем среднее обоих методов обучения нормализуем по оси х.

image

По результатам сравнения можно сделать вывод: применение бустинга в обучении нейросетей для распознавания символов (в честности номеров автомобилей)  дает худшей результат чем обучение на все выборке.  Хотя стоит заметить что выборка для обучения с бустингом получилась в 3 раза меньше и скорость обучения нейросетей была в 9 раз выше.

Пример использования SVM-HOG для поиска кругов и треугольников

Для примера возьмем несколько изображений кругов и треугольников на белом фоне.

data

И первую попавшуюся фотографию с нарисованным кругом и треугольником

DSCF2803

Запускаем Сlassifier Tool For OpenCV выбираем папки, для начало целью будут круги, устанавливаем WinSize 32/32, а detivAperature 1. Проводим обучение и получаем классификатор. На тестовом изображении получаем результат

testПовторяем тоже самое но меняем местами треугольники и круги но положительно результата не получается. В чем же дело. Причины тут две:

  • Для обучения классификатор нужно образцов порядка 5000-10000
  • В негативных образцах должны быть разнообразные изображения не содержащие искомые, а не однотипные

Видео создания классификатора

Создания HOG-SVM классификатора

Поиск и классификация объектов в OpenCV (HOG и неросеть)

Существует множество методов для поиска объектов на изображении и многие из них реализованы в OpenCV. Рассмотрю два самых популярных из них HOG+SVN и HAAR.

HOG

HOG (гистограмма ориентации градиента) если не умничать то это метод описание объекта (изображения) на основе изменения яркости.

В OpenCV есть такая замечательная вещь как HOG дескриптор – это массив чисел которой описывает как в изображении изменяется яркость, структуру ее перепадов. Самое замечательное в этом дескрипторе, что если серяи изображений будет иметь одну структуру (например табличка с названием улицы или люди идущие по улице) то и дескрипторы этих изображений будут похожи. Причём схожесть дескрипторов однотипных изображений может установить нейросеть или линейный классификатор. Из всего это следует вывод что на основе HOG дескриптора изображения можно:

1. Найти на изображении нужный нам объект;

2. Определить принадлежит ли изображения к нужному нам классу.

Как вычислить HOG дескриптор

Сперва нужно создать объект класса HOGDescriptor

HOGDescriptor hog = new HOGDescriptor(winSize, blockSize, blockStride, cellSize, nbins, aperature, winSigma);

winSize – это размер изображения оно должно совпадать с размером изображения дескриптор которого будем считать и кратно 2,например 64 на 128. Чем больше размер тем длиннее дескрипторю

все остальные параметры лучше оставить такими blockSize=(16, 16) blockStride=(8, 8) cellSize=(16, 16) nbins=9 aperature=1 winSigma=-1

Самое вычисление выглядит так

float[] f=hog.Compute(new Mat(image));

ВАЖНО!!! HOG это только для Grayscale

Как определить принадлежит ли изображения к нужному нам классу

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

Поиск объекта на изображении используя HOG+SVM

Поиск в OpenCV используя HOG+SVM задача тривиальная. Что такое SVM особо знать и не нужно это такой метод классификации. Сам поиск делается в 4 строки

HOGDescriptor hog = new HOGDescriptor();

hog.SetSVMDetector(HOGDescriptor.DefaultPeopleDetector);

CvRect[] r = hog.DetectMultiScale(new Mat(im),1)

В результате с массиве r будут координаты всех людей. Это стандартный пример поиска пешехода вшитый уже в OpenCV. Но что делать если нужно найти что то другое? Тогда нужно создать свой классификатор.

Создание своего классификатора для поиска с использованием используя HOG+SVM

Чтобы найти что-то на изображении отличное от пешехода нужно создать свой классификатор. Средств создания классификатора в OpenCV нет. Для этого можно использовать classifieropencv classifieropencv.codeplex.com. Для создания классификатора нужно множество изображений нужного объекта, и множество изображение где нет и части нужного нам объекта.

clip_image002

Запускаем программу вводим папку с положительными и отрицательными примерами в нужные поля, задаем размер искомого изображения WinSze (изображения с примерами могут быть других размеров они будут ресайзены, тут важно что потом при поиске будут искать не только объекты с таким размером но соотношении сторон должно примерно совпадать) и если нужно задаем другие парметры. Жмем большую кнопку «Create file, learn and copmute vector to DetectMultiScale» ждем и сохраняем классификатор в файл.

Как использовать свой классификатор

Тут ничего сложного все примерно также как в примере вшитом в OpenCV

HOGDescriptor hog = new OpenCvSharp.CPlusPlus.HOGDescriptor(winSize, blockSize, blockStride, cellSize, nbins, aperature, winSigma);

Важно чтобы все параметры били такими же как при создании классификатора.

hog.SetSVMDetector(d);

Здесь d это массив float из того файла что выдала программа, получить его можно так

string[] s = File.ReadAllText(файл).Split(‘ ‘);

float[] d = new float[s.Length];

for (int i = 0; i < s.Length; i++)

d[i] = (float)Convert.ToDouble(s[i]);

Продолжение кода поиска

IplImage im = new IplImage(openFileDialog1.FileName);

CvRect[] r = hog.DetectMultiScale(new Mat(im), 0);

0 – это порог чем он выше тем меньше ложных срабатываний но и больше пропусков искомых объектов, а в массиве r координаты найденных объектов

«Я так люблю свою страну, И ненавижу государство» или УФМС делает деньги.

По законам РФ граждане обязаны регистрироваться по месту пребыванию и жительства, в народе это называется пропиской. Польза от приписки нам гражданам никакой, но государство, таким образом, привязывает нас к местам рождение, этакое крепостное право 21ого века. Все это скверно, но ничего не поделать и для получения оной нужно идти в отделение УФМС. В Чусовом отделение УФМС находится на улице Ленина радом с отделением Сбера, сразу при входе в это здание стоит очередь человек в 20 и все в один кабинет, на двери этого кабинета указано, что там предоставляют все услуги, прям концепция единого окна в действии, вот только окно это одно, но нам Россиянам к очередям не привыкать. Больше никаких указателей и вывесок нет. Отстояв очередь, заходим в этот кабинет, там сидит одна сотрудница, которая оформляет документы и по окончанию оформления выясняется, что это не сотрудница УФМС и вообще это некое ООО «АИС» которому за 2 минуты работы вы должны рублей 300. Получается в здании УФМС первый кабинет который видит гражданин, это кабинет некого ООО которое дублирует услуги УФМС за деньги и при этом сами сотрудники УФМС эти услуги не предоставляют и никак не информируют граждан. Чтобы оформить туже прописку бесплатно нужно подняться на второй этаж в кабинет №10 (а это узнать без применения пыток и телепатии невозможно), там вам выдадут ворох бланков без объяснений что с ними делать и даже если вы их заполните вероятность того что их примут мала. По словам одного гражданина в очереди он три раза заполнял эти бланки, но инспектор «прикапывался» к каждой букве и отказывался их принять, все это ему надоело и он согласен уже заплатить эти несчётные деньги. Но на этом произвол не заканчивается, если вам не повезло и вам выпал при рождении мужской пол вас отправят в Военкомат что абсолютно не законно (ни в одном законодательном акте нет ни слова о посещении военкомата), а потом вам придется посетить некое учреждение в районе остановки Юность, и самое «забавное» что Военкомат работает с 13:00, а это опережение до 12:30, таким образом, вы обречены, потратить два рабочих дня и пару сотен рублей на бесплатную услугу, от которой вам никакой пользы.

Казалось бы их всего этого есть один выход в виде электронных госуслуг. На сайте http://www.gosuslugi.ru/ можно скачать те самые бланки с примером оформления и отправить их в электронной форме в УФМС, но как работает ли это остается загадкой. И пройдя всех этих чиновников, остается только прийти домой, и включить песню которая выражает все эмоции по этому поводу «Я так люблю свою страну, И ненавижу государство».

Замена именам файлов

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

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

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

Какая должна быть электронная очередь.

Недавно в сбере во всех отделениях поставили системы электронной очереди. Сама идея этой системы идентична обычной “аналоговой” очереди, вы пришли получили номерок и ждете пока вас позовут. Куда отлучились или  зевнули  когда вас объявляли и все берите новый номерок и стойте опять. Получается от этой системы обычный клиент только страдает.

Нормальная же электронная очередь должна представлять из себя такое же устройства по выдаче номерка но этот номерок должен быть содержать чип маячок. Когда подходит очередь этого номера терминал выдавший номерок  по радио каналу опрашивает чип этого номерка находится ли он в помещении и если ответ приходит то клиент приглашается, но если номерок в не зоны доступа это значит клиент отлучился и его очередь сдвигается  а подзывается следующий и как только клиент вернутся в помещение банка, номерок его станет виден системе клиент подзывается и обслуживается. Таким образом очередь становится действительно справедливой, кто первый номерок взял тот и первый обслужен, и отпадает необходимость сидеть в банке и ждать, можно взять номерок сходить по делам вернутся а ваша очередь уже подошла.

Манифест технократов.

Основы

Государство и цели.

Государство — система! Государство должно быть системой, а не  организмом. Главное, что должна иметь любая система — это цель существования. Именно существование цели отличается систему от организма и хауса. Цель объединяет все элементы системы. Поэтому важнейшая задача в построении любого государства это определение целей его создания и существования. Единственные разумными целями существования государства являются

1.       Развития науки и искусства

2.       Развитие техники и технологии

3.       Качество жизни

Все остальные цели должны вытекать из выше указанных и обеспечивать движение к ним.  Любая деятельность государства не способствующая движения к этим целям должна быть упрочнена или отдана в честные руки.

Законы.

Цель существования законов в государстве — это определение «протоколов» взаимодействия его элементов, будь то граждане, институты, само государство или же сами законы. Законы должны выводится из неоспоримых и понятных всем общечеловеческих  ценностей и знаний. Критерием истинности закона служит возможность его формулировки любим жителем страны без знания его текста на основе логических рассуждений из неоспоримых и ценностей и знаний. Если закон  можно оспорить в каком бы то не было виде он должен быть упразднён.

Власть и политика.

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

Политика как институт является методом продвижения отдельных индивидов своих интересов или интересов отдельных групп. Очевидно что это деятельность не способствуют движения ни  к одной из фундаментальных целей. Кроме того политика подразумевает наличие власти. Следовательно политика в нынешнем виде не должна существовать ни в каких проявлениях.

Управление.

Управление государством должно осуществляется только на основе критерия оптимальности.  Любое решение должно принимается на основе научно-обоснованных и неопровержимых расчетов. Для выявление оптимальных управленческих решений необходима подсистема верификации управленческого решения, который должен состоять из  выдающихся научных деятелей в области точных наук (далее высший научный совет). Предложить управленческое решений любого уровня может любой гражданин, предложенное решение распаривания высшим научным советом и после подтверждения его оптимальности приводится в жизнь.

Первые шаги установлению технократии.

Чиновник под надзором техники и граждан.

Первой и главное в условиях существующего государство является лишение власти на первом этапе не самого государство, к сожалению лишение власти государство приведут к хаосу и краху, а чиновников любого ранга. Любое решение чиновника должно быть продиктовано существующими законами и ничем другим.  Для этого необходимо опутать всех чиновников «путами» информационных систем. Все действия чиновников должны быть контролируемы информационными системами доступ к которым должен иметь любой гражданин. Кроме того все деятельность чиновниками которая может быть заменены компьютером должна быть немедленно заменена.

Медицина образование наука и искусство -это главное.

Медицина образование наука и искусство неоспоримые приоритеты, все ресурсы должны быть направлены в эти области. Необходимо введение всеобщего бесплатного высшего образования, без этого невозможно развития науки и всего общества.

Армия и полиция — рудимент.

Армия является ничем иным как свидетельством и доказательством власти государства над своими гражданами. Все другие цели существования армии, как то защита от противников являются ложными. Следовательно существовании армии недопустимо.

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

Экономика и налоги.

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

Единственный налог который должен остаться это налог на доходы, которые должен состоять из трех составляющих, первая часть федеральная должна составлять порядка 5 процентов, вторая часть региональная, третья муниципальная. Процент муниципальной и региональной части определяется каждым регионом и муниципалитетом путем прямого ежегодного голосования.

Оценка деятельности чиновника гражданами.

Каждый чиновник должен иметь рейтинг который определяется голосованием граждан ща него или против. Каждый гражданин обратившийся к чиновнику должен иметь возможность оценить его работу.  В случае если оценка деятельности чиновника низкая он должен быть уволен с невозможностью последующей работы в гос. структурах.

Судья ответственен за свои решения.

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

Бескультурье и курение.

Необходимо введение жёсткой административной ответственности за употребление мата в общественных в местах, в том числе и на улице. Так же необходима административная ответственность за курения в общественных местах. Кроме того должно пресекутся любое агрессивное поведение гражданина.

Кавказ регион особый и не нужный.

Никакой федерально поддержки регионам Кавказа не должно оказывается, как и любым другим регионам.  Кроме того жителям должно выдавятся разрешение на пребывание в других регионах страны. Выдача разрешение должна быть быстрой и беспроблемной, но при любом нарушении закона или подозрение на него разрешение должно быть аннулировано, а при нарушение закона влекущее уголовное наказания после его понесения житель Кавказа должен быть лишён гражданства а его ближайшие родственники лишены права на получение разрешение на выезд. Кроме того житель Кавказа может быть лишён разрешения на выезд при жалобе жителей других регионов, и депортирован в родной регион.

Hello world!

Welcome to WordPress.com. After you read this, you should delete and write your own post, with a new title above. Or hit Add New on the left (of the admin dashboard) to start a fresh post.

Here are some suggestions for your first post.

  1. You can find new ideas for what to blog about by reading the Daily Post.
  2. Add PressThis to your browser. It creates a new blog post for you about any interesting  page you read on the web.
  3. Make some changes to this page, and then hit preview on the right. You can always preview any post or edit it before you share it to the world.