分析从 Python 代码调用的 C++ OpenCV 函数

Profiling C++ OpenCV functions being called from Python code

我正在使用 OpenCV 4.0.0 使用 cv2 模块中的 Python 绑定进行图像处理。我使用了 cProfile 库,它告诉我(很明显)我直接调用的 OpenCV 函数占用的时间最多,但无法深入了解,因为它们是从已编译的库中调用 C++ 函数。我想分析 OpenCV 代码以确定哪些函数占用了大部分执行时间。

我已尝试 here 中描述的内置 OpenCV 分析,但我收到警告

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

没有 OpenCVTrace.txt。我已尝试 "yep" module on pypi which wraps google-perftools, but I get buggy behavior as described here,建议的修复对我不起作用。我试过 ltrace 和 latrace,但似乎都坏了。我不确定接下来可以尝试什么,或者这是否是一项可能的任务。

对于某些背景,此代码适用于我在大学的高级设计项目。我正在 Zynq-7000 SOC 的 ARM 处理器上使用 OpenCV 运行 实现面部 detection/recognition,然后使用 FPGA 结构加速瓶颈。这当然取决于能够通过分析识别热点。

我使用 perf 工具取得了成功,它让我知道哪些功能花费的时间最多。特别是在我的 Pynq 板上,可执行文件位于 /usr/lib/linux-tools-4.15.0-20 中,默认情况下它不在 PATH 中。我还使用 FlameGraph 来实现调用图的出色可视化。