logo

Auto.js OCR与图色分析实战指南

作者:rousong2025.09.26 19:54浏览量:0

简介:本文深入讲解Auto.js中OCR识别与图色分析技术,通过理论解析、代码示例和优化策略,帮助开发者掌握自动化操作核心技能。

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

一、OCR 识别技术解析

1.1 OCR 技术原理

OCR(Optical Character Recognition)即光学字符识别,通过图像处理和模式识别技术将图片中的文字转换为可编辑文本。Auto.js 的 OCR 功能基于 Tesseract OCR 引擎实现,支持中英文及数字识别。其核心流程包括:图像预处理(二值化、降噪)、字符分割、特征提取和模式匹配。

关键参数说明

  • lang: 指定语言包(如 chi_sim 中文简体,eng 英文)
  • psm: 页面分割模式(0-13),常用 6 假设为统一文本块
  • oem: OCR 引擎模式(0-3),默认 0 原始 Tesseract

1.2 Auto.js OCR 基础用法

  1. // 基础OCR识别示例
  2. let img = captureScreen(); // 截取屏幕
  3. let text = ocr.recognize(img, {
  4. language: "chi_sim+eng", // 中英文混合识别
  5. psm: 6,
  6. oem: 0
  7. });
  8. console.log("识别结果:", text);

注意事项

  • 图像质量直接影响识别率,建议截取区域时保持文字清晰
  • 中英文混合识别需在 language 参数中同时指定
  • 复杂背景可能导致误识别,可通过 images.grayscale() 预处理

1.3 高级优化技巧

1.3.1 区域截取优化

  1. // 精确截取文字区域
  2. let src = captureScreen();
  3. let region = images.clip(src, 100, 200, 300, 400); // (x,y,w,h)
  4. let result = ocr.recognize(region, {language: "eng"});

1.3.2 二值化预处理

  1. // 图像二值化提升识别率
  2. let img = captureScreen();
  3. let gray = images.grayscale(img);
  4. let binary = images.threshold(gray, 0, 255, "binary", 128); // 阈值128
  5. let text = ocr.recognize(binary, {language: "chi_sim"});

1.3.3 动态阈值调整

  1. // 自适应阈值处理
  2. function adaptiveThreshold(img) {
  3. let gray = images.grayscale(img);
  4. let avg = images.getAverageColor(gray).r; // 计算平均亮度
  5. let threshold = avg * 0.7; // 动态阈值(经验值0.6-0.8)
  6. return images.threshold(gray, 0, 255, "binary", threshold);
  7. }

二、图色分析技术详解

2.1 基础图色操作

2.1.1 像素点检测

  1. // 检测特定位置颜色
  2. let color = images.pixel(captureScreen(), 100, 200);
  3. console.log("RGB值:", color);

2.1.2 颜色相似度比较

  1. // 颜色相似度判断(允许10%误差)
  2. function isSimilarColor(c1, c2, threshold = 0.1) {
  3. let diff = Math.abs(c1.r - c2.r) +
  4. Math.abs(c1.g - c2.g) +
  5. Math.abs(c1.b - c2.b);
  6. return diff / 765 <= threshold; // 最大差值765(255*3)
  7. }

2.2 模板匹配技术

2.2.1 基础模板匹配

  1. // 查找屏幕上指定图片
  2. let template = images.read("/sdcard/template.png");
  3. let point = findImage(captureScreen(), template, {
  4. threshold: 0.8, // 相似度阈值
  5. region: [0, 0, device.width, device.height] // 搜索区域
  6. });
  7. if (point) {
  8. console.log("找到位置:", point);
  9. click(point.x, point.y);
  10. }

2.2.2 多目标检测优化

  1. // 查找所有匹配目标
  2. function findAllImages(screen, template, threshold = 0.8) {
  3. let points = [];
  4. let res = findImage(screen, template, {threshold: threshold});
  5. while (res) {
  6. points.push(res);
  7. // 排除已找到区域
  8. let masked = images.clip(
  9. screen,
  10. 0, 0,
  11. res.x - 10, device.height // 左侧区域
  12. );
  13. masked = images.concat(
  14. masked,
  15. images.clip(
  16. screen,
  17. res.x + template.width + 10, 0,
  18. device.width, device.height
  19. ), // 右侧区域
  20. "horizontal"
  21. );
  22. res = findImage(masked, template, {threshold: threshold});
  23. if (res) {
  24. res.x += points.length === 0 ? 0 :
  25. (points[points.length - 1].x + template.width + 10);
  26. }
  27. }
  28. return points;
  29. }

2.3 性能优化策略

2.3.1 图像金字塔加速

  1. // 多尺度模板匹配
  2. function pyramidFind(screen, template, scales = [1, 0.9, 0.8]) {
  3. for (let scale of scales) {
  4. let resizedTemp = images.resize(
  5. template,
  6. template.width * scale,
  7. template.height * scale
  8. );
  9. let point = findImage(screen, resizedTemp, {threshold: 0.7});
  10. if (point) {
  11. // 还原原始坐标
  12. point.x /= scale;
  13. point.y /= scale;
  14. return point;
  15. }
  16. }
  17. return null;
  18. }

2.3.2 特征点加速

  1. // 使用特征点匹配(需OpenCV支持)
  2. // 此处示例为伪代码,实际需集成OpenCV库
  3. function featureMatch(screen, template) {
  4. // 1. 提取特征点
  5. // 2. 计算特征描述子
  6. // 3. 匹配特征点
  7. // 4. 计算单应性矩阵
  8. // 5. 返回最佳匹配位置
  9. }

三、实战案例解析

3.1 验证码自动识别

  1. // 验证码识别流程
  2. function recognizeCaptcha() {
  3. // 1. 截取验证码区域
  4. let captchaImg = images.clip(
  5. captureScreen(),
  6. 500, 300,
  7. 200, 80
  8. );
  9. // 2. 预处理(去噪、二值化)
  10. let processed = images.grayscale(captchaImg);
  11. processed = images.threshold(processed, 0, 255, "binary", 140);
  12. // 3. OCR识别
  13. let text = ocr.recognize(processed, {
  14. language: "eng",
  15. psm: 7, // 假设为单行文本
  16. oem: 0
  17. });
  18. // 4. 后处理(去除特殊字符)
  19. return text.replace(/[^a-zA-Z0-9]/g, "");
  20. }

3.2 游戏自动化操作

  1. // 游戏角色自动瞄准
  2. function autoAim() {
  3. let screen = captureScreen();
  4. let enemyTemplate = images.read("/sdcard/enemy.png");
  5. // 多尺度搜索
  6. let enemyPos = pyramidFind(screen, enemyTemplate, [1, 0.95, 0.9]);
  7. if (enemyPos) {
  8. // 计算瞄准点(示例:敌人中心上方50像素)
  9. let aimX = enemyPos.x + enemyTemplate.width / 2;
  10. let aimY = enemyPos.y - 50;
  11. // 移动并点击
  12. press(aimX, aimY, 50); // 50ms按压
  13. }
  14. }

四、常见问题解决方案

4.1 OCR 识别率低

  • 原因:图像模糊、字体复杂、背景干扰
  • 解决方案
    • 使用 images.findImage() 先定位文字区域
    • 应用 images.grayscale()images.threshold() 预处理
    • 调整 psm 参数(如 3 全自动分割)

4.2 模板匹配失败

  • 原因:图像缩放、旋转、光照变化
  • 解决方案
    • 使用多尺度搜索(图像金字塔)
    • 添加颜色阈值过滤(colors.isSimilar
    • 结合特征点匹配(需OpenCV支持)

4.3 性能瓶颈

  • 优化策略
    • 限制搜索区域(region 参数)
    • 降低图像分辨率(images.resize()
    • 使用异步处理(threads.start()

五、进阶开发建议

  1. 建立图像库:分类存储模板图片,按场景组织
  2. 动态参数调整:根据设备分辨率自动计算坐标
  3. 错误重试机制:识别失败时自动调整参数重试
  4. 日志系统:记录识别过程和结果便于调试

通过系统掌握OCR识别与图色分析技术,开发者可以构建出高效稳定的自动化脚本。建议从简单场景入手,逐步增加复杂度,同时充分利用Auto.js提供的图像处理函数进行优化。

相关文章推荐

发表评论

活动