paddle_ocr 文字识别
<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": "Xv:0.172",
"confidence": 0.8916975259780884,
"leftTop": {
"x": 455,
"y": 0
},
"rigthTop": {
"x": 576,
"y": 2
},
"rigthBottom": {
"x": 576,
"y": 34
},
"leftBottom": {
"x": 455,
"y": 30
}
},
{
"text": "dY:1.1",
"confidence": 0.8535435795783997,
"leftTop": {
"x": 248,
"y": 4
},
"rigthTop": {
"x": 388,
"y": 0
},
"rigthBottom": {
"x": 390,
"y": 30
},
"leftBottom": {
"x": 250,
"y": 37
}
}
]</code></pre>
<p>text:表示识别的文本内容。
confidence:表示信度、相似度。
leftTop:文字内容所在位置的左上角坐标
rigthTop:文字内容所在位置的右上角坐标
rigthBottom:文字内容所在位置的右下角坐标
leftBottom:文字内容所在位置的左下角坐标</p>
<p>这个返回值转换成JSON后,可以使用本插件 drawRect 方法打印显示到手机屏幕上。</p>
<h5>例子:实时全屏OCR识别</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/ocr_百度超轻量级中文OCR模型.apk","ocr",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_ocr(bitmap,0.1,0);
var subt=time()-t;
add+=subt;
logd("检测耗时:"+(time()-t)+"ms","平均:"+(add/(i+1))+"ms");
//调用失败输出错误信息。
if(cvImg.paddle_getErrorText()+""!=="")loge(cvImg.paddle_getErrorText());
//绘制结果,以及性能
if(info){
let t=time();
var json=JSON.parse(info);
cvImg.drawRect(json,1);
logd("绘制耗时:"+(time()-t)+"ms");
}
//释放截图
image.recycle(bitmap)
}else{
logd("请给个截图权限呗....")
}
}
//释放模型
cvImg.paddle_release();
}</code></pre>
<h5>例子:实时全屏OCR识别执行后的效果</h5>
<p><img src="https://www.showdoc.com.cn/server/api/attachment/visitFile?sign=764d6a915baa1eba37d40ea1982a2981&file=file.gif" alt="" /></p>