【详解】RV1106移植opencv-mobile库

news/2024/7/8 2:23:03 标签: opencv, 人工智能, 计算机视觉

文章目录

  • 前言
  • 一、烧入镜像
  • 二、编译项目
    • 1.创建项目文件
  • 三、移植
  • 四、运行文件
  • 五、总结


前言

硬件:瑞芯微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.创建项目文件

在这里插入图片描述
在这里插入图片描述
代码如下

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})

在这里插入图片描述

#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

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.开发板连接摄像头后上电,启动后释放摄像头资源:

killall rkipc

在这里插入图片描述

2.运行程序

./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去实时推理摄像头图像


http://www.niftyadmin.cn/n/5536255.html

相关文章

python 发布应用程序包

文章目录 发布python包toml配置文件构建发布python包 官方文档参考 将自己的python项目发布成源码包或者wheel二进制包,供其他开发者使用。 方式: 使用py工具; distutils,该工具的使用已过时;setuptools,常用方式;wheel,在setuptools的基础上添加了 bdist_wheel, …

关于Ubuntu系统中.config文件夹如何找到

Ubuntu中QT项目使用了setting保存配置&#xff0c;但是找不到配置文件保存了在哪里&#xff0c;找了一下&#xff1a; 因为QT里取的名字是&#xff1a; 于是下载everything搜索Nio&#xff0c;发现目录为/home/nio/.config 虽然已经下载了everything找到了&#xff0c;但是发现…

Air系列4G模块AT版本如何使用HTTP

HTTP应用的基本流程如下&#xff1a; 1、激活PDP 2、初始化HTTP服务 3、设置HTTP会话参数 4、如果要支持SSL&#xff0c;配置SSL参数 5、如果使用POST命令&#xff0c;输入POST数据 6、发起HTTP请求 7、收到HTTP应答&#xff0c;读取应答数据 8、终止HTTP服务 注意&#xff1a;…

idea删除分支并同步到gitLab以及gitLab上的分支删除

目录 idea删除分支并同步到gitLab 方法一&#xff08;推荐&#xff09; 方法二&#xff08;命令行&#xff09; gitLab上的分支删除 前言-与正文无关 ​ 生活远不止眼前的苦劳与奔波&#xff0c;它还充满了无数值得我们去体验和珍惜的美好事物。在这个快节奏的世界中&…

HTML5 WebSocket技术使用详解

HTML5 WebSocket API 提供了一种在单个连接上进行全双工通信的方式。这意味着客户端和服务器可以同时发送和接收数据&#xff0c;而不需要像传统的 HTTP 请求那样进行多次请求和响应的轮询。WebSocket 允许更实时的交互&#xff0c;非常适合需要快速、连续数据交换的应用场景&a…

深入浅出mysql分库分表

文章目录 为什么要分库分表&#xff1f;什么场景下才需要分库分表&#xff1f;1. 数据量增长导致数据量过大--分表2. 高并发访问--分库3. 地理分散的业务--分库 分库分表的区别分库&#xff08;Database Sharding&#xff09;分表&#xff08;Table Partitioning&#xff09; 垂…

Spring Boot在java领域中有哪些优势

哈喽&#xff0c;大家好呀&#xff0c;淼淼又来和大家见面啦&#xff0c;随着云计算、微服务架构的兴起&#xff0c;Java开发领域迫切需要一套高效、灵活且易于上手的框架来应对日益复杂的业务需求。正是在这样的背景下&#xff0c;Spring Boot应运而生&#xff0c;以其独特的魅…

67、基于长短期记忆网络的心电图(ECG)信号分类(matlab)

1、基于长短期记忆网络的心电图(ECG)信号分类原理及流程 基于长短期记忆网络&#xff08;LSTM&#xff09;的心电图&#xff08;ECG&#xff09;信号分类通常用于分析和识别心脏方面的问题&#xff0c;如心律失常。下面是基于LSTM的ECG信号分类的原理和流程&#xff1a; 原理…