本代码仓插件实现了opencv的抠图和缩放功能。
抠图:
支持根据目标检测的(x,y)坐标和(width,height)宽高进行图像裁剪(抠图)。
缩放:
对解码后的YUV格式以及BGR格式的图像进行指定宽高的缩放。
本项目以昇腾Atlas310卡为主要的硬件平台。
支持的SDK版本为 2.0.4, CANN 版本为 5.0.4。
本项目包含两个功能,即抠图与缩放。
整体业务流程为:待检测图片通过 appsrc 插件输入,然后使用图像解码插件 mxpi_imagedecoder 对图片进行解码,再通过图像抠图插件 OpenCVPlugin进行将图片抠图(其前后可接其他插件)。最后通过输出插件 appsink 获取结果,并在外部进行可视化,将结果标记到原图上,本系统的各模块及功能描述如表1所示:
表1 系统方案各模块功能描述:
序号 | 子系统 | 功能描述 |
---|---|---|
1 | 图片输入 | 获取 jpg 格式输入图片 |
2 | 图片解码 | 解码图片 |
3 | 其他插件 | 其他插件的功能 |
4 | 抠图 | 对输入图片进行抠图 |
5 | 其他插件 | 其他插件的功能 |
6 | 结果输出 | 获取检测结果 |
7 | 结果可视化 | 将结果保存 |
整体业务流程为:待检测图片信息经预处理后通过 appsrc 插件输入,然后使用图像解码插件 mxpi_imagedecoder 对图片进行解码,再通过图像缩放插件 OpenCVPlugin进行对图片进行缩放(其前后可接其他插件)。最后通过输出插件 appsink 获取检测结果,并在外部进行可视化,将结果标记到原图上,本系统的各模块及功能描述如表2所示:
表2 系统方案各模块功能描述:
序号 | 子系统 | 功能描述 |
---|---|---|
1 | 图片输入 | 获取 jpg 格式输入图片 |
2 | 图片解码 | 解码图片 |
3 | 其他插件 | 其他插件的功能 |
4 | 缩放 | 对输入图片进行缩放 |
5 | 其他插件 | 其他插件的功能 |
6 | 结果输出 | 获取检测结果 |
7 | 结果可视化 | 将结果保存 |
本工程名称为OpenCVPlugin,工程目录如下所示:
.
├── image
│ ├── pipeline.jpg
├── OpenCVPlugin
│ ├──lib (编译后生成)
│ ├──src
│ │ ├──OpenCVPlugin
│ │ ├── CMakeLists.txt
│ │ ├── OpenCVPlugin.cpp
│ │ └── OpenCVPlugin.h
├── python
│ ├── main.py
│ └── test.pipeline
├── build.sh
└── README.md
OpenCVPlugin 插件流程图。
输入:metadata(数据类型“MxpiVisionList”)
输出:metadata(数据类型“MxpiVisionList”)
静态输入:{"image/yuv","image/rgb"}
静态输出:{"image/rgb"}
推荐系统为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 安装路径
序号 | 属性 | 描述 | 是否为必选项 | 是否可修改 |
---|---|---|---|---|
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” | 否 | 是 |
注:如果抠图的尺寸大于原图尺寸,插件会补边,出现绿色边框。
序号 | 属性 | 描述 | 是否为必选项 | 是否可修改 |
---|---|---|---|---|
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 |
步骤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行。
此处可能存在不合适展示的内容,页面不予展示。您可通过相关编辑功能自查并修改。
如您确认内容无涉及 不当用语 / 纯广告导流 / 暴力 / 低俗色情 / 侵权 / 盗版 / 虚假 / 无价值内容或违法国家有关法律法规的内容,可点击提交进行申诉,我们将尽快为您处理。