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

Материал из roboforum.ru Wiki
Перейти к: навигация, поиск
(Новая страница: «Реализация алгоритма AVM (Associative Video Memory) под C#»)
 
Строка 1: Строка 1:
Реализация алгоритма AVM ([[Associative Video Memory]]) под C#
+
= Реализация алгоритма 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.
 +
 
 +
== Быстрый старт ==
 +
 
 +
=== Что нужно для обучения? ===
 +
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).

Версия 17:04, 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.

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

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

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).