一、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 的环境搭建已结束。
评论