Профилирование функций C ++ OpenCV, вызываемых из кода Python - PullRequest
0 голосов
/ 01 апреля 2019

Я использую OpenCV 4.0.0 для обработки изображений с использованием привязок Python в модуле cv2.Я использовал библиотеку cProfile, которая говорит мне, что (очевидно) функции OpenCV, которые я вызываю напрямую, занимают больше всего времени, но не могут видеть глубже, потому что они вызывают функции C ++ из скомпилированной библиотеки.Я хотел бы профилировать код OpenCV, чтобы определить, какие функции занимают большую часть времени выполнения.

Я попробовал встроенное профилирование OpenCV, описанное здесь , но я получаю предупреждение

[ WARN:0] Trace: Total skipped events: 2117

и нет OpenCVTrace.txt.Я попробовал модуль "yep" на pypi , который упаковывает google-perftools, но я получаю некорректное поведение, как описано здесь , и предлагаемое исправление не работает для меня.Я пробовал ltrace и latrace, но оба, кажется, сломаны.Я не уверен, что я могу попробовать дальше или это вообще возможно.

Для справки, этот код предназначен для моего старшего дизайн-проекта в колледже.Я реализую распознавание / распознавание лиц с помощью OpenCV, работающего на процессоре ARM в Zynq-7000 SOC, а затем ускоряю узкие места с помощью матрицы FPGA.Это, конечно, зависит от возможности определения горячих точек с помощью профилирования.

1 Ответ

0 голосов
/ 08 апреля 2019

У меня был успех с инструментом perf, который позволяет мне узнать, какие функции занимают больше всего времени. В частности, на моей плате Pynq исполняемый файл находится в /usr/lib/linux-tools-4.15.0-20, который по умолчанию отсутствует в PATH. Я также использовал FlameGraph для превосходной визуализации графа вызовов.

...