paddle_segment 语义分割
<p>[TOC]</p>
<h5>简要描述</h5>
<ul>
<li>百度飞浆语义分割。 【v2.1.3】以上可用。</li>
</ul>
<h5>参数</h5>
<table>
<thead>
<tr>
<th style="text-align: left;">参数名</th>
<th style="text-align: left;">参数类型</th>
<th style="text-align: left;">参数类型</th>
<th>参数说名</th>
</tr>
</thead>
<tbody>
<tr>
<td style="text-align: left;">image</td>
<td style="text-align: left;">必须</td>
<td style="text-align: left;">String\bitmap</td>
<td>支持输入bitmp、图片文件路径。</td>
</tr>
<tr>
<td style="text-align: left;">confidence</td>
<td style="text-align: left;">必须</td>
<td style="text-align: left;">double</td>
<td>信度/相似度 (0~1)</td>
</tr>
<tr>
<td style="text-align: left;">ver</td>
<td style="text-align: left;">(可选)</td>
<td style="text-align: left;">int</td>
<td>版本。0=最新版本 1=旧的兼容版本 默认=0,如果出现兼容问题可尝试切换</td>
</tr>
</tbody>
</table>
<h5>返回值</h5>
<p>String,一个json文本。返回示例如下:</p>
<pre><code class="language-java">[
{
"text": "0: backgroud",
"labelIndex": 0,
"confidence": 0,
"id": 0,
"x1": 0,
"y1": 0,
"x2": 1,
"y2": 1,
"mask": "[597, 238, 598, 238, 599, 238, 600, 238, 601, 238, 602, 238, 603, 238, 604, 238, 605, 238, 606, 238]"
}
]</code></pre>
<p>以上数据,当前唯一有意义的是:mask
mask:标记分割后的mask坐标。每两个成员为一组坐标。(此方法在脚本应用领域几乎没有什么作用,所以未做优化,如果需要请联系我做优化)</p>
<p>这个返回值转换成JSON后,可以使用本插件 drawRect 方法打印显示到手机屏幕上。</p>
<h5>人物抠图应用</h5>
<pre><code class="language-java">/**入口**/
function main() {
//0、脚本停止回调,清除绘制。
cvImg.drawRectClear();
setStopCallback(function (){//停止脚本清除显示框。
sleep(3000);//延迟清除,不然看不到绘制效果。
cvImg.drawRectClear();
loge("脚本已停止!")
});
logd("开始执行脚本...");
//1、申请截图权限
logd("申请截图权限",image.requestScreenCapture(10000,0));
//2、加载百度飞浆库(该操作,脚本开头执行一次即可。)
var ret=cvImg.paddle_loadLib("/sdcard/lib.apk","");
if(!ret){
loge(cvImg.paddle_getErrorText());
exit();
}
//3、加载模型
ret= cvImg.paddle_loadMode("/sdcard/segment_PP_LiteSeg_STDC1.apk","segment",4);
if(!ret){
loge(cvImg.paddle_getErrorText());
exit();
}else{
logd("模型加载OK...")
}
//截图
var bitmap=image.captureScreenBitmap("png",0,0,cvImg.dw,cvImg.dh ,100);
if(bitmap){//语义分割
let t=time();
var info=cvImg.paddle_segment(bitmap,0.2,0);
logd("检测耗时:"+(time()-t)+"ms");
//调用失败输出错误信息。
if(cvImg.paddle_getErrorText()+""!=="")loge(cvImg.paddle_getErrorText());
logd(info.substr(0,1000))
//绘制结果,以及性能
if(info){
let t=time();
var json=JSON.parse(info);
cvImg.drawRect(json,1);// {"person":1} 表示只显示人物
logd("绘制耗时:"+(time()-t)+"ms");
}
//释放截图
image.recycle(bitmap)
}else{
logd("请给个截图权限呗....")
}
//释放模型
cvImg.paddle_release();
}
</code></pre>
<p>语义分割的目标图像
<img src="https://www.showdoc.com.cn/server/api/attachment/visitFile?sign=2949093ea592b09b2247da8916319b9f&file=file.png" alt="" /></p>
<p>语义分割后的结果
<img src="https://www.showdoc.com.cn/server/api/attachment/visitFile?sign=b8ef4d42b5c5c968a1738d0a04920cf4&file=file.png" alt="" /></p>