AI Lab

Open Artificial Intelligence Laboratory

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

Содержание

Введение 1.4.4 rdk_init_cpp.cpp
1 Общий вид файловой структуры 1.4.5 rdk_new.cpp
1.1 Bin 1.4.6 rdk_exceptions.h
1.2 Build 1.4.7 rdk.mod.cpp
1.3 Core 1.5 Docs
1.3.1 Engine/Libraries 1.6 GUI
1.3.2 Graphics/Libraries 1.7 Samples
1.4 Deploy 1.8 ThirdParty
1.4.1 myrdk.cpp 2 Правила связывания файлов исходных кодов в единую структуру
1.4.2 rdk.cpp Заключение
1.4.3 rdk_init.cpp  

1.1 Bin

Целевой каталог для сборки всех бинарных файлов, включая примеры использования. Также здесь хранятся настройки всех примеров использования.

1.2 Build

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

Полностью, структура каталога Build выглядит следующим образом (Рисунок 2).

RDK.FileStructure.Ru pic2

Рисунок 2 – Структура каталога Build

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

1.3 Core

Содержит все исходные коды RDK. Разделы имеют следующую структуру (Рисунок 3):

-       Console – Поддержка консольного управления ядром (разработка приостановлена, возможно будет удалено, или вынесено в отдельный проект).

-       Engine – Собственно ядро. Содержит все базовые классы, реализующие функциональность, описанную в документе RDK.Purposes.doc и библиотеки компонент общего пользования.

-       Graphics – Графическое ядро. Является надстройкой над Engine и упрощает создание систем обработки видеоинформации. Также содержит набор базовых компонент видеоаналитики.

-       Math – Набор математических примитивов.

-       Serialize – Средства сериализации данных простых типов, произвольных производных от С++ STL-контейнеров и внутренних типов RDK. Сериализация осуществляется в XML и двоичный код. Также предоставляет функции чтения и записи STL-контейнеров и внутренних типов RDK в текстовый поток.

-       System – Содержит системно-зависимые функции, без которых невозможна реализация некоторого функционала ядра (например учет времени с точностью до миллисекунд).

-       Utilities – Содержит разрозненный набор классов и функций, упрощающих разработку RDK, или сторонних приложений. Например класс поддержки ini-файлов, базовые классы исключений RDK, и т.п.

RDK.FileStructure.Ru pic3

Рисунок 3 – Структура исходных кодов RDK

         Разделы Math, Serialize, System, Utilities – образуют подмножество MyRDK. Эта часть может быть использована независимо от основной части RDK и не накладывает архитектурных ограничений на конечный проект.

1.3.1 Engine/Libraries

Содержит библиотеки классов, описывающих компоненты общего пользования.

Разделы имеют следующую структуру, описывающую наборы компонент общего назначения (Рисунок 3):

-       BCLBasic Class Libarary – содержит классы описания компонент, использующихся как конечные базовые классы ядра RDK.

-       IO – библиотека ввода-вывода, обеспечивающая интерфейс RDK с внешним миром. Содержит собственно компоненты ввода-вывода, и средства преобразования данных из сторонних форматов в формат, поддерживаемый компонентами RDK.

1.3.2 Graphics/Libraries

Содержит библиотеки классов, описывающих компоненты алгоритмов видеоаналитики.

Разделы имеют следующую структуру, описывающую наборы классов обработки изображений (Рисунок 3):

-       Ariphmetic – арифметические операции.

-       Basic – различные простые алгоритмы, не подходящие под другие разделы.

-       Detection – обнаружение движения.

-       Filtering – сглаживающие и другие фильтры.

-       GUI – графический интерфейс, обеспечивающий простые функции рисования на изображениях

-       Morphology – морфологические операции.

-       ObjectSearch – алгоритмы поиска известных объектов на изображении.

-       ObjectTracking – алгоритмы сопровождения объектов.

-       Qualifier – алгоритмы повышения качества изображений.

-       Simulator – алгоритмы имитации сцен для видеоаналитики.

-       SpatialGeometry – алгоритмы описания моделей камеры и пространственной ориентации объектов. Этот раздел содержит платформенно-зависимую реализацию некоторых алгоритмов. В подкаталоге Win содержится такая реализация для ОС Windows.

         Подразделы Libraries, разделов Engine и Graphics подробно рассмотрены в документе RDK.StandardComponentDescription.UsersGuide.doc

1.4 Deploy

Структура каталога представлена на следующем рисунке (Рисунок 4).

RDK.FileStructure.Ru pic4

Рисунок 4 – Структура каталога Deploy

         Каталог Include, содержит подключаемые файлы RDK, в каталоге Dll – хранятся актуальные бинарные файлы динамически подключаемых библиотек, каталог Lib содержит бинарные файлы статических библиотек.

         Необходимо более подробно рассмотреть содержимое каталога Include (Рисунок 5).

На этом рисунке представлена не иерархия, а отношения между файлами. Ветви более подробно раскрывают сущность каждого узла из которого растут. Здесь и далее в случае отображения файлов будет использоваться подобная трактовка графа. Также будут опускаться заголовочные файлы. Каждый .cpp файл имеет соответствующий .h. Исключения из этого правила будут отмечены отдельно.

RDK.FileStructure.Ru pic5 

Рисунок 5 – Структура каталога Deploy/Include

        

1.4.1 myrdk.cpp

Объединяет все файлы исходных кодов, играющих вспомогательную роль в разработке ПО. Является самостоятельной частью RDK. В проект обычно подключается заголовочный файл myrdk.h и один из конечных файлов, производных от myrdk.cpp:

-       myrdk.ansi.cpp – для проектов, в стандарте ANSI;

-       myrdk.bcb.cpp – для проектов, на C++ Builder;

-       myrdk.gcc.cpp – для проектов, под Linux gcc;

-       myrdk.win.cpp – для проектов, использующих чистый Win API.

Эти файлы добавляют реализацию некоторых платформенно-зависимых функций.

1.4.2 rdk.cpp

Объединяет все файлы исходных кодов RDK, включая myrdk.cpp. В проект обычно подключается заголовочный файл rdk.h и один из конечных файлов, производных от rdk.cpp (аналогично myrdk.cpp):

-       rdk.ansi.cpp – для проектов, в стандарте ANSI;

-       rdk.bcb.cpp – для проектов, на C++ Builder;

-       rdk.gcc.cpp – для проектов, под Linux gcc;

-       rdk.win.cpp – для проектов, использующих чистый Win API.

1.4.3 rdk_init.cpp

Описывает пользовательский интерфейс RDK, в зависимости от выбранного бинарного представления, подключается не напрямую, а используются производные файлы:

-       rdk_initlib.cpp – если RDK используется как статическая библиотека,

-       rdk_initdll.cpp – если RDK используется как динамическая библиотека.

Соответствующие заголовочные файлы (rdk_initlib.h или rdk_initdll.h) обычно подключаются в конечном ПО, использующим библиотеку.

1.4.4 rdk_init_cpp.cpp

Описывает C++ пользовательский интерфейс RDK с прямым доступом к управляющему ядру. Также включает в себя описанный выше rdk_init. В зависимости от выбранного бинарного представления, подключается не напрямую, а используются производные файлы:

-       rdk_cpp_initlib.cpp – если RDK используется как статическая библиотека,

-       rdk_cpp_initdll.cpp – если RDK используется как динамическая библиотека.

Соответствующие заголовочные файлы (rdk_cpp_initlib.h или rdk_cpp_initdll.h) обычно подключаются в конечном ПО, использующим библиотеку.

1.4.5 rdk_new.cpp

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

1.4.6 rdk_exceptions.h

Существуют только платформенно-зависимые производные файла с таким именем.

Файлы содержат директивы условной компиляции, обеспечивающие перехват системных исключений. Используются для перехвата исключений в процессе счета, когда диагностика точки возникновения системного исключения средствами интерфейса затруднена. Все перехватываемые исключения заносятся в лог.

1.4.7 rdk.mod.cpp

Существуют только платформенно-зависимые производные файла с таким именем.

         Файлы содержат специфические директивы и подключаемые файлы, необходимые для использования определенных библиотек. Например rdk.mod.opencv.cpp – обеспечивает подключение библиотеки OpenCV.

         Архитектура rdk.mod в процессе разработки!

1.5 Docs

Содержит файлы документации. Полный список файлов и их описание приведены в документе: RDK.DocumentsList.doc.

1.6 GUI

Содержит платформенно зависимый пользовательский интерфейс, а также программный интерфейс с другими библиотеками. Ниже приведена структура каталога (Рисунок 6). Эта структура не является устоявшейся. В дальнейшем возможно существенное изменение содержимого каталога, его разбиение на несколько сущностей, или ликвидация.

RDK.FileStructure.Ru pic6

Рисунок 6 – структура каталога GUI

         Каталог содержит следующие разделы:

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

-       OpenCV – набор функций для преобразования изображений OpenCV во внутренний формат RDK и обратно.

-       MSVS – запланирована реализация интерфейса пользователя.

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

1.7 Samples

Примеры использования RDK. Имеют следующую структуру каталогов (Рисунок 7).

RDK.FileStructure.Ru pic7

Рисунок 7 – Примеры использования RDK

         На первом уровне примеров находятся каталоги, определяющие платформу для примеров. Все бинарные файлы примеров должны собираться в каталог RDK/Bin.

1.8 ThirdParty

Здесь находятся исходные коды сторонних разработчиков, которые используются ядром RDK (Рисунок 8).

RDK.FileStructure.Ru pic8 

Рисунок 8 – Исходные коды сторонних библиотек

В настоящее время состоит из одной библиотеки xmlParser, предоставляющей поддержку XML.

2 Правила связывания файлов исходных кодов в единую структуру

В каждом каталоге ядра RDK и каталоге ThirdParty содержится пара файлов .cpp, .h одноименных с каталогом (корневые файлы), в котором они хранятся. Единственное назначение этих файлов – включать в себя все файлы .cpp и соответственно .h, содержащиеся в этом каталоге, и также аналогичные корневые файлы своих подкаталогов. Этого правила достаточно для создания структуры файлов, в которой достаточно добавления единственной пары .cpp, .h файлов верхнего уровня (в настоящее время это rdk.h и rdk.cpp) в конечный проект для успешной сборки библиотеки.

Внимание! Для корректного подключения сторонних библиотеки при помощи файлов rdk.mod.xxx, необходимо дополнительно в настройках проекта для выбранного компилятора принудительно объявить соответствующую директиву. Так например для подключения библиотеки OpenCV в MSVS, необходимо добавить в проект файл rdk.mod.opencv.cpp, и в настройках проекта: Configuration Properties->C/C++->Preprocessor, добавить в поле Preprocessor Definitions значение RDK_OPENCV.

Внимание! Чтобы библиотека корректно обрабатывала системные исключения необходимо в случае компилятора MSVS установить следующую опцию в настройках проекта: Configuration Properties->C/C++->Code Generation->Enable C++ Exceptions в значение Yes with SEH Exceptions (/EHa).

 

Заключение

         Для дальнейшего ознакомления с процессом разработки на основе RDK рекомендуется чтение файлов:

  1. 1.Быстрый старт. Разработка конечного компонента (класса). RDK.QuickStart.ComponentDevelopment.Ru.doc
  2. 2.Быстрый старт. Разработка группы компонент (иерархии классов). RDK.QuickStart.ComponentGroupDevelopment.Ru.doc
  3. 3.Быстрый старт. Разработка библиотеки компонент (библиотека классов). RDK.QuickStart.ComponentLibraryDevelopment.Ru.doc
Разработки RDK RDK: Организация файлов