【鸿睿创智开发板试用】移植OpenCV 4到OpenHarmony 4.1

目录

目录

引言

编译系统镜像

[(1) 下载代码后解压SDK](#(1) 下载代码后解压SDK)

[(2) 下载docker镜像  ](#(2) 下载docker镜像  )

[(3) 编译OH](#(3) 编译OH)

编译OpenCV

下载OpenCV源代码

构建编译配置文件

执行编译命令

安装库和头文件

测试

结语


引言

最近有个需求是在基于RK3568的OpenHarmony 4.1系统中使用OpenCV,于是就尝试了一下OpenCV移植到OpenHarmony的工作。

我使用的开发板是深圳鸿睿创智的H01开发板,它基于RK3568芯片,其他的开发板应该都差不多,可能路径和编译参数会有小的调整。

编译系统镜像

虽然OpenCV是个应用程序库,并不需要添加到系统镜像中,不过为了和开发板镜像采用同样的工具链,最好还是先编译一下系统镜像。

我采用的步骤是厂商建议的方法,也就是利用官方提供的OpenHarmony的Docker。具体方法如下:

(1) 下载代码后解压SDK

复制代码
  tar -zxvf ohos-H01-sdk.tar.gz
  cd ohos-4.1-Release

(2) 下载docker镜像

复制代码
docker run --name SG368Z-H1 --privileged -it -v $(pwd):/home/openharmony swr.cn-south-1.myhuaweicloud.com/openharmony-docker/docker_oh_standard:3.2

(3) 编译OH

复制代码
  ./build.sh --product-name rk3568 --ccache --no-prebuilt-sdk   

注意:环境缺少python2会产生报错,需要下载python2再次执行编译命令。(pip install python2)

(4) 镜像生成路径

out/rk3568/packages/phone/images/

编译OpenCV

移植OpenCV一般有两种方法,一种是将修改OH的gn文件,将OpenCV嵌入到系统文件中一起编译,另一种是用OH的工具链独立编译OpenCV。我采用的是后一种,这种方法和在Linux下惊醒OpenCV的交叉编译是基本相同的,我比较熟悉。

代码仓采用的是OpenHarmony社区提供的代码仓:OpenHarmony-SIG/third_party_opencvhttps://gitee.com/openharmony-sig/third_party_opencv

这个仓库是基于OpenCV官方仓库4.5.5分支进行了OpenHarmony编译适配和拓展,可构建支持在OpenHarmony设备上运行的计算机视觉程序。

编译之前需要先安装cmake:

复制代码
apt install cmake

构建步骤如下:

下载OpenCV源代码

执行如下命令下载OpenCV代码到指定目录下。

复制代码
git clone https://gitee.com/openharmony-sig/third_party_opencv.git

构建编译配置文件

进入到目录"platforms/ohos",修改arm-clang.toolchain.cmake文件如下:

复制代码
set(CMAKE_CROSSCOMPILING TRUE)
set(CMAKE_SYSTEM_NAME Linux)
set(CMAKE_CXX_COMPILER_ID Clang)
SET ( CMAKE_SYSTEM_PROCESSOR arm )

SET ( CMAKE_FIND_ROOT_PATH_MODE_PROGRAM NEVER )
SET ( CMAKE_FIND_ROOT_PATH_MODE_LIBRARY ONLY )
SET ( CMAKE_FIND_ROOT_PATH_MODE_INCLUDE ONLY )

SET ( CROSS_COMPILATION_ARCHITECTURE armv7-a )

set(CMAKE_TOOLCHAIN_PREFIX llvm-)

#指定c编译工具(确保工具链所在路径已经添加到了PATH环境变量中)和编译标志,使用clang编译时标志中必须指定--target,否则无法交叉编译。
set(CMAKE_C_COMPILER clang)
set(CMAKE_C_FLAGS "--target=aarch64-linux-ohos  -D__clang__  -mfloat-abi=softfp -mfpu=neon-vfpv4 -w")
#指定c++编译工具(确保工具链所在路径已经添加到了PATH环境变量中)和编译标志,必须指定--target,否则无法交叉编译。
set(CMAKE_CXX_COMPILER clang++)
set(CMAKE_CXX_FLAGS "--target=aarch64-linux-ohos  -D__clang__  -mfloat-abi=softfp -mfpu=neon-vfpv4 -w")
#指定链接工具和链接标志,必须指定--target和--sysroot。
set(CMAKE_LINKER clang)
set(CMAKE_CXX_LINKER clang++ )
set(CMAKE_C_LINKER clang)

#指定链接库的查找路径。
set(CMAKE_SYSROOT "/home/openharmony/out/rk3568/obj/third_party/musl/")

由于我使用的是官方的Docker环境,clang编译器已经被加入PATH路径,所以这里没有指定编译器的路径。另外,SYSROOT的路径是根据我Docker的设置指定的。如果编译环境和我的配置不同,需要相应修改。

执行编译命令

执行如下命令:

复制代码
cd third_party_opencv
mkdir build
cd build
cmake -DBUILD_TESTS=ON -DCMAKE_BUILD_TYPE=Release -DWITH_CUDA=OFF -DWITH_FFMPEG=ON -DCMAKE_TOOLCHAIN_FILE=../platforms/ohos/arm-clang.toolchain.cmake ..

cmake检查系统环境后,很快会生成makefile,最后看到如下信息表示生成正确。

复制代码
........

on-sections -fdata-sections  -fvisibility=hidden -fvisibility-inlines-hidden -g  -O0 -DDEBUG -D_DEBUG
--     Linker flags (Release):      -Wl,--gc-sections -Wl,--as-needed
--     Linker flags (Debug):        -Wl,--gc-sections -Wl,--as-needed
--     ccache:                      YES
--     Precompiled headers:         NO
--     Extra dependencies:          dl m pthread rt
--     3rdparty dependencies:
--
--   OpenCV modules:
--     To be built:                 calib3d core dnn features2d flann gapi highgui imgcodecs imgproc ml objdetect photo stitching ts video videoio
--     Disabled:                    world
--     Disabled by dependency:      -
--     Unavailable:                 java python2 python3
--     Applications:                tests perf_tests apps
--     Documentation:               NO
--     Non-free algorithms:         NO
--
--   GUI:                           NONE
--     GTK+:                        NO
--
--   Media I/O:
--     ZLib:                        zlib (ver 1.2.11)
--     JPEG:                        libjpeg-turbo (ver 2.1.2-62)
--     WEBP:                        build (ver encoder: 0x020f)
--     PNG:                         build (ver 1.6.37)
--     TIFF:                        build (ver 42 - 4.2.0)
--     JPEG 2000:                   build (ver 2.4.0)
--     HDR:                         YES
--     SUNRASTER:                   YES
--     PXM:                         YES
--     PFM:                         YES
--
--   Video I/O:
--     DC1394:                      NO
--     FFMPEG:                      NO
--       avcodec:                   NO
--       avformat:                  NO
--       avutil:                    NO
--       swscale:                   NO
--       avresample:                NO
--     GStreamer:                   NO
--     v4l/v4l2:                    YES (linux/videodev2.h)
--
--   Parallel framework:            pthreads
--
--   Trace:                         YES (with Intel ITT)
--
--   Other third-party libraries:
--     Lapack:                      NO
--     Custom HAL:                  YES (carotene (ver 0.0.1))
--     Protobuf:                    build (3.19.1)
--
--   OpenCL:                        YES (no extra features)
--     Include path:                /home/openharmony/third_party_opencv/3rdparty/include/opencl/1.2
--     Link libraries:              Dynamic load
--
--   Python (for build):            /usr/bin/python2.7
--
--   Install to:                    /usr/local
-- -----------------------------------------------------------------
--
-- Configuring done
-- Generating done
-- Build files have been written to: /home/openharmony/third_party_opencv/build

然后执行如下命令开始编译:

复制代码
make -j 16

这个过程可能较长,大概半小时左右,看电脑的配置。

至此,编译成功。

安装库和头文件

最后,执行安装命令,把需要的头文件和库文件拷贝到一个目录下。

复制代码
DESTDIR=/home/openharmony/opencv4/ make install

所有需要的文件都可以在"/home/openharmony/opencv4/usr/local/"下找到。

测试

编译后就可以把文件拷贝到设备上进行测试,测试的程序为官方的opencv_version(在opencv4/usr/local/bin目录下),它依赖libopencv_core.so文件在opencv4/usr/local/lib目录下)。

在Windows的控制台使用hdc目录实现文件拷贝。

复制代码
hdc shell mount -o rw,remount /
hdc file send opencv_version /
hdc file send libopencv_core.so /

其中第一条目录是为了让设备的根目录可以写,否则会出现[Fail]Error opening file:read-only file system,path: xx 报错。

然后使用hdc shell目录登录到设备。

复制代码
# chmod +x ./opencv_version
# export LD_LIBRARY_PATH=/
# ./opencv_version
4.5.5

移植工作获得了初步成功。

结语

今天尝试了移植OpenCV 4到OpenHarmony 4.1,和Linux下交叉编译差不多,还比较顺利。后面将继续测试相关的App。

相关推荐
豆豆23 分钟前
day32 学习笔记
图像处理·笔记·opencv·学习·计算机视觉
白熊18842 分钟前
【计算机视觉】CV实战项目 - 基于YOLOv5的人脸检测与关键点定位系统深度解析
人工智能·yolo·计算机视觉
nenchoumi311944 分钟前
VLA 论文精读(十六)FP3: A 3D Foundation Policy for Robotic Manipulation
论文阅读·人工智能·笔记·学习·vln
后端小肥肠1 小时前
文案号搞钱潜规则:日入四位数的Coze工作流我跑通了
人工智能·coze
LCHub低代码社区1 小时前
钧瓷产业原始创新的许昌共识:技术破壁·产业再造·生态重构(一)
大数据·人工智能·维格云·ai智能体·ai自动化·大禹智库·钧瓷码
-曾牛1 小时前
Spring AI 快速入门:从环境搭建到核心组件集成
java·人工智能·spring·ai·大模型·spring ai·开发环境搭建
阿川20151 小时前
云智融合普惠大模型AI,政务服务重构数智化路径
人工智能·华为云·政务·deepseek
自由鬼1 小时前
开源AI开发工具:OpenAI Codex CLI
人工智能·ai·开源·软件构建·开源软件·个人开发
生信碱移2 小时前
大语言模型时代,单细胞注释也需要集思广益(mLLMCelltype)
人工智能·经验分享·深度学习·语言模型·自然语言处理·数据挖掘·数据可视化
一个数据大开发2 小时前
解读《数据资产质量评估实施规则》:企业数据资产认证落地的关键指南
大数据·数据库·人工智能