paddle_detect 目标检测
<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": "person",
"confidence": 0.20899564027786255,
"x1": 17,
"y1": 736,
"x2": 284,
"y2": 1206
},
{
"text": "book",
"confidence": 0.20443083345890045,
"x1": 570,
"y1": 329,
"x2": 1041,
"y2": 1213
}
]</code></pre>
<p>text:表示识别的文本内容。
confidence:表示信度、相似度。
x1:目标左上角坐标x
y1:目标左上角坐标y
x2:目标右下角坐标x
y2:目标右下角坐标y</p>
<p>这个返回值转换成JSON后,可以使用本插件 drawRect 方法打印显示到手机屏幕上。</p>
<h5>目标检测在游戏中应用例子</h5>
<pre><code class="language-java">/**入口**/
function main() {
//0、脚本停止回调,清除绘制。
cvImg.drawRectClear();
setStopCallback(function (){//停止脚本清除显示框。
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/detect_八十目标检测模型_PP_Yolo_tiny.apk","detect",4);
if(!ret){
loge(cvImg.paddle_getErrorText());
exit();
}else{
logd("模型加载OK...")
}
//截图并循环检测
var add=0;
for(var i=0;i<1000;i++){
//隐藏绘制的矩形,并屏幕截图
//cvImg.drawRectHide();
//sleep(50);
var bitmap=image.captureScreenBitmap("png",0,0,cvImg.dw,cvImg.dh ,100);
//cvImg.drawRectShow();
if(bitmap){//检测,以及性能计算
let t=time();
var info=cvImg.paddle_detect(bitmap,0.2,1);
var subt=time()-t;
add+=subt;
logd("检测耗时:"+(time()-t)+"ms","平均:"+(add/(i+1))+"ms");
//调用失败输出错误信息。
if(cvImg.paddle_getErrorText()+""!=="")loge(cvImg.paddle_getErrorText());
//logd(info)
//绘制结果,以及性能
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>
<h5>目标检测在游戏中应用(实时效果图)</h5>
<p><img src="https://www.showdoc.com.cn/server/api/attachment/visitFile?sign=409e98fd63a77af9cebce4c9e30dd1a9&file=file.gif" alt="" /></p>