简介:本文详细解析基于AutoJS调用百度OCR实现文字识别的完整方案,包含API调用、源码解析及优化建议,适合移动端开发者快速集成。
在移动端自动化开发中,文字识别是常见的需求场景,如验证码读取、表单自动填充、屏幕内容提取等。AutoJS作为基于JavaScript的Android自动化工具,通过无障碍服务实现界面操作,而百度OCR提供高精度的文字识别API。两者结合可构建轻量级、跨应用的文字识别解决方案,尤其适用于以下场景:
百度OCR通用文字识别接口支持多种参数配置,关键参数如下:
| 参数名 | 类型 | 必填 | 说明 |
|———————|————|———|———————————————————————————————————|
| access_token | string | 是 | 通过API Key和Secret Key获取的授权凭证,有效期30天。 |
| image | base64 | 是 | 图片数据的Base64编码,需去除编码头(如data:image/jpeg;base64,)。 |
| recognize_granularity | string | 否 | 识别粒度,可选big(整图)或small(单词级)。 |
| language_type | string | 否 | 语言类型,默认CHN_ENG(中英文混合),支持日、韩、法等20+语言。 |
示例请求体:
{"image": "/9j/4AAQSkZJRgABAQ...","recognize_granularity": "small","language_type": "ENG"}
API Key和Secret Key。
function getAccessToken(apiKey, secretKey) {let url = `https://aip.baidubce.com/oauth/2.0/token?grant_type=client_credentials&client_id=${apiKey}&client_secret=${secretKey}`;let res = http.get(url);return JSON.parse(res.body).access_token;}
function captureScreenAsBase64() {let img = captureScreen();let path = "/sdcard/temp_ocr.png";images.save(img, path);let base64 = files.readBytes(path).toString("base64");files.remove(path); // 清理临时文件return base64;}
async function recognizeText(accessToken, base64Image) {let url = `https://aip.baidubce.com/rest/2.0/ocr/v1/general_basic?access_token=${accessToken}`;let body = {image: base64Image,recognize_granularity: "small"};let res = http.post(url, body);return JSON.parse(res.body).words_result || [];}
auto();let apiKey = "your_api_key";let secretKey = "your_secret_key";// 主流程function main() {let token = getAccessToken(apiKey, secretKey);let base64 = captureScreenAsBase64();let results = recognizeText(token, base64);// 输出识别结果results.forEach(item => {console.log(`文字: ${item.words}, 位置: ${JSON.stringify(item.location)}`);});}main();
images.resize()压缩截图,建议分辨率不超过2000x2000。language_type参数,支持混合语言场景。findColor()定位目标区域,裁剪截图提高精度。Promise.all()并行处理多张截图。| 方案 | 优点 | 缺点 |
|---|---|---|
| 百度OCR+AutoJS | 高精度、支持多语言 | 依赖网络、免费版有调用限制 |
| Tesseract OCR | 本地运行、无调用限制 | 准确率较低、需训练模型 |
| 华为ML Kit | 集成方便、支持离线 | 仅限华为设备 |
案例:自动填写表单
代码片段:
let hintText = recognizeRegion(100, 200, 300, 250); // 区域坐标if (hintText.includes("手机号")) {id("input_phone").findOne().setText("13800138000");}
通过AutoJS与百度OCR的结合,开发者可快速实现移动端文字识别功能,兼顾效率与灵活性。未来可探索以下方向:
本文提供的源码与方案可直接用于项目开发,建议根据实际需求调整参数(如识别粒度、语言类型),并做好错误处理与性能监控。