【详解】RV1106移植opencv-mobile库


文章目录


前言

硬件:瑞芯微Rv1106【Luckfox Pro\Max Pico、网线一根、USB线、摄像头
软件:ubuntu 20.4、MobaXterm、SocToolKit
编译器:arm-rockchip830-linux-uclibcgnueabihf
opencv包:本文主要是使用nihui
开发板使用镜像buildroot

一、烧入镜像

具体烧入方法

1.打开SocToolKit.exe工具、并且选择RV1106芯片

2.首先先按着板子的boot按键

3.再用usb连接好电脑和开发板【遇到过不能传输的情况,检查usb线是不是只有充电,而不能传输数据】

4.等软件识别到板子之后,把对应的镜像文件烧入

二、编译项目

1.创建项目文件



代码如下

bash 复制代码
set(CMAKE_C_COMPILER "/home/wj/toolchain/Linux/RV1106/arm-rockchip830-linux-uclibcgnueabihf/bin/arm-rockchip830-linux-uclibcgnueabihf-gcc")
set(CMAKE_CXX_COMPILER "/home/wj/toolchain/Linux/RV1106/arm-rockchip830-linux-uclibcgnueabihf/bin/arm-rockchip830-linux-uclibcgnueabihf-g++")

project(opencv-mobile-test)
cmake_minimum_required(VERSION 3.5)
set(CMAKE_CXX_STANDARD 11)

set(OpenCV_DIR "${CMAKE_CURRENT_SOURCE_DIR}/opencv-mobile-4.8.1-luckfox-pico/lib/cmake/opencv4")
find_package(OpenCV REQUIRED)
include_directories(${OpenCV_INCLUDE_DIRS})

add_executable(opencv-mobile-test main.cpp)

target_link_libraries(opencv-mobile-test ${OpenCV_LIBS})
cpp 复制代码
#include <opencv2/core/core.hpp>
#include <opencv2/highgui/highgui.hpp>
#include <opencv2/imgproc/imgproc.hpp>

#include <unistd.h>   // sleep()

int main()
{
    cv::VideoCapture cap;
    cap.set(cv::CAP_PROP_FRAME_WIDTH, 320);
    cap.set(cv::CAP_PROP_FRAME_HEIGHT, 240);
    cap.open(0);

    const int w = cap.get(cv::CAP_PROP_FRAME_WIDTH);
    const int h = cap.get(cv::CAP_PROP_FRAME_HEIGHT);
    fprintf(stderr, "%d x %d\n", w, h);

    cv::Mat bgr[9];
    for (int i = 0; i < 9; i++)
    {
        cap >> bgr[i];

        sleep(1);
    }

    cap.release();

    // combine into big image
    {
        cv::Mat out(h * 3, w * 3, CV_8UC3);
        bgr[0].copyTo(out(cv::Rect(0, 0, w, h)));
        bgr[1].copyTo(out(cv::Rect(w, 0, w, h)));
        bgr[2].copyTo(out(cv::Rect(w * 2, 0, w, h)));
        bgr[3].copyTo(out(cv::Rect(0, h, w, h)));
        bgr[4].copyTo(out(cv::Rect(w, h, w, h)));
        bgr[5].copyTo(out(cv::Rect(w * 2, h, w, h)));
        bgr[6].copyTo(out(cv::Rect(0, h * 2, w, h)));
        bgr[7].copyTo(out(cv::Rect(w, h * 2, w, h)));
        bgr[8].copyTo(out(cv::Rect(w * 2, h * 2, w, h)));

        cv::imwrite("out.jpg", out);
    }

    return 0;
}

编译完成之后会出现一个可执行文件:

三、移植

将网线连接开发板,并且确保开发板和本地电脑ubuntu处于同一网段内,我的

在电脑ubantu上使用scp传输编译处理的可执行文件opencv-mobile-test

bash 复制代码
sudo scp -r opencv-mobile-test/ root@192.168.104.114:/root/

可能会遇到的报错:Permission denied (publickey).lost connection

解决办法:sudo vi /etc/ssh/sshd_config

传输成功之后,板子上首先进入root权限 su root,输入账号root,密码root。

进入到root/目录,然后将摄像头插在板子上【注意连接处不要插反】。

四、运行文件

1.开发板连接摄像头后上电,启动后释放摄像头资源:

bash 复制代码
killall rkipc

2.运行程序

bash 复制代码
./opencv-mobile-test


可能遇到的问题:【镜像如果不是我上面的,应该有问题,我测试了aplinelinx和ubuntu镜像,结果都是输出以下结果,使用chmod +x ./opencv-mobile-test,也不能正常加载,可能测试的时候有其他问题】

解决方法:换成我推荐的镜像文件

3.输出结果

为了很好的可视化输出结果,将out.jpg发送到本地ubuntu上,使用命令:【注意替换自己IP和地址】
scp out.jpg wj@192.168.104.118:/home/wj/Desktop

五、总结

先完成opencv的移植,后续使用rknpu去实时推理摄像头图像

相关推荐
IT古董4 分钟前
【漫话机器学习系列】014.贝叶斯法则(Bayes Theorem)
人工智能·机器学习
拓端研究室1 小时前
【专题】2024年悦己生活消费洞察报告汇总PDF洞察(附原数据表)
人工智能
月眠老师2 小时前
拓展AI超级智能后的人类生活场景
人工智能·生活
是十一月末2 小时前
Opencv实现图片的边界填充和阈值处理
人工智能·python·opencv·计算机视觉
机智的叉烧3 小时前
前沿重器[57] | sigir24:大模型推荐系统的文本ID对齐学习
人工智能·学习·机器学习
凳子花❀3 小时前
强化学习与深度学习以及相关芯片之间的区别
人工智能·深度学习·神经网络·ai·强化学习
泰迪智能科技014 小时前
高校深度学习视觉应用平台产品介绍
人工智能·深度学习
盛派网络小助手5 小时前
微信 SDK 更新 Sample,NCF 文档和模板更新,更多更新日志,欢迎解锁
开发语言·人工智能·后端·架构·c#
Eric.Lee20215 小时前
Paddle OCR 中英文检测识别 - python 实现
人工智能·opencv·计算机视觉·ocr检测
cd_farsight5 小时前
nlp初学者怎么入门?需要学习哪些?
人工智能·自然语言处理