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
Обсудить на форуме (комментариев 0).
Разработки RDK RDK: Организация файлов