Подробное описание пакета: [[Библиотека_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);