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: Назначение библиотеки и перспективы развития