牙叔教程 简单易学
声明
本教程仅用于学习, 禁止用于其他用途
使用场景
autojs打包后的app合并百度EasyEdge的功能
百度EasyEdge包括
- ocr
- 目标检测
- 人脸检测
- 野生动物分类
- 菜品识别
- 动物识别
- 车辆检测
- ......
识别文字, 效果展示
autojs版本
免费版4.1.1
公众号回复 411 获取下载链接
或者进群下载
测试手机
小米11pro
安卓12
miui13
报毒
脚本打包成app后, 安装时, 小米会报毒, 自己选择是否继续, 或者用虚拟机测试
合并简介
把百度EasyEdge app里面的
- classes.dex
- so
- assets
添加到autojs打包后的app里面
就可以在autojs中使用百度EasyEdge了
合并详细步骤
1. 去百度EasyEdge官网下载ocr demo体验app
2. 用autojs打包一个用于调试的app
"ui"; ui.layout( <vertical> <text gravity="center" textStyle="bold" textSize="30sp"> 牙叔教程 简单易学 </text> <input id="代码内容" w="*"></input> <button id="执行代码">执行代码</button> <input id="脚本文件路径" w="*"></input> <button id="执行脚本文件">执行脚本文件</button> <input id="项目入口文件路径" w="*"></input> <button id="执行项目">执行项目</button> <button id="日志">日志</button> <button id="停止脚本" text="停止脚本"></button> </vertical> ); ui.代码内容.setText('toastLog("hello");'); ui.脚本文件路径.setText("/sdcard/脚本/main.js"); ui.项目入口文件路径.setText("/sdcard/脚本/测试/main.js"); ui.执行代码.click(function () { eval(ui.代码内容.text()); }); ui.执行脚本文件.click(function () { engines.execScriptFile(ui.脚本文件路径.text().trim()); }); ui.执行项目.click(function () { let entryFilePath = ui.项目入口文件路径.text().trim(); engines.execScriptFile(entryFilePath, { path: entryFilePath.replace(/\/[\w.]+?$/, "") }); }); ui.日志.click(function () { app.startActivity("console"); }); ui.停止脚本.click(function () { engines.all().map((ScriptEngine) => { if (engines.myEngine().toString() !== ScriptEngine.toString()) { ScriptEngine.forceStop(); } }); });
3. 用mt提取main和EasyEdge, 两个app
4. 左边查看main
5. 右边查看EasyEdge
6. 右侧的classes.dex改名为classes3.dex, 然后添加到左边
7. 右侧的assets文件夹里面的文件, 全部添加到左边的assets里面
8. 右侧的lib/armeabi-v7a/里面的所有文件都添加到左侧lib/armeabi-v7a/里面
添加前
添加后
9. 返回, 并对修改后的main.apk签名, 卸载原先的main, 安装刚刚修改完的main.apk,
小米安装, 可能要用自带的应用市场安装app, 否则报错
10. 修改 TestInferOcrTask.java 为js文件, 放到 /sdcard/脚本/main.js
免费版4.1.1在我手机上截图报错, 可能由于我是安卓12,
所以我就用本地图片测试, 不用截图了,
安卓低版本截图, 应该没问题, 毕竟几年前, 安卓7,8,9还是很多手机的;
请修改31行的图片路径
/* -------------------------------------------------------------------------- */ importClass(android.content.Context); importClass(android.graphics.Bitmap); importClass(android.graphics.BitmapFactory); importClass(android.graphics.Point); importClass(android.widget.TextView); importClass(com.baidu.ai.edge.core.infer.InferConfig); importClass(com.baidu.ai.edge.core.infer.InferManager); importClass(com.baidu.ai.edge.core.ocr.OcrResultModel); importClass(java.io.InputStream); importClass(java.util.List); /* -------------------------------------------------------------------------- */ /** * 通用arm 开源OCR模型 */ let CONFIDENCE = 0.3; /* 1. 准备配置类,初始化Manager类。可以在onCreate或onResume中触发,请在非UI线程里调用 */ let config = new InferConfig(context.getAssets(), "infer-ocr/config.json"); let manager = new InferManager(context, config, ""); events.on("exit", function () { try { manager.destroy(); } catch (e) { log(e); } }); // 2. 截图 var image = images.read("/sdcard/a封面.png"); image = image.getBitmap(); log("image = " + image); log("Image size: " + image.getWidth() + "*" + image.getHeight()); /* 3. 识别文字 */ // 在模型销毁前可以不断调用。但是不支持多线程 console.time("识别文字时间"); let results = manager.ocr(image, CONFIDENCE); console.timeEnd("识别文字时间"); // 解析结果 log("results.size() = " + results.size()); if (results != null && results.size() > 0) { var len = results.size(); for (var i = 0; i < len; i++) { let item = results.get(i); let data = { confidence: item.getConfidence(), label: item.getLabel(), labelIndex: item.getLabelIndex(), points: item.getPoints(), wordIndex: item.getWordIndex(), }; log(JSON.stringify(data, null, 2)); } } else { log("未识别到文字"); } /* 3. 销毁模型。可以在onDestroy或onPause中触发,请在非UI线程里调用 */ !image.isRecycled() && image.recycle(); manager.destroy(); log("Finish running\n");
11.保存上面的文件到 /sdcard/脚本/main.js
12. 在main中, 点击执行脚本文件
其他注意事项
manager只允许实例化一个, 如果代码出错, 请重启app
相关资料
https://www.yuque.com/go/doc/44961245
https://www.yuque.com/yashujs/bfug6u/vm47bp
名人名言
思路是最重要的, 其他的百度, bing, stackoverflow, github, 安卓文档, autojs文档, 最后才是群里问问
--- 牙叔教程
声明
部分内容来自网络
本教程仅用于学习, 禁止用于其他用途