logo

Auto.js OCR与图色分析全攻略:从入门到实战

作者:宇宙中心我曹县2025.09.26 19:47浏览量:0

简介:本文深入解析Auto.js中OCR识别与图色分析技术,通过代码示例与实战场景,帮助开发者掌握图像处理核心技能,提升自动化脚本效率。

Auto.js 入门指南(十一)OCR 识别与图色分析

在自动化脚本开发中,OCR(光学字符识别)与图色分析是两项核心技能,尤其在需要处理图像或文本交互的场景中(如游戏辅助、应用测试、数据抓取等)。Auto.js 作为一款基于 JavaScript 的 Android 自动化工具,通过其内置的图像处理模块和扩展能力,能够高效实现这两项功能。本文将结合理论、代码示例与实战场景,系统讲解如何在 Auto.js 中应用 OCR 识别与图色分析。

一、OCR 识别:从图像到文本的转换

1.1 OCR 技术原理与 Auto.js 实现

OCR 的核心是通过图像处理算法识别文字区域,再通过机器学习模型将像素转换为可编辑文本。Auto.js 本身不内置 OCR 引擎,但可通过以下两种方式实现:

  • 调用系统 OCR 功能:Android 系统自带 OCR API(需设备支持),通过 Auto.js 的 images.requestScreenCapture()ocr() 方法(需 root 或无障碍权限)调用。
  • 集成第三方 OCR 库:如 Tesseract OCR(开源)或百度/腾讯等云 OCR 服务(需 API 密钥)。

代码示例:调用系统 OCR(需 root)

  1. // 请求截图权限
  2. if (!requestScreenCapture()) {
  3. toast("请求截图权限失败");
  4. exit();
  5. }
  6. // 截取屏幕并识别文字(示例为系统OCR,实际需设备支持)
  7. let img = captureScreen();
  8. let text = images.ocr(img); // 假设系统支持,实际可能需调用其他API
  9. console.log("识别结果:", text);

代码示例:集成 Tesseract OCR(需下载语言包)

  1. // 需提前下载 Tesseract OCR 的训练数据(.traineddata 文件)
  2. // 假设已将 tessdata 文件夹放在脚本目录下
  3. function ocrWithTesseract(imgPath) {
  4. let engine = new OCREngine(); // 假设存在封装类,实际需自行实现或使用插件
  5. engine.init("eng"); // 英文语言包
  6. let result = engine.recognize(imgPath);
  7. return result.text;
  8. }
  9. // 实际开发中,更推荐使用现成的 Auto.js OCR 插件(如 auto.js.ocr 插件)

1.2 实战场景:游戏内文本识别

场景:识别游戏中的任务提示文字,自动点击下一步。

  1. // 假设任务提示文字区域固定(如屏幕顶部)
  2. let taskText = "点击领取奖励";
  3. let region = [0, 0, device.width, 100]; // 屏幕顶部区域
  4. // 循环检测文字
  5. setInterval(() => {
  6. let img = captureScreen(region);
  7. let result = ocrWithTesseract(img); // 替换为实际OCR方法
  8. if (result.includes(taskText)) {
  9. click(device.width / 2, 150); // 点击屏幕中央下方
  10. }
  11. }, 1000);

1.3 优化建议

  • 语言包选择:根据需求下载对应语言包(如 chi_sim 中文简体)。
  • 预处理图像:二值化、降噪可提升识别率。
  • 错误处理:添加重试机制,避免因图像模糊导致失败。

二、图色分析:像素级操作与模式匹配

2.1 图色分析基础

图色分析通过比较像素颜色或图像特征实现定位,常用于:

  • 控件定位:通过颜色或图标找到按钮位置。
  • 状态检测:判断游戏是否加载完成(如通过特定图标)。
  • 滑动验证:模拟人类操作轨迹。

Auto.js 提供了 images.findColor()images.findImage() 等方法。

代码示例:颜色点检测

  1. // 检测屏幕中是否存在红色像素(RGB: 255,0,0)
  2. let color = 0xFFFF0000; // ARGB 格式
  3. let point = images.findColor(captureScreen(), color, {
  4. region: [0, 0, device.width, device.height],
  5. threshold: 0.9 // 颜色相似度阈值
  6. });
  7. if (point) {
  8. console.log("找到红色像素,位置:", point);
  9. click(point.x, point.y);
  10. }

代码示例:模板匹配(找图)

  1. // 加载模板图片(需提前截取)
  2. let template = images.read("/sdcard/template.png");
  3. let src = captureScreen();
  4. // 在屏幕中查找模板
  5. let pos = images.findImage(src, template, {
  6. threshold: 0.8 // 匹配阈值
  7. });
  8. if (pos) {
  9. console.log("找到模板,位置:", pos);
  10. click(pos.x + template.getWidth() / 2, pos.y + template.getHeight() / 2);
  11. }

2.2 实战场景:自动点击广告

场景:在应用中自动识别并点击“关闭广告”按钮。

  1. // 假设按钮为绿色背景,白色“X”图标
  2. let closeBtnTemplate = images.read("/sdcard/close_btn.png");
  3. function clickCloseAd() {
  4. let src = captureScreen();
  5. let pos = images.findImage(src, closeBtnTemplate);
  6. if (pos) {
  7. click(pos.x + 20, pos.y + 20); // 偏移量根据按钮大小调整
  8. return true;
  9. }
  10. return false;
  11. }
  12. // 循环检测
  13. setInterval(() => {
  14. if (!clickCloseAd()) {
  15. console.log("未找到关闭按钮");
  16. }
  17. }, 2000);

2.3 优化建议

  • 模板图片:截取时保持分辨率一致,避免缩放导致匹配失败。
  • 多模板匹配:准备不同状态的模板(如按钮按下/未按下)。
  • 性能优化:限制搜索区域,减少计算量。

三、综合应用:OCR + 图色分析

3.1 场景:自动填写验证码

步骤

  1. 通过 OCR 识别验证码图片中的文字。
  2. 使用图色分析定位输入框。
  3. 模拟键盘输入。
  1. // 假设验证码图片在屏幕固定位置
  2. let captchaImg = captureScreen([100, 200, 300, 300]); // 验证码区域
  3. let captchaText = ocrWithTesseract(captchaImg); // 替换为实际OCR方法
  4. // 定位输入框(假设为蓝色边框)
  5. let inputBox = images.findColor(captureScreen(), 0xFF0000FF, {
  6. region: [50, 400, 200, 500]
  7. });
  8. if (inputBox && captchaText) {
  9. click(inputBox.x + 10, inputBox.y + 10); // 点击输入框
  10. setClip(captchaText); // 复制文本到剪贴板
  11. paste(); // 模拟粘贴(需无障碍权限)
  12. }

3.2 场景:游戏关卡自动判断

步骤

  1. 通过 OCR 识别关卡名称。
  2. 使用图色分析检测关卡是否通过(如“胜利”图标)。
  1. let levelName = "第3关";
  2. let currentLevel = ocrLevelName(); // 自定义OCR识别关卡函数
  3. if (currentLevel === levelName) {
  4. console.log("当前关卡:", currentLevel);
  5. // 检测胜利图标
  6. let victoryIcon = images.read("/sdcard/victory.png");
  7. let pos = images.findImage(captureScreen(), victoryIcon);
  8. if (pos) {
  9. console.log("关卡通过!");
  10. clickNextLevel(); // 自定义点击下一关函数
  11. }
  12. }

四、常见问题与解决方案

4.1 OCR 识别率低

  • 原因:图像模糊、字体复杂、语言包不匹配。
  • 解决
    • 预处理图像(二值化、锐化)。
    • 使用更高精度的云 OCR 服务(如百度 OCR API)。
    • 训练自定义语言包(针对特殊字体)。

4.2 图色分析匹配失败

  • 原因:模板图片与实际屏幕差异大(如缩放、颜色变化)。
  • 解决
    • 使用多模板匹配。
    • 动态调整阈值。
    • 结合颜色点检测缩小范围。

4.3 性能问题

  • 原因:全屏搜索、高频率调用。
  • 解决
    • 限制搜索区域。
    • 降低检测频率(如从 100ms 调整为 500ms)。
    • 使用多线程(需 Auto.js Pro 版)。

五、总结与进阶建议

5.1 核心技能总结

  • OCR 识别:适用于文本交互场景,需结合预处理与错误处理。
  • 图色分析:适用于控件定位与状态检测,需优化模板与阈值。
  • 综合应用:OCR + 图色分析可解决复杂自动化需求。

5.2 进阶方向

  • 机器学习集成:使用 TensorFlow Lite 实现更精准的图像分类。
  • 云服务扩展:调用百度/腾讯 OCR API 处理复杂场景。
  • 跨平台兼容:结合 Auto.js 与 PC 端工具(如 OpenCV)实现多端自动化。

通过掌握 OCR 识别与图色分析,开发者能够大幅提升 Auto.js 脚本的智能化水平,适应更多自动化场景。建议从简单案例入手,逐步优化算法与性能,最终实现高效、稳定的自动化解决方案。

发表评论

最热文章

    关于作者

    • 被阅读数
    • 被赞数
    • 被收藏数
    活动