AI Lab

Open Artificial Intelligence Laboratory

Разработки

RDK: Назначение библиотеки и перспективы развития

Введение

Множество задач по разработке программного обеспечения отличаются тем, что структура ядра будущего программного обеспечения заранее неизвестна, или, что еще сложнее, заранее известно, что эта структура будет изменяться. В простом случае эти изменения могут заканчиваться на этапе разработки конечного проекта (например, разработка множества систем видеоаналитики, каждая из которых обладает строго определенной структурой и функциями в соответствии с задачами). В более сложном случае – структура принципиально не определена и может изменяться в процессе работы программного обеспечения (например, моделирование нейронных сетей с нерегулярной и динамически перестраивающейся структурой связей). Но даже в описанном выше более простом случае создания системы анализа видео, возможна необходимость проведения серии экспериментов на конечном программном обеспечении, при которых потребуется изменение структуры алгоритма видеоаналитики (например, подбор фильтров предобработки), и было бы удобно обеспечить возможность динамической настройки структуры алгоритма.

В настоящее время существует большое количество всевозможных средств математического моделирования.

Одно из наиболее развитых и универсальных средств на сегодняшний день это Matlab. Причем его возможности не ограничиваются только решением модельных задач. Maltab также предоставляет средства для быстрого прототипирования. Так, например, современные версии позволяют в режиме реального времени обрабатывать изображения, позволяя отрабатывать алгоритмы анализа видео. Также он имеет развитые средства генерации исходного кода на С, и генерации кода для программируемой логики с возможностью прошивки и проверки работы непосредственно на отладочных платах.

Оставляя в стороне вопрос возможности дальнейшей поддержки сгенерированного кода и его оптимальности, можно отметить, что такой код все же применим для создания прототипа в составе штатной системы, и в этом несомненное достоинство Matlab.

Однако обычно прототипирование в Matlab осуществляется для отдельных алгоритмов, а затем по результатам работы вручную переносится в штатную систему. И задачи, которые требуют гибкой настройки взаимодействия "штатных" реализаций различных алгоритмов Matlab-ом не охватываются, т.к. это обычно нецелесообразно.

Для алгоритмов анализа видео часто применяется иной инструментарий - библиотека OpenCV. При этом она применима как на этапе прототипирования, для создания отдельных алгоритмов, так и в реализации штатных систем видеоаналитики. Можно сказать, что эта библиотека уже стала стандартом де-факто для прототипирования видеоаналитики и потенциально может стать таким же стандартом в создании готовых продуктов.

Описание

Библиотека RDK отчасти похожа на "Matlab simulink для программистов". В ней также можно создавать различные блоки (компоненты в терминах RDK), которые можно связывать друг с другом и обеспечивать их согласованную работу. Благодаря шаблонам она предоставляет универсальные средства описания параметров таких блоков, внутренних переменных состояния, входов и выходов вне зависимости от типов данных.

Если мы ставим задачу обеспечить возможность изменения структуры ядра программного обеспечения во время выполнения, мы одновременно накладываем дополнительное требование – обеспечить унифицированный доступ к параметрам, входным и выходным данным элементов этой структуры (алгоритмов). Также нам необходимо предоставить средства для загрузки и сохранения структуры ядра. Такая унификация может быть двух уровней: обязательный уровень универсального доступа в пределах языка разработки, и опциональный уровень универсального доступа вне зависимости от языка. Последнее позволяет наиболее полно разделить разработку ядра программного обеспечения и интерфейса. Также унификация интерфейса пользователя ядра, позволит существенно упростить внедрение конечных вариантов ядер, обеспечивающих решение поставленных задач, в состав использующих их продуктов.
Из сформулированных выше требований вытекает, что программное обеспечение, удовлетворяющее этим требованиям, должно иметь двухуровневую архитектуру: уровень библиотеки алгоритмов, и уровень конечного ПО, использующего библиотеку. Собственно это также является необходимой потребностью для применения описанного выше подхода. Т.е. если в архитектуру разрабатываемого ПО не укладывается возможность создания библиотеки алгоритмов, то применение предлагаемого подхода для разработки невыгодно.
Помимо унификации интерфейса пользователя библиотеки, также можно обеспечить унификацию интерфейса разработчика алгоритмов библиотеки. Здесь унификация может преследовать цель снижения требований от разработчика конечных алгоритмов к глубине познаний в архитектуре библиотеки.

Системные требования

Ядро RDK написано на ANSI C++. Поддерживается сборка под Microsoft Visual C++, Embarcadero C++ Builder, Qt.

Поддерживаемые платформы: Windows, Linux, MacOS (компилятор gcc).

Интерфейс настройки и серверная реализация в настоящее время существует только под Embarcadero C++ Builder.

Лицензия
New BSD License.

Перспективы

На данный момент RDK применима скорее для прототипирования сложных систем, однако конечной целью является платформа для создания конечных продуктов, которая позволит существенно упростить и ускорить процесс разаботки, в первую очередь благодаря тому, что архитектура библиотеки поощряет повтороное использование кода. Также благодаря унификации внешнего интерфейса отдельных компонент (алгоритмов) упрощается возможность написания систем автоматического тестирования моделей из таких компонент. Дополнительно, унификация интерфейса компонент дает возможность создать, без существенной потери производительности, принципиально потокобезопасную реализацию, где каждый алгоритм сможет выполняться в отдельном потоке, а обеспечение безопасного их взаимодействия возьмет на себя библиотека.

Первоочередные цели

Заврешение рефакторинга архитектуры ядра.

Встраивание в ядро инструментария для тестирования алгоритмов.

Разработка примеров применения библиотеки.

Создание документации для разработчика компонент библиотеки.

Разработка интерфейса управления и серверного ПО на Qt.

Полезные ссылки

Материалы для скачивания

Обсудить на форуме (комментариев 17).

RDK: Применение библиотеки в проекте

Скачать: RDK.UsingToProject.Ru.doc

Введение

         В этом документе будет рассмотрены основные понятия и функционал, необходимый для использования библиотеки RDK конечным пользователем. Документ не описывает процесса развития библиотеки для добавления нового функционала, например новых алгоритмов. Ознакомление с информацией по развитию библиотеки следует начать с документа: RDK.QuickStart.ComponentDevelopment.Ru.doc

1 Варианты использования

Интерфейс взаимодействия с пользовательским приложением может быть следующих трех типов:

-       В виде статической или динамической библиотеки – управление ядром обеспечивается через интерфейс на чистом C. Ядро собирается статической или динамической библиотекой и подключается соответственно либо на этапе сборки проекта, либо во время выполнения. Этот тип взаимодействия является основным.

-       С прямым доступом к классам управляющего ядра – управление ядром обеспечивается через полноценный C++ интерфейс, для всех функций, которые доступны в интерфейсе на чистом C, существуют, вызываемые ими аналоги в классах ядра. Позволяет, в частности, обеспечить альтернативный доступ к компонентам и их содержимому, эффективный по быстродействию.

-       Использование компонент в явном виде в коде – путем непосредственного использования классов и функций библиотеки. Обычно нежелателен для конечного использования. Область применения – реализация своих библиотек на основе RDK, либо использование отдельных элементов в конечных проектах, где структура моделей расчетов жестко определена и накладных расходы на интерфейс неприемлемо велики.

2 Использование в виде статической или динамической библиотеки

2.1 Требуемые файлы

Для подключения RDKв виде библиотеки необходимо в исходных кодах использовать файлы: Deploy/Include/rdk_initlib.hили Deploy/Include/rdk_initdll.h в зависимости от того, в каком варианте собрана библиотека. Одновременно в проект должен быть добавлен соотвествующий файл Deploy/Dll/rdk.xxx.libили Deploy/Lib/rdk.xxx.lib, где xxx– имя используемого окружения. Например для C++ Builderфайлы имеют вид rdk.bcb.lib. Также в проект должен быть добавлен путь поиска исходных файлов Deploy/Include.

В некоторых случаях может быть необходим прямой доступ к классам управляющего ядра библиотеки. В этом случае необходимо для подключения библиотеки использовать файл Deploy/Include/rdk_cpp_initlib.hили Deploy/Include/rdk_cpp_initdll.h. Обязательным требованием при этом является, то, чтобы библиотека и пользовательское приложение были собраны одним компилятором. При таком способе подключения доступен как весь стандартный C-интерфейс, так и прямой доступ к указателям на экземпляры классов управляющего ядра.

Альтернативным способом подключения как статической библиотеки является ее сборка из исходных кодов непосредственно в конечном программном продукте. В этом случае, в проект вместо .lib файлов добавляются следующие файлы из папки Deploy/Include:

-       rdk.xxx.cpp (xxx – имя используемого окружения, например bcb, win, gcc, ansi)

-       rdk_cpp_initlib.cpp

-       rdk_new.cpp

2.2 Основные понятия

RDKпредоставляет, в частности, средства для построения приложений, структура алгоритмов которых может быть заранее неизвестна, или модифицируется во время выполнения. Для этого в RDKреализовано расширение Engine (управляющее ядро) и его развитие для решения задач видеообработки – GraphicsEngine (управляющее ядро библиотеки видеообработки).

На рисунке 1 представлена схема взаимодействия основных модулей RDK.

 RDK.UsingToProject.Ru pic1

 Рисунок. 1 – Схема взаимодействия основных модулей RDK

Управляющее ядро (Engine) обеспечивает функционал по инициализации и деинициализации основных модулей библиотеки: среды выполнения и хранилища объектов. Также управляющее ядро предоставляет пользовательской программе унифицированный интерфейс взаимодействия с модулями библиотеки.

Хранилище классов и компонент (Storage) предоставляет средства по управлению доступным набором компонент (решающих модулей) во время выполнения программы. Таким образом, обеспечивается возможность динамической замены компонент, или модификации структурной схемы модели (под моделью будем понимать алгоритм верхнего уровня, решающий поставленную пользователем задачу).

Среда выполнения (Environment), используя хранилище объектов, обеспечивает функционал по формированию структурной схемы модели, управлению отдельными компонентами модели, заданию входных данных модели для расчета и выдачу выходных данных.

Модель (Model) – часть среды, содержащая в себе собственно структуру алгоритма и все функции по управлению им.

Компонент (Component) – самодостаточная в рамках модели сущность. Имеет методы для связи с другими контейнерами, может содержать в себе другие компоненты. В рамках своего владельца определяется уникальным идентификатором id (целое число) и строковым именем. Для прямого доступа к вложенному компоненту можно использовать составное строковое описание вида “id1.id2.id3”, например “13.7.1”, или “ComponentName1.SubComponentName2.SubComponentName3”.

. 35

Подробнее...

Обсудить на форуме (комментариев 0).

RDK: Организация файлов

Скачать: RDK.FileStructure.Ru.doc

Введение

         В документе будет рассмотрена организация каталогов и файлов RDK, и правила добавления новых файлов.

1 Общий вид файловой структуры

Ниже представлен верхний уровень структуры RDK (Рисунок 1).

RDK.FileStructure.Ru pic1 

Рисунок 1 – Верхний уровень структуры RDK

         Здесь серым цветом выделены каталоги, структура которых требует отдельного рассмотрения. Жирным контуром здесь и далее будем обозначать каталоги.

-       Bin – целевой каталог для сборки всех бинарных файлов, включая примеры использования.

-       Build – содержит файлы проектов, обеспечивающие сборку бинарного кода RDK.

-       Core – исходные коды RDK.

-       Deploy ­– точка входа для пользователя RDK. Содержит .h файлы для подключения библиотеки и актуальные копии бинарных файлов.

-       Docs – документация.

-       GUI – содержит платформенно зависимый пользовательский интерфейс, а также программный интерфейс с другими библиотеками.

-       Samples – примеры использования RDK.

-       ThirdParty – библиотеки сторонних разработчиков, от которых зависит RDK.

. 17

Подробнее...

Обсудить на форуме (комментариев 0).

Состав offline документации проекта RDK и рекомендации по ознакомлению

Скачать: RDK.DocumentsList.Ru.doc

На рисунке ниже представлено условное разбиение всех документов на две группы – для пользователя и разработчика. Зеленым отмечены готовые документы. Желтым – документы, содержащие актуальные сведения, но неоконченные.

RDK.DocumentsList.Ru pic1

 

Перечень документов:

  1. Назначение библиотеки: RDK.Purposes.Ru.doc
  2. Руководство пользователя: RDK.UsersGuide.Ru.doc
  3. Структура файлов библиотеки: RDK.FileStructure.Ru.doc
  4. Соглашения (об именованиях, и т.п.): RDK. Conventions.Ru.doc
  5. Руководство разработчика: RDK.DevelopersGuide.Ru.doc
  6. Быстрый старт. Использование в проекте. RDK.QuickStart.UsingToProject.Ru.doc
  7. Быстрый старт. Разработка конечного компонента. RDK.QuickStart.ComponentDevelopment.Ru.doc
  8. Быстрый старт. Разработка группы компонент. RDK.QuickStart.ComponentGroupDevelopment.Ru.doc
  9. Быстрый старт. Разработка библиотеки компонент. RDK.QuickStart.ComponentLibraryDevelopment.Ru.doc
  10. Быстрый старт. Разработка новой SDK на базе RDK. RDK.QuickStart.DerivedSDKDevelopment.Ru.doc
  11. Описание стандартных компонент. Руководство пользователя. RDK.StandardComponentDescription.UsersGuide.Ru.doc
  12. Описание примеров. RDK.SamplesDescription.Ru.doc
  13. Описание проектов, формирующих бинарные файлы библиотеки: RDK.BuildProjectsDescription.UsersGuide.Ru.doc

Подробнее...

Обсудить на форуме (комментариев 0).

Назначение библиотеки RDK

Скачать: RDK.Purposes.Ru.doc

         Множество задач по разработке программного обеспечения отличаются тем, что структура ядра будущего программного обеспечения заранее неизвестна, или, что еще сложнее, заранее известно, что эта структура будет изменяться. В простом случае эти изменения могут заканчиваться на этапе разработки конечного проекта (например, разработка множества систем видеоаналитики, каждая из которых обладает строго определенной структурой и функциями в соответствии с задачами). В более сложном случае – структура принципиально не определена и может изменяться в процессе работы программного обеспечения (например, моделирование нейронных сетей с нерегулярной и динамически перестраивающейся структурой связей). Но даже в описанном выше более простом случае создания системы анализа видео, возможна необходимость проведения серии экспериментов на конечном программном обеспечении, при которых потребуется изменение структуры алгоритма видеоаналитики (например, подбор фильтров предобработки), и было бы удобно обеспечить возможность динамической настройки структуры алгоритма.

Подробнее...

Обсудить на форуме (комментариев 0).