当前位置: 首页 > news >正文

autojs-ocr-easyedge-nodejs

牙叔教程 简单易懂

目的

做一个有ocr功能的app

easyedge

是百度的产品, 有ocr功能, 且其发布了一个免费的离线app, 识别率还可以

autojs引擎

从autojspro9开始, 就有了两个引擎
在这里插入图片描述

autojs内置nodejs, rhino, 并且支持双方通信

实现ocr的思路

如果会安卓开发的话, 可以把百度开源的paddle做成插件, 提供给autojs使用;
我不会安卓开发, 所以我选择了nodejs, 把ocr功能单独做一个app, 提供给脚本使用.

那么我们要实现这么一个接口.
http发送ocr请求, 然后返回ocr识别后的内容,
这里就出现了一个CS架构
在这里插入图片描述

客户端
就一个http请求

let imgPath = "/sdcard/02.png";
var url = "http://127.0.0.1:34567/";
let r = http.postJson(url, {action: "ocr",imgPath: imgPath,
});
let obj = r.body.json();
log(obj.result);

服务端
这个服务端的app大概要做哪些事情?
首先, 要接收客户端的请求, 必然要开启服务, 服务我们用的是koa, 大致流程如下
在这里插入图片描述

这里就涉及到 了java和nodejs的通信问题:
easyedge使用的java, koa是nodejs.

java和nodejs通信

1. java给nodejs发消息:

这里首先要获取启动nodejs脚本的引擎, 然后再发送消息

const execution = $engines.execScriptFile("./server/index.js", {arguments: {serverEngineId: $engines.myEngine().id,},
});
sleep(1000);
execution.engine.emit("ocrResult", {action: "ocr",result: ocrResult,
});
2. nodejs给java发消息

同上, 这里也要获取java的引擎, 然后再发送消息

// 从参数中取出Rhino引擎的ID
const serverEngineId = engines.myEngine().execArgv.serverEngineId;
// 根据ID找出Rhino引擎
const serverEngine = engines.getRunningEngines().find((e) => e.id === serverEngineId);
serverEngine.emit("reply", params);
3. java接收消息
$events.on("reply", (data) => {});
4. nodejs接收消息
engines.myEngine().on("ocrResult", (ocrResult) => {});

nodejs怎么知道ocr识别完成

ocr识别图片里的文字是需要消耗时间的, 那么nodejs怎么知道ocr识别何时完成?
http–> nodejs–> easyedge–> nodejs;

nodejs仅仅只能把http发送的数据, 使用serverEngine.emit发送给java, 他的ctx是发送不过去的,
到这一步, nodejs就控制不了easyedge了,
nodejs能做的仅仅是和java交换一些简单的数据, ctx是交换不了的.

既然ocr需要时间, 那么我们先让http等一些时间, 再发送响应

new Promise(function (resolve, reject) {let setTimeoutId = setTimeout(function () {resolve(currentOcrResult);}, 8000);
});

这里使用的是promise, 延迟了8秒.
easyedge我测试了一下, 一般的图片1秒以内就返回数据了,
图片太大, 文字太多, 时间会更长一些, 不过8秒应该够了.

我们需要等8秒吗?
在8秒内, 我们可以每隔一段时间检查一下java是否把ocr识别的结果传给了nodejs,

如果nodejs接收到ocr的数据, 我们就可以中断这8秒钟的等待了

let setIntervalId = setInterval(function () {if (currentOcrResult) {clearTimeout(setTimeoutId);resolve(currentOcrResult);clearInterval(setIntervalId);}
}, 30);

我觉得这个setTimeout和setInterval配合Promise等待ocr识别结果, 这个思路是本教程的精华.

easyedge怎么封装到app里面

可以查看我之前的合并教程 autojs合并EasyEdge

autojs9.0.10之前应该都可以依照此方法合并,
在autojs9.0.11合并的时候, 不可以添加新的classes.dex到app中了, 会报错, 堆栈异常之类的.;

我们需要把classes.dex放到我们的脚本项目中, 然后用loaddex加载dex.

获取封装了ocr功能的app

公众号回复 yashuocr

源码仓库地址

https://gitee.com/yashujs/autojs-easyedge-nodejs

环境

手机: Mi 11 Pro
Android版本: 11
Autojs版本: 9.0.11

名人名言

思路是最重要的, 其他的百度, bing, stackoverflow, github, 安卓文档, autojs文档, 最后才是群里问问
— 牙叔教程

声明

部分内容来自网络
本教程仅用于学习, 禁止用于其他用途

bilibili

牙叔教程

微信公众号 牙叔教程

在这里插入图片描述

QQ群

747748653
在这里插入图片描述


http://www.taodudu.cc/news/show-4781404.html

相关文章:

  • <font color=Red>某灰产收费虚拟定位APP逆向破解教程之破解弹窗强制更新</font>
  • Apache Knox 2.0.0使用
  • 举例说明数据库的查询性能优化
  • 软件测试之【软件测试初级工程师技能点全解】
  • Ajax 笔记02
  • 常用CSS和XPATH元素定位方法
  • 软件调试相关
  • Bongiovi DPS for mac(音频增强工具)
  • DPS学习心得(一)
  • 中学数字化探究实验室建设要求和规范
  • 医药工业洁净厂房配电系统设计与节能应用
  • 浅谈医药工业洁净类厂房智能照明设计与选型
  • ds服务器没检测到有响应,设备或资源dns没检测到有响应 网络无法连接
  • EasyCVR调用录像回看接口报错“查询文件失败”排查过程及解决方式
  • 各种系统中密码文件的位置
  • Windbg查看死锁实例
  • Eclipse安装DSS会出现的一点问题
  • DSS源码分析
  • macOS系统_常用终端操作命令
  • java文件上传(tcp)
  • tomcat 7 最新版本 apache-tomcat-7.0.109
  • Windows Tomcat 下载安装
  • win10+tomcat7解压版安装小记
  • Mac下安装Tomcat7
  • tomcat下载不了
  • win7下安装配置Tomcat 7.0
  • “ORA-01017(:用户名/口令无效; 登录被拒绝)”解决办法
  • navicat连接出现ORA-01017: invalid username/password
  • 关于springboot项目连接oracle数据库报错 ORA01017的改正
  • Oracle ORA-01017: invalid username/password;logon denied问题解决
  • How to fix ORA-01017:用户名/口令无效 登录拒绝
  • Oracle不能用system用户 ORA-01017
  • ORA-01017:用户名/口令无效,登录被拒绝(ORA-01017: invalid username/password; logon denied)
  • 远程连接oracle01017,連接Oracle遠程數據庫錯誤:ORA-12541,ORA-12514,ORA-01017的解決方法!...
  • Oracle ORA-01017: invalid username/password;解决完一个12560又来一个
  • dbca asm ora 01017错误