S32V APEX-CV 环境搭建

一、S32V APEX-CV 简介

在S32V中,我们常用的 OpenCV函数被封装为了APEX-CV Library,包括APEX-CV Base Library 和 APEX-CV Pro Library,每个操作以类的形式提供使用,使开发人员可以设计自己的视觉图像应用程序,同时运用 S32V APEX 架构来并行处理影像,例如图像二值化和高斯滤波等。


二、S32 Design Studio 的安装

为了获取 APEX-CV Library 和 APU_TOOLS 工具(编译 APEX-CV 应用程序所需工具),我们需要安装 NXP S32 Design Studio 软件,此软件拥有 Windows 和 Linux 版本。

下载地址:https://nxp.flexnetoperations.com/control/frse/download?agree=Accept&element=9808237



在这里,我们下载 Linux 版本,即:S32DS Vision Linux v2018.R1 ,点击下载之后,NXP 会向您的邮箱发送激活码,用于激活S32 Design Studio 软件。软件下载完成后拷贝至 Linux 系统中,使用以下命令进行软件的安装:
sudo ./ S32DS_Vision_Linux_v2018.R1_b181126.bin

安装完成后 S32DS_Vision_v2018.R1 文件夹:


S32V234_SDK 和 APU_TOOLS 在 S32DS_Vision v2018.R1 --> S32DS 中:



S32DS_Vision v2018.R1 提供的 S32V234_SDK 为 1.2 版本,为旧版本,需要更换为 1.3 版本,我们可下载 S32V234_SDK 1.3 替代 S32V234_SDK 1.2 ,S32V234_SDK 1.3 可在 VisionSDK 1.3 获取。

VisionSDK 1.3 下载地址:https://nxp.flexnetoperations.com/control/frse/download?agree=Accept&element=10595057

VisionSDK 1.3 也分 Windows 和 Linux 版本,在这里,我们下载 Linux 版本,即:VisionSDK_S32V_RTM 1.3.0.bin .


使用以下命令进行 VisionSDK_S32V_RTM 1.3.0.bin 的安装:
sudo ./ VisionSDK_S32V2_RTM_1_3_0.bin

安装完成后,将安装文件夹内的 s32v234_sdk 替换掉 S32DS_Vision_v2018.R1 内的 s32v234_sdk ,也可保存在自己的工作文件夹 workspace 内。

三、S32V APEX-CV 环境搭建

1. 进入 s32v234_sdk --> demos --> apexcv_base , 拷贝一个副本并命名,例如 apexcv_simple --> apexcv_ScharrX .
  

2. 进入 apexcv_ScharrX 文件夹,打开 Build.mk ,添加程序所需要的APEX-CV API的链接库的路径。APEX-CV 链接库存放在 s32v234_sdk --> libs 中。

          




注意:一般也需要添加相应的 OpenCV 链接库,在 ARM_LDOPTS 添加库名称。如果没有 “ARM_LDOPTS+= ” , 可自己创建。


3. 进入 apexcv_ScharrX --> build-v234ce-gnu-linux-d ,创建一个编译脚本 make.sh .
touch make.sh



打开 make.sh
gedit make.sh

输入以下内容,实际编译器路径需自己指定。其中 APU_TOOLS 为前面我们安装 S32DS Vision Linux v2018.R1 软件内的 APU_TOOLS 工具的路径。

#!/bin/sh

export ARCH=arm64

export PATH=/home/jaylen/myworkspace/gcc-toolchain/bin/:$PATH

export CROSS_COMPILE=aarch64-linux-gnu-

export LINUX_S32V234_DIR=/home/jaylen/myworkspace/s32v234/linux/

export UBOOT_S32V234_DIR=home/jaylen/myworkspace/s32v234/u-boot/

export APU_TOOLS=/home/jaylen/NXP/APU_Compiler_v1.0/

make clean

make -j4 APU_COMP=nxp allsub



赋予 make.sh 执行权限
sudo chmod 777 make.sh

在编译之前,您需要先编写 APEX-CV 的应用程式代码,应用程式代码在 apexcv_ScharrX --> src 中的 main.cpp 进行编写。


以下为本次教程的应用程式代码,您可以参考并修改:

#ifndef APEX2_EMULATE

#include "apex.h"

#else

#include "acf_lib.hpp"

#endif

 

#include

#include

#include

#include

 

#include

#include

#include <opencv2/opencv.hpp>

 

#ifdef __STANDALONE__

    #include "frame_output_dcu.h"

#else

    #include "frame_output_v234fb.h"

#endif

#define CHNL_CNT io::IO_DATA_CH3

using namespace std;

using namespace apexcv;

using namespace cv;

 

void VKUMat2CVMat(vsdk::UMat src, cv::Mat& dst);

int main()

{

#ifdef __STANDALONE__

     io::FrameOutputDCU output(1280, 720,  io::IO_DATA_DEPTH_08, CHNL_CNT);

#else

     io::FrameOutputV234Fb output(1280, 720, io::IO_DATA_DEPTH_08, CHNL_CNT);

#endif

 

    

     apexcv::ScharrXFilter scharrX;

     APEX_Init();

    

     vsdk::UMat src = cv::imread("/home/root/myworkspace/gray.png",0).getUMat(cv::ACCESS_READ);

     if(src.empty())

     {

            cout << "can't open the src image!" << endl;

            return -1;

     }

 

     cout << "src image channels:" << src.channels() << endl;

 

     vsdk::UMat dst = vsdk::UMat(src.rows, src.cols, VSDK_CV_16SC1);

     scharrX.Initialize(src, 5, dst);

     scharrX.Process();

     cv::normalize((cv::UMat)dst, (cv::UMat)dst, 0, 255, CV_MINMAX);

     cv::Mat cdst;

     VKUMat2CVMat(dst, cdst);      

     cdst.convertTo(cdst, CV_8UC1);

 

     vsdk::UMat output_umat = vsdk::UMat(720, 1280, VSDK_CV_8UC3);

    {

       cv::Mat output_mat = output_umat.getMat(ACCESS_WRITE | OAL_USAGE_CACHED);

      memset(output_mat.data, 0, 720 * 1280 * 3);

 

      // Init RGB arrays

      cv::UMat srcRGB(256, 256, CV_8UC3);

       cv::UMat dstRGB(256, 256, CV_8UC3);

 

      // Convert the result into RGB arrays

      cvtColor((cv::UMat)src, srcRGB, CV_GRAY2RGB);

       cvtColor(cdst, dstRGB, CV_GRAY2RGB);

 

      // Copy RGB arrays into output buffer

      srcRGB.copyTo(output_mat(cv::Rect(0, 300, 256, 256)));

       dstRGB.copyTo(output_mat(cv::Rect(300, 300, 256, 256)));

 

    }

     cv::imwrite("ScharrXFilter.png", (cv::UMat)output_umat);

    output.PutFrame(output_umat);

 

     return 0;

}

void VKUMat2CVMat(vsdk::UMat src, cv::Mat& dst)

{

     vsdk::Mat Mat = src.getMat(OAL_USAGE_CACHED);

     dst = ((cv::Mat)Mat).clone();

}



4. 编写好应用程式代码后,执行 make.sh 开始编译程序。
sudo ./make.sh



最终生成的 ScharrX.elf 可执行文件,如 ScharrX.elf 没有执行权限,可使用以下命令为 ScharrX.elf 添加执行权限:
sudo chmod 777 ScharrX.elf



将 ScharrX.elf 放到 S32V234 开发板中执行,执行结果如下:


至此,S32V APEX-CV 的环境搭建已结束。

★博文内容均由个人提供,与平台无关,如有违法或侵权,请与网站管理员联系。

★文明上网,请理性发言。内容一周内被举报5次,发文人进小黑屋喔~

评论