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

目录

目录

引言

编译系统镜像

(1) 下载代码后解压SDK

(2) 下载docker镜像  

(3) 编译OH

编译OpenCV

下载OpenCV源代码

构建编译配置文件

执行编译命令

安装库和头文件

测试

结语


引言

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

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

编译系统镜像

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

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

(1) 下载代码后解压SDK

  tar -zxvf ohos-H01-sdk.tar.gzcd 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_opencvicon-default.png?t=O83Ahttps://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。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/bicheng/64062.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【OpenCV计算机视觉】图像处理——平滑

本篇文章记录我学习【OpenCV】图像处理中关于“平滑”的知识点,希望我的分享对你有所帮助。 目录 一、什么是平滑处理 1、平滑的目的是什么? 2、常见的图像噪声 (1)椒盐噪声 ​编辑(2) 高斯噪声 &a…

3D一览通在线协同设计,助力汽车钣金件设计与制造数字化升级

汽车行业已迎来智能化的汹涌浪潮,在此背景下,零部件制造商唯有积极应对,以智能制造为核心驱动力,方能跟上行业发展步调,在激烈的市场竞争中抢占先机。作为整车制造不可或缺的核心组件之一,汽车钣金件亦需紧…

【Leetcode】滑动窗口算法-编程苍穹下划破数据暗夜的高效光弧

前言 🌟🌟本期讲解关于滑动窗口问题~~~ 🌈感兴趣的小伙伴看一看小编主页:GGBondlctrl-CSDN博客 🔥 你的点赞就是小编不断更新的最大动力 🎆那么废话不多说直接…

【2025最新版】搭建个人博客教程

【2025最新版】搭建个人博客教程 –小记: 在搭建我的这个博客之前我在CSDN也发布过一些文章,目前应该也是几千粉丝了,但是看到别人都是用自己博客写的就感觉自己很LOW,所以就想自己来搭建一个属于自己的个人博客。当然搭建博客的…

多旋翼无人机 :桨叶设计—跷跷板结构

多旋翼无人机 :桨叶设计——跷跷板结构 前言跷跷板结构 前言 2024年11月,大疆发布了最新的农业无人机T70和T100。其中T70不同于以往的机型,在桨夹处采用了翘翘板结构,大疆将其命名为“挥舞桨叶”。 T70 无人机如下 放大其中螺旋…

力扣打卡14:多数元素

链接:169. 多数元素 - 力扣(LeetCode) 这道题正常很简单,但是如果想要完成进阶做法有点困难。我使用了O(n/2)左右的空间,使用了哈希映映射。 看了题解,有一种解法叫摩尔投票,可以解决这种问题…

MySQL八股文

MySQL 自己学习过程中的MySQL八股笔记。 主要来源于 小林coding 牛客MySQL面试八股文背诵版 以及b站和其他的网上资料。 MySQL是一种开放源代码的关系型数据库管理系统(RDBMS),使用最常用的数据库管理语言–结构化查询语言(SQL&…

JS原型及原型链

欢迎来到“雪碧聊技术”CSDN博客! 在这里,您将踏入一个专注于Java开发技术的知识殿堂。无论您是Java编程的初学者,还是具有一定经验的开发者,相信我的博客都能为您提供宝贵的学习资源和实用技巧。作为您的技术向导,我将…

List【Redis对象篇】

🏆 作者简介:席万里 ⚡ 个人网站: 文章目录 LIst1.简介2.使用场景3.常用操作1.写操作2.读操作 4.底层实现5.压缩列表的优化1.ZIPLIST结构2.ziplist更新数据3.LISTPACK优化 6.总结(重点) LIst 1.简介 Redis List是一组…

专业125+总分400+南京理工大学818考研经验南理工电子信息与通信工程,真题,大纲,参考书。

考研成功上岸,苦尽甘来,专业818信号系统与数字电路125,总分400,被南理工录取,从最早信心满满,到中期犹豫不决,到后期破釜沉舟,一路颠颠簸簸,总算坚持过来了,群…

ruoyi Cannot find module ‘@/views/system/user/index‘

Cannot find module /views/system/user/index 删除node_module 后打包成功

mall-admin-web开源项目搭建教程(图文)

本章教程,介绍如何在本地部署运行mall-admin-web这个开源项目。 开源地址:https://gitee.com/macrozheng/mall-admin-web mall-admin-web是一个电商后台管理系统的前端项目,基于Vue+Element实现。主要包括商品管理、订单管理、会员管理、促销管理、运营管理、内容管理、统计…

【计算机视觉】边缘检测

图像的边缘简单来说就是图像中灰度不连续的地方。 1.图像梯度 图像梯度是指图像像素灰度值在某个方向上的变化;图像梯度是图像的一阶导数,实际计算时可以使用差分来近似。 1.1 什么是图像梯度? 图像梯度是一种数学工具,用于描…

Microsemi Libero SoC免费许可证申请指南(Microchip官网2024最新方法)

点击如下链接: https://www.microchip.com/en-us/products/fpgas-and-plds/fpga-and-soc-design-tools/fpga/licensing 点击右侧,请求免费的License 如果提示登录,请先登录Microchip账号。 点击Request Free License。 选项一年免费的Li…

[C++]类的继承

一、什么是继承 1.定义: 在 C 中,继承是一种机制,允许一个类(派生类)继承另一个类(基类)的成员(数据和函数)。继承使得派生类能够直接访问基类的公有和保护成员&#xf…

harbor镜像仓库搭建

Harbor简介 Harbor的发展背景和现状 Harbor项目起始于2014年左右,当时正值容器技术和微服务架构迅速崛起的时期。随着越来越多的企业开始采用容器化部署应用,对于私有镜像管理的需求也日益增长。传统的解决方案要么缺乏必要的企业级特性(如访问控制、安全性和可扩展性),…

01-51单片机硬件基础

开发板介绍 学校授课用的是普中科技的EM3.V2.2开发板,没什么好说的,记着去淘宝上找原理图,别迷信课本。 网上有卖51最小系统板的,比开发板便宜,也有下载模块,可以自己搭建外围电路。 还可以自己在protue…

方法引用和lambda表达式的奥妙

方法引用替代Lambda表达式 什么情况可以使用方法引用替代lambda表达式? 下面代码中两处使用了lambda表达式,一个是filter内,一个是forEach内。其中,forEach内的lambda表达式可以被方法引用替代,但是filter内的lambda…

Android通过okhttp下载文件(本文案例 下载mp4到本地,并更新到相册)

使用步骤分为两步 第一步导入 okhttp3 依赖 第二步调用本文提供的 utils 第一步这里不做说明了,直接提供第二步复制即用 DownloadUtil 中 download 为下载文件 参数说明 这里主要看你把 destFileName 下载文件名称定义为什么后缀,比如我定义为 .mp4 下…

What is load balancing? 什么是负载均衡?

原文链接 What Is Load Balancing? | IBM 什么是负载均衡? 在多台服务器之间高效的分配网络流量的过程,以优化应用程序的可用性,同时确保积极的用户体验。 电商网站依赖负载均衡(load balancing)来确保web应用能够无…