Библиотека AVM SDK simple.NET — различия между версиями

Материал из roboforum.ru Wiki
Перейти к: навигация, поиск
(Структура библиотеки (реализация))
(Возможности алгоритма AVM)
Строка 3: Строка 3:
 
== Возможности алгоритма AVM ==
 
== Возможности алгоритма AVM ==
  
Алгоритм "Associative Video Memory" (AVM) использует принцип многоуровневой
+
[[Алгоритм "Associative Video Memory" (AVM)]] использует принцип многоуровневой
 
декомпозиции матриц распознавания, устойчив к шумам камеры, хорошо масштабируется, просто и быстро обучается,
 
декомпозиции матриц распознавания, устойчив к шумам камеры, хорошо масштабируется, просто и быстро обучается,
 
показывает приемлемое быстродействие на больших разрешениях входного видео (960x720 и больше).
 
показывает приемлемое быстродействие на больших разрешениях входного видео (960x720 и больше).
Алгоритм работает с полутоновыми (черно-белыми) изображениями.  
+
Алгоритм работает с полутоновыми (черно-белыми) изображениями.
  
 
== Структура библиотеки (реализация) ==
 
== Структура библиотеки (реализация) ==

Версия 17:32, 31 июля 2010

Реализация алгоритма AVM (Associative Video Memory) под C#

Возможности алгоритма AVM

Алгоритм "Associative Video Memory" (AVM) использует принцип многоуровневой декомпозиции матриц распознавания, устойчив к шумам камеры, хорошо масштабируется, просто и быстро обучается, показывает приемлемое быстродействие на больших разрешениях входного видео (960x720 и больше). Алгоритм работает с полутоновыми (черно-белыми) изображениями.

Структура библиотеки (реализация)

В состав реализации AVM SDK simple.NET входят две динамических библиотеки:

* avm061.dll – библиотека реализации алгоритма AVM;
* AVM_api.dll – библиотека wrapper, обеспечивающая C# интерфейс.

Исходные файлы проекта интерфейсной библиотеки AVM_api.dll расположены в папке: .\AVM_SDK_simple.net\AVM_api\AVM_api.csproj

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

Пакет AVM SDK simple.NET можно скачать здесь: [1]

Быстрый старт

Что нужно для обучения?

1. Создать экземпляр AVM: _am = new CvAssociativeMemory32S();
2. Выполнить инициализацию экземпляра (методы: Create, Load, или ReadPackedData): _am.Load(cRcgDataFileName);
3. Установить изображение для обработки: _am.SetImage(ref aSrcImage);
4. Записать новый образ в дерево поиска AVM: _am.Write(InterestArea, ObjIndex, true).

Что нужно для распознавания?

1. Выполнить пункты 1-3 описанные выше;
2. Прочитать массив описателей объектов (методы: ObjectTracking/ObjectRecognition): Array SeqObjDsr = _am.ObjectTracking(true, 0.54, 0.45);
3. Если массив не пуст (объекты найденны), то в цикле обработать массив описателй распознанных объектов.

Более подробно можно посмотреть в папке примеров использования AVM: .\AVM_SDK_simple.net\samples

Описание методов

void Create(Size aKeyImgSize, short aLevelMax, int aTreeTotal, bool aClustering);

Инициализация экземпляра AVM.

aKeyImgSize – ключевой размер изображения. В большинстве случаев оптимальное значение 80x80 пикселей.
aLevelMax   – максимальное количество уровней поискового дерева. Если параметр равен нулю,
              то будет установлено оптимальное значение по умолчанию.
aTreeTotal  – общее количество поисковых деревьев, при работе с коллекциями деревьев.
              По умолчанию равен 1 (одно поисковое дерево).
aClustering – признак использования дополнительных кластерных матриц в дереве поиска (для ускорения поиска).
              По умолчания включен (true).

void Write(Rectangle aInterestArea, int apData, bool aDeepLearning);

С помощью метода Write происходить "связывание" фрагмента изображения (первый параметр) с данными пользователя (второй параметры), в случае CvAssociativeMemory32S - это индекс объекта. Затем эти данные можно считать с помощью метода Read, если просканировать изображение окошком разного размера, и найти объект/объекты, что собственно и делает метод ObjectTracking/ObjectRecognition.

aInterestArea – область интереса, фрагмент изображения содержащий объект;
apData        – данные пользователя;
aDeepLearning – признак «углублённого» обучения (дополнительное сканирование в окрестности объекта).
                По умолчанию включен (true).

bool Read(Rectangle aInterestArea, ref Rectangle apSearchArea, ref IntPtr appData, ref UInt64 apIndex, ref UInt64 apHitCounter, ref double apSimilarity, bool aTotalSearch);

Чтение данных из памяти (третий параметр), которые проассоциированы с фрагментом изображения (первый параметр).

aInterestArea – область интереса;
apSearchArea  – область изображения, где был найден объект;
appData       – указатель на данные пользователя;
apIndex       – индекс ассоциативного ядра (откуда прочитаны данные);
apHitCounter  – счётчик попаданий в ассоциативное ядро;
apSimilarity  – коэффициент схожести с эталоном (если больше 0.5, то объект распознан);
aTotalSearch  – признак «тотального» поиска до последнего уровня дерева поиска
                (найдёт наиболее похожий образ в дереве поиска, даже если распознавание не произошло).

Метод возвращает значение true если в области интереса найден объект.

Array ObjectRecognition();

Выполняет сканирование изображения методом Read и возвращает массив описателей распознанных объектов.

Array ObjectTracking(bool aTrainingDuringTracking, double aSimilarityUpTrd, double aSimilarityDnTrd);

Выполняет поиск и прослеживание объектов. Возвращает массив описателей прослеживаемых объектов.

aTrainingDuringTracking – признак дополнительного обучения в процессе прослеживания объекта.
                          По умолчанию включен (true).
aSimilarityUpTrd        – верхний порог схожести ниже которого будет выполнено дополнительное
                          обучение на прослеживаемый объект (по умолчанию равен 0.54).
aSimilarityDnTrd        – нижний порог схожести выше которого ещё может быть выполнено дополнительное
                          обучение (по умолчанию равен 0.45).