Библиотека AVM SDK simple.NET
Содержание
- 1 Реализация алгоритма AVM (Associative Video Memory) под C#
- 1.1 Возможности алгоритма AVM
- 1.2 Структура библиотеки (реализация)
- 1.3 Быстрый старт
- 1.4 Описание методов
- 1.4.1 void Create(Size aKeyImgSize, short aLevelMax, int aTreeTotal, bool aClustering);
- 1.4.2 void Write(Rectangle aInterestArea, int apData, bool aDeepLearning);
- 1.4.3 bool Read(Rectangle aInterestArea, ref Rectangle apSearchArea, ref IntPtr appData, ref UInt64 apIndex, ref UInt64 apHitCounter, ref double apSimilarity, bool aTotalSearch);
- 1.4.4 Array ObjectRecognition();
- 1.4.5 Array ObjectTracking(bool aTrainingDuringTracking, double aSimilarityUpTrd, double aSimilarityDnTrd);
Реализация алгоритма 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).