autojs-ocr-easyedge-nodejs

本文涉及的产品
OCR统一识别,每月200次
票证核验,票证核验 50次/账号
票据凭证识别,票据凭证识别 200次/月
简介: 牙叔教程 简单易懂

牙叔教程 简单易懂


目的

做一个有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文档, 最后才是群里问问
--- 牙叔教程


声明


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


 
         
目录
打赏
0
0
0
0
41
分享
相关文章
visual studio 2022 社区版 c# 环境搭建及安装使用【图文解析-小白版】
这篇文章提供了Visual Studio 2022社区版C#环境的搭建和安装使用指南,包括下载、安装步骤和创建C#窗体应用程序的详细图文解析。
visual studio 2022 社区版 c# 环境搭建及安装使用【图文解析-小白版】
PyCharm安装教程(图文结合,超详细,小白安装必看)
PyCharm安装教程(图文结合,超详细,小白安装必看)
OCR文档自学习初体验
简要讲述什么是OCR文档自学习以及OCR文档自学习模板、信息抽取模型的使用
OCR文档自学习初体验
ABBYY FineReader16最新版图片文字识别工具功能介绍
ABBYY FineReader16是一款功能强大的OCR识别软件,也是abbyy finereader系列的全新推出的版本。ABBYY FineReader能够帮助用户提高处理文档时的业务生产力,还提供强大且易用的工具来访问纸质文档和PDF中的信息。
1484 0
photoshop2023下载安装包最新版教程
photoshop是一款照片、图像和设计编辑软件,全称是Adobe Photoshop我们常说的PS和P图,也是源于Photoshop的简称。Photoshop主要处理以像素所构成的数字图像。使用其众多的编修与绘图工具,可以有效地进行图片编辑工作。
361 0
Python小应用 百度接口实现图片文字识别,并打包成安装包软件
整体是用Python实现,所需要使用的第三方库包括aip、PIL、keyboard、pyinstaller,如未安装,可在CMD中使用pip install Baidu-AIP/pillow/keyboard/pyinstaller指令安装。
Python小应用 百度接口实现图片文字识别,并打包成安装包软件
python 通过 github api 上传图片,实现免费的图床
python 通过 github api 上传图片,实现免费的图床
819 0
Photoshop 2023中文最新完整版本下载安装教程分享
期盼已久的PS2023终于来了,Adobe Photoshop 2023 24.0.0 最新版本已经发布了!Photoshop 2023带来了选择工具升级、一键删除和填充、邀请编辑、照片恢复神经过滤器等。本期给大家带来最新版PS2023最新版!今天给大家带来的是最新Adobe PS2023 Mac双版本!
1983 0
ABBYY15简体中文汉化包OCR文字识别下载教程
自ABBYY FineReader15新版发布以来,一直好评不断,作为市场领先的OCR文字识别软件可快速方便地将扫描纸质文档、PDF文件和数码相机的图像转换成可编辑、可搜索信息。这也使很多小伙伴开始体验和使用该软件,小编亲自测试安装ABBYY FineReader 15版本,并整理教程,有需要的可以参考下。
562 0

热门文章

最新文章