29 Star 139 Fork 226

Ascend/mindsdk-referenceapps

加入 Gitee
与超过 1200万 开发者一起发现、参与优秀开源项目,私有仓库也完全免费 :)
免费加入
文件
克隆/下载
贡献代码
同步代码
取消
提示: 由于 Git 不支持空文件夾,创建文件夹后会生成空的 .keep 文件
Loading...
README

OpenCV 插件

1. 介绍

本代码仓插件实现了opencv的抠图和缩放功能。
抠图: 支持根据目标检测的(x,y)坐标和(width,height)宽高进行图像裁剪(抠图)。
缩放: 对解码后的YUV格式以及BGR格式的图像进行指定宽高的缩放。

1.1 支持的产品

本项目以昇腾Atlas310卡为主要的硬件平台。

1.2 支持的版本

支持的SDK版本为 2.0.4, CANN 版本为 5.0.4。

1.3 软件方案介绍

本项目包含两个功能,即抠图与缩放。

1.3.1 抠图

整体业务流程为:待检测图片通过 appsrc 插件输入,然后使用图像解码插件 mxpi_imagedecoder 对图片进行解码,再通过图像抠图插件 OpenCVPlugin进行将图片抠图(其前后可接其他插件)。最后通过输出插件 appsink 获取结果,并在外部进行可视化,将结果标记到原图上,本系统的各模块及功能描述如表1所示:

表1 系统方案各模块功能描述:

序号 子系统 功能描述
1 图片输入 获取 jpg 格式输入图片
2 图片解码 解码图片
3 其他插件 其他插件的功能
4 抠图 对输入图片进行抠图
5 其他插件 其他插件的功能
6 结果输出 获取检测结果
7 结果可视化 将结果保存

1.3.2 缩放

整体业务流程为:待检测图片信息经预处理后通过 appsrc 插件输入,然后使用图像解码插件 mxpi_imagedecoder 对图片进行解码,再通过图像缩放插件 OpenCVPlugin进行对图片进行缩放(其前后可接其他插件)。最后通过输出插件 appsink 获取检测结果,并在外部进行可视化,将结果标记到原图上,本系统的各模块及功能描述如表2所示:

表2 系统方案各模块功能描述:

序号 子系统 功能描述
1 图片输入 获取 jpg 格式输入图片
2 图片解码 解码图片
3 其他插件 其他插件的功能
4 缩放 对输入图片进行缩放
5 其他插件 其他插件的功能
6 结果输出 获取检测结果
7 结果可视化 将结果保存

1.4 代码目录结构与说明

本工程名称为OpenCVPlugin,工程目录如下所示:

.
├── image
│   ├── pipeline.jpg
├── OpenCVPlugin
│   ├──lib (编译后生成)
│   ├──src
│   │   ├──OpenCVPlugin
│   │       ├── CMakeLists.txt
│   │       ├── OpenCVPlugin.cpp
│   │       └── OpenCVPlugin.h
├── python
│   ├── main.py
│   └── test.pipeline
├── build.sh
└── README.md

1.5 技术实现流程图

OpenCVPlugin 插件流程图。


1.6 适用场景

输入:metadata(数据类型“MxpiVisionList”)
输出:metadata(数据类型“MxpiVisionList”)

静态输入:{"image/yuv","image/rgb"}
静态输出:{"image/rgb"}

2 环境依赖

推荐系统为ubuntu 18.04,环境依赖软件和版本如下表:

软件名称 版本
cmake 3.5+
Vision SDK 2.0.4
python 3.9.2

确保环境中正确安装Vision SDK。

在编译运行项目前,需要设置环境变量:

Vision SDK 环境变量:

. ${SDK-path}/set_env.sh

CANN 环境变量:

. ${ascend-toolkit-path}/set_env.sh
  • 环境变量介绍
SDK-path: Vision SDK 安装路径
ascend-toolkit-path: CANN 安装路径

3 属性介绍

3.1 抠图功能的pipeline属性

序号 属性 描述 是否为必选项 是否可修改
1 option 插件功能选择,此处使用"crop"
2 startRow 抠图选定区域的开始纵坐标, 默认为"0",取值为0~原图高
3 startCol 抠图选定区域的开始横坐标, 默认为"0" ,取值为0~原图宽
4 Height 抠图选定区域的高,默认为"256" ,取值为1~原图高,且必须为2的倍数
5 Width 抠图选定区域的宽,默认为"256" ,取值为1~原图宽,且必须为16的倍数
6 outputDataFormat 插件输出的数据格式,可选值为"RGB" "BGR" "YUV"
7 dataType 插件输出的数据类型,可选值为"uint8"和"float32",默认为“uint8”

注:如果抠图的尺寸大于原图尺寸,插件会补边,出现绿色边框。

3.2 缩放功能的pipeline属性

序号 属性 描述 是否为必选项 是否可修改
1 option 插件功能选择,此处使用"resize"
2 height 缩放后的高度, 默认为"256",取值为1~8192,必须为2的倍数
3 width 缩放后的宽度, 默认为"256",取值为1~8192,必须为16的倍数
4 fx width方向缩放比例,默认为"0",取值为0~1
5 fy height方向缩放比例,默认为"0",取值为0~1
6 interpolation 图片插值方式,默认为"1",取值为0~4
7 outputDataFormat 插件输出的数据格式,可选值为"RGB" "BGR" "YUV"
8 dataType 插件输出的数据类型,可选值为"uint8"和"float32",默认为“uint8”

注:fx和fy参数在height与width参数被赋值时失效,如有需要,可自行更改插件代码中resize部分。

插值方式的取值具体描述:

interpolation选项 插值方式 int值
INTER_NEAREST 最近邻插值 0
INTER_LINEAR 双线性插值(默认) 1
INTER_CUBIC 基于4*4像素领域的3次插值法 2
INTER_AREA 使用像素区域关系进行重采样 3
INTER_LANCZOS4 8x8像素邻域的Lanczos插值 4

4. 编译与运行

步骤1 修改CMakeLists.txt文件

15行 将“/usr/local/Ascend/ascend-toolkit/latest/runtime/include”替换为实际include路径。

步骤2 编译

进入到主路径:

bash build.sh

步骤3 运行

在main.py所在目录上传图片命名为"person.jpg",可通过修改pipeline文件选择相应的功能。

python3 main.py

注:插件输出宽高分别需要16、2对齐。
插件使用YUV格式输出时,将main.py 87、89、91行保持注释;94、95行注释打开。 同时将下游插件的"cvProcessor"属性删除。
插件使用RGB格式输出时,将main.py 87、89行注释打开;91、94、95行保持注释。
插件使用BGR格式输出时,将main.py 87、91行注释打开;89、94、95行保持注释。
插件输出为float32格式时,打开85行,注释86行。
插件输出为uint8时,打开86行,注释85行。

马建仓 AI 助手
尝试更多
代码解读
代码找茬
代码优化
C++
1
https://gitee.com/ascend/mindsdk-referenceapps.git
git@gitee.com:ascend/mindsdk-referenceapps.git
ascend
mindsdk-referenceapps
mindsdk-referenceapps
master

搜索帮助