# 接口

## 编译 OpenCV 4.5.5 并将其合并到您的框架中

1. 使用 Yocto 工作流同步和编译最新的 Qualcomm Linux 软件发布版本，
[如 Qualcomm Linux 编译指南](https://docs.qualcomm.com/bundle/publicresource/topics/80-70015-254/) 中所述。

Note

在运行 SSH 命令之前，请确保按照 [Qualcomm Linux 编译指南](https://docs.qualcomm.com/bundle/publicresource/topics/80-70015-254/) 的
[如何使用 SSH](https://docs.qualcomm.com/bundle/publicresource/topics/80-70015-254/how_to.html#use-ssh) 部分中的步骤，在 Permissive 模式下启用 SSH
2. 烧写最新的 Qualcomm Linux 软件发行版本，
[如 Qualcomm Linux 编译指南](https://docs.qualcomm.com/bundle/publicresource/topics/80-70015-254/) 中所述。
3. 要启用 **tests** 包，将 `PACKAGECONFIG` 中的
`tests` 添加到
`<workspace>/layers/meta-openembedded/meta-oe/recipes-support/opencv/opencv_4.5.5.bb`
配方文件中，如下所示。

PACKAGECONFIG ??= "gapi python3 eigen jpeg png tiff v4l libv4l samples tbb gphoto2 tests \
        ${@bb.utils.contains("DISTRO_FEATURES", "x11", "gtk", "", d)} \
        Copy to clipboard

**库和测试程序**

默认情况下，只有编译版本中显示为测试 bin 的库会被清理。

1. 要保留测试 bin，在
`<workspace>/meta-openembedded/meta-oe/recipes-support/opencv/opencv_4.5.5.bb` 配方文件中添加以下代码：

RM_WORK_EXCLUDE += "opencv"
        Copy to clipboard
2. 当版本已经被编译过了，必须在重新编译之前清理 OpenCV。
要清理 OpenCV，运行以下命令：

bitbake -fc cleanall opencv
        Copy to clipboard

    在编译过程中，不会修改任何代码；因此直接编译不会生成相应的 bin。
3. 要编译 OpenCV，运行以下命令：

bitbake opencv
        Copy to clipboard

库的路径为 `/tmp-glibc/sysroots-components/armv8-2a/opencv/usr/lib/`。

Bin 的路径为 `/tmp-glibc/work/armv8-2a-qcom-linux/opencv/4.5.5-r0/build/bin/`。

## 测试

要调用 OpenCV API，原生 OpenCV 测试示例可以参考示例程序。使用以下步骤调用 Snapdragon 设备上的应用程序。
完整地编译镜像以确保所有库都是应用程序镜像的一部分。

1. 按照 [Qualcomm Linux 编译指南](https://docs.qualcomm.com/bundle/publicresource/topics/80-70015-254/) 的描述在设备上烧写镜像。

    OpenCV 库位于设备上的 `/usr/lib`。
2. 对于测试数据，请使用 Git clone 位于 [https://github.com/opencv/opencv_extra/tree/4.5.5](https://github.com/opencv/opencv_extra/tree/4.5.5) 的项目。
3. 为了避免在尝试将测试数据和 bin 推送到设备时出现只读错误，使用设备的 IP 地址登录 SSH 终端，并运行以下命令重新挂载设备。

mount -o remount,rw /
        Copy to clipboard
4. 使用 `scp` 命令将测试数据推送到首选主机。

    例如： `scp -r [file] root@[IP-ADDR]:/tmp`
5. 使用 `scp` 命令将所需的测试 bin 推送到 `/usr/bin`。

    例如： `scp -r [test] root@[IP-ADDR]:/usr/bin/`
6. 在主机上执行以下命令：

scp -r tmp-glibc/sysroots-components/armv8-2a/opencv/usr/lib/libopencv_ts.so root@[IP-ADDR]:/usr/lib/
        scp -r tmp-glibc/sysroots-components/armv8-2a/opencv/usr/lib/libopencv_ts.so.4.5.5 root@[IP-ADDR]:/usr/lib/
        scp -r tmp-glibc/sysroots-components/armv8-2a/opencv/usr/lib/libopencv_ts.so.405 root@[IP-ADDR]:/usr/lib/
        Copy to clipboard
7. 登录 SSH 终端并运行以下命令。

chmod 777 /usr/bin/<opencv_test_bin>
        root@qcm6490:~# cd /usr/bin
        export OPENCV_LOG_LEVEL=DEBUG
        export OPENCV_VIDEOIO_DEBUG=1
        export OPENCV_TEST_DATA_PATH=/tmp
        ./<opencv_test_bin> --gtest_output=json:/tmp/results.json --gtest_also_run_disabled_tests
        exit
        Copy to clipboard

    结果存储在 `/tmp/results.json`。
要更改结果文件名，请修改
`--gtest_output=json:/tmp/results.json` 参数。

Last Published: Dec 10, 2024

[Previous Topic
概述](https://docs.qualcomm.com/bundle/publicresource/80-70015-21SC/topics/overview.md) [Next Topic
示例程序](https://docs.qualcomm.com/bundle/publicresource/80-70015-21SC/topics/samples.md)