ELVEES OpenVX SDK

Документ описывает SDK, предназначенный для разработки приложений на основе стандарта OpenVX версии 1.3.

SDK предоставляет реализацию OpenVX под СнК 1892ВМ14Я. Ключевые особенности реализации:

  • Соответствует стандарту OpenVX версии 1.3.

  • Поддерживает функциональные наборы [1]:

    • базовый для организации графовой структуры;

    • Vision, совместимый со стандартом OpenVX версии 1.1;

    • Neural Network, совместимый со стандартом OpenVX версии 1.2.

  • Проверка соответствия стандарту (OpenVX Conformance Test Suite).

  • Содержит демонстрационные примеры с открытым исходным кодом.

  • Имеет более высокую производительность по сравнению с эталонной реализацией от KhronosGroup [2].

Состав SDK:

  1. Библиотека, реализующая стандарт OpenVX. Бинарные артефакты библиотеки OpenVX распространяются в образе SD-карты Buildroot Linux для 1892ВМ14Я версии 2.9 и выше.

  2. Заголовочные файлы OpenVX версии 1.3.

  3. Исходные коды демонстрационных примеров openvx_demo, а также их бинарные артефакты в составе образа SD-карты.

  4. Тесты соответствия стандарту OpenVX Conformance Test Suite (OpenVX CTS) 1.3.

Полный набор пакетов Buildroot, из которых состоит SDK, перечислен в таблице Таблица 9.

Таблица 9 Артефакты библиотеки OpenVX

Пакет

Описание

Лицензия

openvx-headers

Заголовочные файлы стандарта OpenVX версии 1.3

MIT

openvx

Библиотека, предоставляющая функционал OpenVX

openvx-demo

Демонстрационные примеры OpenVX

openvx-cts

Тесты OpenVX CTS версии 1.3

Apache License 2.0

Запуск тестов OpenVX CTS

Запуск тестов OpenVX CTS осуществляется с помощью исполняемого файл vx_test_conformance. Для тестов используются тестовые данные из директории /usr/share/cts/test_data и библиотеки OpenVX.

Пример запуска тестов

  1. Подать питание на модуль, дождаться загрузки ОС и подключиться по терминалу к модулю (подробнее см. Запуск модуля).

  2. Запустить исполняемый файл:

    vx_test_conformance
    
  3. Дождаться окончания прохождения тестирования (около 30 минут).

  4. Убедиться, что отчёт прохождения тестов не содержит ошибок и его окончание выглядит следующим образом:

    [ ======== ]
    [ ALL DONE ] 7042 test(s) from 75 test case(s) ran
    [ PASSED   ] 7042 test(s)
    [ FAILED   ] 0 test(s)
    [ DISABLED ] 8190 test(s)
    
    =================================
    OpenVX Conformance report summary
    =================================
    
    To be conformant to the OpenVX baseline, 5862 required test(s) must pass. 5862 tests passed, 0 tests failed. PASSED.
    To be conformant to the Neural Network extension, 1180 required test(s) must pass. 1180 tests passed, 0 tests failed. PASSED.
    To be conformant to the Vision conformance profile, 6167 required test(s) must pass. 6167 tests passed, 0 tests failed. PASSED.
    To be conformant to the Neural Networks conformance profile, 1180 required test(s) must pass. 1180 tests passed, 0 tests failed. PASSED.
    Note: The 8190 disabled tests are optional and are not considered for conformance.
    
    #REPORT: 20200922123136 ALL 16499 8190 7042 7042 7042 0 (version 1.3)
    

Запуск демонстрационных примеров

Полный список демонстрационных примеров представлен в таблице Таблица 10. Для работы с изображениями используется формат PNG, с видео — YUV4MPEG2.

Таблица 10 Список демонстрационных примеров

Артефакт

Описание

Параметры командной строки

sampleCannyEdgeDetector

Детектор границ Канни

входное изображение, выходное изображение

sampleColorCorrection

Коррекция цвета изображения

входное изображение, выходное изображение

sampleFastCorners

Детектор углов

входное изображение, выходное изображение

sampleGaussianFiltering

Размытие Гауссовым окном размера 3x3

входное изображение, выходное изображение

sampleGaussianPyramid

Построение 4-х уровневой пирамиды изображений

входное изображение, 4 выходных изображения

sampleHarrisCorners

Детектор углов Харриса

входное изображение, выходное изображение

sampleMaskMake

Комбинированный алгоритм: гауссово размытие окном 3x3, пороговая фильтрация, эрозия

входное изображение, выходное изображение

sampleMedianFiltering

Медианная фильтрация окном 3x3

входное изображение, выходное изображение

sampleMinMaxLoc

Определение позиций максимального и минимального значений на изображении

входное изображение, выходное изображение

sampleMorphology

Морфологические алгоритмы, размер окна 3x3

входное изображение, выходное изображение эрозии, выходное изображение дилатации

sampleNoiseSuppression

Подавление шума с помощью аккумулирования серии изображений

первое входное изображение серии, выходное изображение

sampleObjectCut

Вырезание объекта по порогу

входное изображение, выходное изображение

sampleOpticalFlowPyrLK

Определение оптического потока

входное изображение, сгенерированное смещённое изображение, выходное изображение

sampleSharpnessFiltering

Увеличение резкости, используется лапласиан 3x3

входное изображение, выходное разностное изображение, выходное изображение

sampleTemplate

Пример чтения/записи изображений

входное изображение, выходное изображение

sampleTranspose

Поворот на 90 градусов и горизонтальное отражение

входное изображение, выходное изображение

sampleVideo

Пример чтения/записи видео файла

входное видео, выходное видео

sampleVideoCanny

Детектор границ Канни

входное видео, выходное видео

sampleVideoColorCorrection

Коррекция цвета видео

входное видео, выходное видео

sampleVideoFastCorners

Детектор углов на видео

входное видео, выходное видео

sampleVideoGaussianFiltering

Размытие Гауссовым окном размера 3x3

входное видео, выходное видео

sampleVideoMedian

Медианная фильтрация окном 3x3

входное видео, выходное видео

sampleVideoMinMaxLoc

Определение позиций максимального и минимального значений на видео

входное видео, выходное видео

sampleVideoMorphology

Морфологический алгоритм (эрозия), размер окна 3x3

входное видео, выходное видео

sampleVideoObjectCut

Вырезание объекта по порогу

входное видео, выходное видео

sampleVideoTranspose

Поворот на 90 градусов и горизонтальное отражение видео

входное видео, выходное видео

Пример запуска демонстрационного примера

  1. Подать питание на модуль, дождаться загрузки ОС и подключиться по терминалу к модулю (подробнее см. Запуск модуля).

  2. Сгенерировать изображение разрешением 1280x720:

    ffmpeg -f lavfi -i "testsrc=size=1280x720" -frames 1 image.png
    
  3. Запустить пример sampleCannyEdgeDetector:

    sampleCannyEdgeDetector image.png out.png
    

    Примерный вывод программы:

    Read from "image.png"
    Processing CannyEdgeDetector...
    Write to "out.png"
    Frames counter 1, time spent 1057113088, avg 1057113088
    Done!
    

    Файл out.png будет содержать обработанное изображение.

  4. Сгенерировать 10-ти секундное видео разрешением 640x480:

    ffmpeg -f lavfi -i "life=s=640x480:mold=10:ratio=0.1:death_color=#C83232:life_color=#00ff00" -pix_fmt yuv420p -t 10 life.y4m
    
  5. Запустить пример sampleVideoCanny:

    sampleVideoCanny life.y4m out.y4m
    

    Вывод будет следующим:

    Processing video with CannyEdgeDetector...
    Frames counter 250, time spent 34454470912, avg 137817883
    Done!
    

    Файл out.y4m будет содержать результат обработки видео.

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

Разработка приложений на базе SDK

Инструкция предназначена для разработки приложений, использующих API стандарта OpenVX версии 1.3.

  1. Создать пакет Buildroot [3], см., например, openvx-demo.

  2. Подключить заголовочные файлы и указать зависимости в скриптах сборки, см., например, openvx-demo.

  3. Пересобрать Buildroot и образ SD-карты.

  4. Проверить работоспособность библиотеки и приложений, см., например, два предыдущих раздела.