roboforum.ru

Технический форум по робототехнике.

Портирование алгоритма AVM под C# (распознавание образов)

Портирование алгоритма AVM под C# (распознавание образов)

EDV » 30 июл 2010, 16:47

В этой теме речь пойдёт об адоптации алгоритма AVM (Associative video memory) под C#.

Подробное описание пакета: [[Библиотека_AVM_SDK_simple.NET]]

Первый вариант порта AVM под C# использовал для захвата изображений библиотеку Emgu CV:
http://edv-detail.narod.ru/AVM_SDK_v0-5-net.zip

Но это не удобно для пользователей, так как не всем хочется использовать Emgu CV.

Тогда я сделал второй вариант порта AVM под C# который не «завязан» на какие либо библиотеки, достаточно просто подать на вход алгоритма изображение в формате Bitmap.

Скачать пакет можно здесь: AVM_SDK_simple-net.zip

В первом примере .\AVM_SDK_simple.net\samples\RcgExample1\RcgExample1.csproj продемонстрирован процесс обучения AVM на новый объект (открытку), а исходное изображение взято из видеоролика RcgTraining4s.avi.

Для захвата изображений из AVI файла был использован вот этот пример:
http://www.codeproject.com/KB/audio-video/avifilewrapper.aspx

Наконец, то удалось закончить второй пример (.\AVM_SDK_simple.net\samples\RcgExample2\RcgExample2.csproj) в котором используются методы WritePackedData/ReadPackedData (использовал заготовку: .\AForge.NET\Framework\Samples\Vision\MotionDetector).

Для захвата с видеокамеры использовал библиотеку: «AForge.NET Framework-2.1.3».

После запуска .\AVM_SDK_simple.net\bin\RcgExample2.exe приложение считывает данные распознавания из файла "avm.dat" с помощью метода MainForm.LoadRcgData.

По умолчанию в этом файле находятся данные распознавания маркера "Иди сюда" его изображение находится в документе .\AVM_SDK_simple.net\bin\Иди сюда.doc, так что можно предварительно его распечатать и предъявить на распознавание.

Что бы обучить AVM на новые объекты, а затем записать их данные в "avm.dat",
необходимо скачать пакет "Navigator":

Русская версия: http://edv-detail.narod.ru/Navigator_src.zip
Англоязычная версия: http://edv-detail.narod.ru/Navigator_src_en.zip

Скачиваем, распаковываем, и запускаем .\Navigator\StartMe.bat в появившемся диалоговом окне жмём кнопку "Изучить объект", затем курсором мыши указываем левый верхний угол объекта на картинке с видеокамеры и жмём левую клавишу мыши, потом растягиваете рамку, указывая размер объекта, еще раз клацаем клавишу мыши. В появившемся диалоге пишим название объекта и жмёте "Ok". Затем размещаем объект для обучения в зелёной рамке (подготовка к обучению), когда рамка станет красной, то обучение началось, нужно будет показывать объект под разными углами. Если с первого раза не успели показать все картинки одного и того же объекта, то в диалоговом окне "Введите название объекта" можно выбрать из списка тот же самый объект и выполнить дополнительное обучение (показать ещё картинок того же объекта).

После обучения закрывем приложение Recognition.exe (предварительно сохранив данные в avm.dat) и копируем файл avm.dat из домашней директории (к примеру: C:\Documents and Settings\EDV\AVM\avm.dat) в дирекорию .\AVM_SDK_simple.net\bin. После запуска RcgExample2.exe и подключения WEB-камеры новые объекты будут считаны из "avm.dat" и начнут распознаваться.

Файл avm.dat состоит из трёх частей:
- заголовок;
- таблица имён объектов;
- данные распознавания.

Подробности можно поглядеть в исходниках http://edv-detail.narod.ru/Navigator_src.zip

В примере RcgExample1 добавил закомментированные примеры установки параметров для AVM:

Код: Выделить всёРазвернуть
            if (_am.Load(cRcgDataFileName))
            {
                // Test of removing all data out from associative tree
                //_am.ClearTreeData();

                // Increase the base cell value for recognition threshold calculation
                //_am.SetParam(CvAM_ParamType.ptRcgMxCellBase, 25000);

                // Set the period of optimization every 4 seconds
                //_am.SetParam(CvAM_ParamType.ptOptimizeLoop, 4000);

                // Set the age of formed cluster to 70 hits
                //_am.SetParam(CvAM_ParamType.ptMaxClusterAge, 70);

                // Set the depth of tracking to 4 frames
                //_am.SetParam(CvAM_ParamType.ptTrackingDepth, 4);

Re: Портирование алгоритма AVM под C# (распознавание образов

avr123.nm.ru » 01 авг 2010, 10:29

Какое ПО должно быть на ПК кроме перечисленого выше ? Если не трудно добавть нумерацию в порядок действий, а ПО не ПК а насало списка.

Re: Портирование алгоритма AVM под C# (распознавание образов

EDV » 01 авг 2010, 15:42

Есть подробное описание: [[Библиотека_AVM_SDK_simple.NET]]

И там же сказано (в пункте «Структура библиотеки»): Всё что нужно для подключения алгоритма AVM – это включение библиотек avm061.dll и AVM_api.dll в ваш проект. В качестве входных данных алгоритм AVM использует изображения в формате Bitmap.

Никакого специфического ПО не нужно, просто захватываешь видео (каким либо способом) и подаешь его на вход алгоритма в формате Bitmap.

Быстрый старт
Что нужно для обучения?
1. Создать экземпляр AVM: _am = new CvAssociativeMemory32S();
2. Выполнить инициализацию экземпляра (методы: Create, Load, или ReadPackedData): _am.Load(cRcgDataFileName);
...

Всё там же: [[Библиотека_AVM_SDK_simple.NET]]

Из ПО должна быть установлена хотя бы .NET Framework 2.0. Но если у вас установлено «Microsoft Visual Studio 2008» то все версии Framework итак уже есть на вашем компьютере.

Дальше достаточно скачать http://edv-detail.narod.ru/AVM_SDK_simple-net.zip и запустить на выполнение примеры: .\AVM_SDK_simple.net\bin\RcgExample1.exe и .\AVM_SDK_simple.net\bin\RcgExample2.exe (всё необходимое для их запуска уже есть в пакете).

Re: Портирование алгоритма AVM под C# (распознавание образов

aka13 » 08 мар 2011, 23:30

Здавствуйте,
не могли бы вы объяснить с нуля, что нужно сделать, чтобы обрабатывать видел допустим с веб-кама.
К сожалению владею я только языком похожим на С, но готов терпеливо учится. Объясните школьнику, как заставить это работать?


Rambler\'s Top100 Mail.ru counter