Описание тега technique
Я строю свои собственные встроенные ОС Linux для Raspberry ПИ3, используя сборочного окружения. Эта ОС будет использована, чтобы обрабатывать несколько приложений, одно из них выполняет обнаружение объектов по OpenCV (В3.3.0).
Я начал с Raspbian Джесси + Python, но оказалось, что это занимает много времени для выполнения простой пример, поэтому я решил создать мою собственную ОСРВ с оптимизированными функциями + разработки на C++ вместо Python.
Я думал, что с этих оптимизаций 4 ядра ИРЦ + 1 ГБ оперативной памяти будет обрабатывать такие заявки. Проблема в том, что даже с этими вещами, простейших программ компьютерного зрения займет много времени.
ПК и малины ПИ3 больше
Это простая программа, которую я написал, чтобы иметь представление о порядке величины времени выполнения каждой части программы.
#включить заголовочный файл <stdio.ч>
для #Include "opencv2/ядра.ГЭС"
для #Include "opencv2/imgproc.ГЭС"
для #Include "opencv2/highgui.ГЭС"
#включить <время.ч> /* clock_t, часы, CLOCKS_PER_SEC */
используя ЧВ пространства имен;
с помощью пространства имен std;
тап_п()
{
setUseOptimized(истина);
clock_t t_access, t_proc, t_save, t_total;
// Времени доступа.
t_access = часы();
Img0 мат = imread("img0.jpg", IMREAD_COLOR);// берет ~90МС
t_access = часы() - t_access;
// Время обработки
t_proc = часы();
cvtColor(img0, img0, CV_BGR2GRAY);
размытость(img0, img0, размер(9,9));// берет ~18 мс
t_proc = часы() - t_proc;
// Экономия времени
t_save = часы();
жмурить("img1.jpg", img0);
t_save = часы() - t_save;
t_total = t_access + t_proc + t_save;
//функции printf("CLOCKS_PER_SEC = %д\н\н", CLOCKS_PER_SEC);
функции printf("(тест 0) Общее время выполнения\т %д циклов \т= %ф МС!\Н", t_total,((поплавка)t_total)*1000./CLOCKS_PER_SEC);
функции printf("---->> доступ в\т %д циклов \т= %ф МС.\Н", t_access,((поплавка)t_access)*1000./CLOCKS_PER_SEC);
функции printf("---->> обработка в\т %д циклов \т= %ф МС.\Н", t_proc,((поплавка)t_proc)*1000./CLOCKS_PER_SEC);
функции printf("---->> сохранение в\т %д циклов \т= %ф МС.\Н", t_save,((поплавка)t_save)*1000./CLOCKS_PER_SEC);
возврат 0;
}
Результаты выполнения на i7 с ПК
Результаты выполнения на Raspberry ПИ (генерируемые ОС из сборочного окружения)
Как вы можете видеть, что есть огромная разница. Мне нужно, чтобы оптимизировать каждую деталь, так что в этом примере обработка шаг происходит в "ближней" в режиме реального времени на максимум 15мс время.
На мой вопрос о:
- Как я могу оптимизировать мой ОС, так что он может обрабатывать интенсивных вычислений приложений и как может контролировать приоритеты каждой части?
- Как я могу полностью использовать 4 ядра RPI3, чтобы выполнить требования?
- Есть ли другие возможности, а не в формате OpenCV?
- Я должен использовать C вместо C++?
- Любые аппаратные улучшения, которые вы рекомендуете?