OpenCV многопоточный поиск в видео

156
24 июня 2019, 13:00

Написал программу на Qt с использованием OpenCV под Ubuntu которая ищет положение в видео файле по фото с экрана, к примеру. Задается путь к видео, путь к изображению после обработки выдается время в секундах.

Решил оптимизировать добавив разбиение поиска на доступные ядра процессора. Каждый поток выбирает ядро, инициализирует свой VideoCapture, начинает поиск с определенной позиции и на определенное количество кадров. Все работает правильно, в моем случае все 12 ядер загружаются на сто процентов в отличии от первой версии которая загружала одно ядро.

НО!... Поиск идет примерно в 10 раз медленнее...

С чем это может быть связано?

Answer 1

Например, узким местом может быть чтение файла. То есть 12 потоков ломятся одновременно читать что-то с диска, там это всё дело перегружает дисковый ввод-вывод и т.д.

Сразу много всего можно улучшить: если файл не очень большой, его можно мапить в память; в идеале хорошо бы, чтобы читал один VideoCapture (это достаточно быстро) и раздавал кадры потокам на обработку, т.е. придумать свою версию consumer-producer. Опять же, что там именно с потоками и как должно быть написано -- это отдельный, очень общий вопрос. Ну и само чтение кадров как ускорять -- вторая проблема получается.

READ ALSO
Опережающее объявление typedef типа

Опережающее объявление typedef типа

Есть libpq, там есть объявление:

193
Вывести массив чисел без повторений

Вывести массив чисел без повторений

Дан отсортированный по возрастанию массив C (например, {2, 2, 2, 3, 3})Нужно вывести в консоль этот же массив C без повторений (то есть должно получиться...

182
Узнать тип на этапе компиляции

Узнать тип на этапе компиляции

Можно ли определить тип переданных параметров variadic templates, на этапе компиляции?

172