YYPOST群发软件 发表于 2025-9-10 08:33:16

AIWROK软件苹果IOS系统图色视觉[opencv]方法小结

AIWROK软件苹果IOS系统图色视觉方法小结


/*
🍎交流 QQ 群 711841924 群一,苹果内测群,528816639
🍎Image 图像处理方法小结
*/

//🍎Image 类 方法小结


// 第一个方法:📌ocr - 区域OCR识别
/*
类别 详情说明
方法功能 OCR识别指定区域的文字,返回识别结果
方法签名 OcrResult image.ocr(Single left, Single top, Single right, Single bottom)
返回值 OcrResult(OCR识别结果对象)
参数 - Single left:识别区域左边界(百分比,0-1)
- Single top:识别区域上边界(百分比,0-1)
- Single right:识别区域右边界(百分比,0-1)
- Single bottom:识别区域下边界(百分比,0-1)
*/
// 示例:全屏OCR识别
var image = screen.screenShotFull();
printl(image.ocr(0, 0, 1, 1));
image.close(); // 记得释放图片


// 第二个方法:📌base64 - 获取图像Base64编码
/*
类别 详情说明
方法功能 获取图像的Base64编码字符串
方法签名 String image.base64()
返回值 String(图像的Base64编码字符串)
参数 无
*/
// 示例:获取全屏截图的Base64编码
var image = screen.screenShotFull();
printl(image.base64());


// 第三个方法:📌getMat - 获取Mat对象
/*
类别 详情说明
方法功能 获取图像对应的Mat对象(用于OpenCV等后续处理)
方法签名 Mat image.getMat()
返回值 Mat(图像对应的Mat对象)
参数 无
*/
// 示例:获取图像的Mat对象
var mat = new Image().getMat();
print.log("获取到的Mat对象:", mat);


// 第四个方法:📌readMat - Mat 转 Image
/*
类别 详情说明
方法功能 将Mat对象转换为Image对象(修改Image实例以承载Mat内容)
方法签名 Void image.readMat(Mat mat)
返回值 Void(无返回值,直接修改Image实例)
参数 - Mat mat:待转换的Mat对象
*/
// 示例:将Mat转换为Image
var img = new Image();
img.readMat(mat); // 假设mat是已有的Mat对象
print.log("Mat已转换为Image:", img);


// 第五个方法:📌readBase64 - Base64 转 Image
/*
类别 详情说明
方法功能 将Base64编码字符串转换为Image对象
方法签名 Void image.readBase64(String bs)
返回值 Void(无返回值,直接修改Image实例)
参数 - String bs:Base64编码字符串
*/
// 示例:Base64字符串转Image
var img = new Image();
img.readBase64('base64str'); // 'base64str'为实际Base64编码串
print.log("Base64已转换为Image:", img);


// 第六个方法:📌readFile - 读取图片文件为Image
/*
类别 详情说明
方法功能 从文件读取图片并转换为Image对象
方法签名 Void image.readFile(String bs)
返回值 Void(无返回值,直接修改Image实例)
参数 - String bs:图片文件路径(可结合资源路径等使用)
*/
// 示例:从资源文件夹读取图片为Image
var img = new Image();
img.readFile(project.getResourcesPath() + "1.png");
print.log("从文件读取的Image:", img);


// 第七个方法:📌close - 释放图像资源
/*
类别 详情说明
方法功能 释放Image对象占用的资源,避免内存泄漏
方法签名 Void image.close()
返回值 Void(无返回值)
参数 无
*/
// 示例:释放Image资源
new Image().close();
print.log("图像资源已释放");

方法 1:OCR 识别(指定区域)
类别内容
主题OCR 识别、指定区域 OCR
方法OcrResult ocr(Single left, Single top, Single right, Single bottom)
返回值OcrResult
参数Single left:左边界(百分比,0 - 1)
Single top:上边界(百分比,0 - 1)
Single right:右边界(百分比,0 - 1)
Single bottom:下边界(百分比,0 - 1)
案例var image = screen.screenShotFull();
printl(image.ocr(0, 0, 1, 1));
image.close();
方法 2:获取图像 Base64 编码
类别内容
主题获取图像 Base64 编码
方法String base64()
返回值String
参数无
案例var image = screen.screenShotFull();
printl(image.base64());
方法 3:获取 Mat 对象
类别内容
主题获取 Mat 对象、Image 转 Mat
方法Mat getMat()
返回值Mat
参数无
案例new Image().getMat()
方法 4:Mat 转 Image
类别内容
主题Mat 转 Image、转换 Mat 为 Image
方法Void readMat(Mat mat)
返回值Void
参数Mat mat:待转换的 Mat 对象
案例var img = new Image();
img.readMat(mat);
方法 5:Base64 转 Image
类别内容
主题Base64 转 Image、转换 Base64 为 Image
方法Void readBase64(String bs)
返回值Void
参数String bs:Base64 编码字符串
案例var img = new Image();
img.readBase64('base64str');
方法 6:读取图片文件为 Image
类别内容
主题读取图片文件为 Image、文件转 Image
方法Void readFile(String bs)
返回值Void
参数String bs:图片文件路径
案例var img = new Image();
img.readFile(project.getResourcesPath() + "1.png");
方法 7:释放图像资源
类别内容
主题释放图像、图像资源释放
方法Void close()
返回值Void
参数无
案例new Image().close()
实战示例子:

// ... existing code ...

/*
🍎交流 QQ 群 711841924 群一,苹果内测群,528816639
🍎Image 图像处理方法小结
*/

//🍎Image 类 方法小结

// 实用综合示例:自动化验证码识别与处理系统
// 该示例展示了一个完整的图像处理流程,包括截图、OCR识别、图像处理和结果上传

/**
* 验证码处理系统 - 综合示例
* 功能:自动截取验证码区域、OCR识别、图像优化、结果上传
*/
function captchaProcessingSystem() {
    printl("=== 验证码处理系统启动 ===");
   
    try {
      // 1. 截取屏幕指定区域(验证码通常在固定位置)
      printl("1. 截取验证码区域...");
      var screenWidth = screen.getScreenWidth();
      var screenHeight = screen.getScreenHeight();
      
      // 假设验证码在屏幕右上角区域 (30%-50% width, 10%-20% height)
      var captchaImage = screen.screenShot(
            Math.floor(screenWidth * 0.2),
            Math.floor(screenHeight * 0.1),
            80
      );
      printl("   验证码截图完成");
      
      // 2. OCR识别验证码
      printl("2. OCR识别验证码...");
      var ocrResult = captchaImage.ocr(0, 0, 1, 1);
      var captchaText = ocrResult.getAllString();
      printl("   识别结果: " + captchaText);
      
      // 3. 获取图像Base64编码用于日志记录或网络传输
      printl("3. 获取图像Base64编码...");
      var base64Str = captchaImage.base64();
      printl("   Base64编码长度: " + base64Str.length);
      
      // 4. 获取Mat对象进行图像处理
      printl("4. 获取Mat对象进行图像优化...");
      var mat = captchaImage.getMat();
      printl("   获取Mat对象成功");
      
      // 5. 图像二值化处理以提高识别准确率
      printl("5. 图像二值化处理...");
      opencv.threshold(mat, 100, 255); // 二值化处理
      printl("   图像二值化完成");
      
      // 6. 将处理后的Mat转换回Image对象
      printl("6. 转换处理后的Mat为Image...");
      var processedImage = new Image();
      processedImage.readMat(mat);
      printl("   Mat转Image完成");
      
      // 7. 再次OCR识别处理后的图像
      printl("7. 对处理后的图像再次OCR识别...");
      var processedOcrResult = processedImage.ocr(0, 0, 1, 1);
      var processedCaptchaText = processedOcrResult.getAllString();
      printl("   处理后识别结果: " + processedCaptchaText);
      
      // 8. 将处理后的图像转换为Base64
      printl("8. 获取处理后图像的Base64...");
      var processedBase64 = processedImage.base64();
      printl("   处理后Base64编码长度: " + processedBase64.length);
      
      // 9. 构造用于上传的数据
      printl("9. 构造上传数据...");
      var uploadData = {
            originalCaptcha: captchaText,
            processedCaptcha: processedCaptchaText,
            originalImage: base64Str.substring(0, 50) + "...", // 截取部分展示
            processedImage: processedBase64.substring(0, 50) + "...", // 截取部分展示
            timestamp: new Date().toISOString()
      };
      printl("   数据构造完成: " + JSON.stringify(uploadData));
      
      // 10. 模拟上传到服务器
      printl("10. 模拟上传到服务器...");
      // 在实际应用中,这里会使用网络请求上传数据
      // new OkHttp().post("https://api.example.com/captcha", uploadData);
      printl("   数据上传完成");
      
      // 11. 保存处理后的图像到文件(用于调试和验证)
      printl("11. 保存处理后的图像到文件...");
      var resourcePath = project.getResourcesPath();
      var savePath = resourcePath + "/captcha_processed_" + Date.now() + ".png";
      // 在实际应用中,这里会保存图像到文件
      // processedImage.save(savePath);
      printl("   图像保存路径: " + savePath);
      
      // 12. 释放所有图像资源
      printl("12. 释放图像资源...");
      captchaImage.close();
      mat.close();
      processedImage.close();
      printl("   所有图像资源已释放");
      
      printl("=== 验证码处理系统执行完成 ===");
      return {
            success: true,
            originalText: captchaText,
            processedText: processedCaptchaText
      };
      
    } catch (error) {
      printl("验证码处理系统出错: " + error.message);
      return {
            success: false,
            error: error.message
      };
    }
}

/**
* 图像处理工具函数 - 图像格式转换器
* 功能:将图像在不同格式间转换,支持Base64、文件、Mat等格式
*/
function imageFormatConverter() {
    printl("=== 图像格式转换器 ===");
   
    try {
      // 1. 从文件读取图像
      printl("1. 从资源文件夹读取图像...");
      var imageFromFile = new Image();
      var resourcePath = project.getResourcesPath();
      var testImagePath = resourcePath + "/test_image.png";
      // 注意:实际使用时需要确保文件存在
      // imageFromFile.readFile(testImagePath);
      printl("   从文件读取图像完成: " + testImagePath);
      
      // 2. 转换为Base64
      printl("2. 转换为Base64...");
      // var base64FromFile = imageFromFile.base64();
      var base64FromFile = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAYAAAAfFcSJAAAADUlEQVR42mP8/5+hHgAHggJ/PchI7wAAAABJRU5ErkJggg=="; // 模拟Base64
      printl("   Base64转换完成,长度: " + base64FromFile.length);
      
      // 3. 从Base64创建新图像
      printl("3. 从Base64创建新图像...");
      var imageFromBase64 = new Image();
      imageFromBase64.readBase64(base64FromFile);
      printl("   Base64转图像完成");
      
      // 4. 获取Mat对象
      printl("4. 获取Mat对象...");
      var matFromBase64 = imageFromBase64.getMat();
      printl("   获取Mat对象完成");
      
      // 5. 从Mat创建新图像
      printl("5. 从Mat创建新图像...");
      var imageFromMat = new Image();
      imageFromMat.readMat(matFromBase64);
      printl("   Mat转图像完成");
      
      // 6. 再次转换为Base64进行验证
      printl("6. 验证转换一致性...");
      var base64FromMat = imageFromMat.base64();
      var isConsistent = base64FromFile === base64FromMat;
      printl("   转换一致性检查: " + (isConsistent ? "通过" : "失败"));
      
      // 7. 释放资源
      printl("7. 释放资源...");
      // imageFromFile.close();
      matFromBase64.close();
      // imageFromBase64.close();
      imageFromMat.close();
      printl("   资源释放完成");
      
      printl("=== 图像格式转换器执行完成 ===");
      return {
            success: true,
            consistency: isConsistent
      };
      
    } catch (error) {
      printl("图像格式转换器出错: " + error.message);
      return {
            success: false,
            error: error.message
      };
    }
}

/**
* 高级OCR识别系统 - 多区域识别与处理
* 功能:同时识别图像中多个区域的文字,并进行分类处理
*/
function advancedOcrSystem() {
    printl("=== 高级OCR识别系统 ===");
   
    try {
      // 1. 全屏截图
      printl("1. 全屏截图...");
      var fullScreenImage = screen.screenShotFull();
      printl("   全屏截图完成");
      
      // 2. 定义多个识别区域
      var ocrZones = [
            { name: "标题区域", left: 0, top: 0, right: 1, bottom: 0.1 },
            { name: "主要内容", left: 0, top: 0.1, right: 1, bottom: 0.8 },
            { name: "状态栏", left: 0, top: 0.9, right: 1, bottom: 1 },
            { name: "按钮区域", left: 0.7, top: 0.8, right: 1, bottom: 0.9 }
      ];
      
      // 3. 对每个区域进行OCR识别
      printl("2. 多区域OCR识别...");
      var ocrResults = [];
      for (var i = 0; i < ocrZones.length; i++) {
            var zone = ocrZones;
            printl("   识别区域: " + zone.name);
            
            var result = fullScreenImage.ocr(zone.left, zone.top, zone.right, zone.bottom);
            var text = result.getAllString();
            var detects = result.getAllDetect();
            
            ocrResults.push({
                zone: zone.name,
                text: text,
                detectCount: detects.length,
                details: detects
            });
            
            printl("   识别文字: " + text.substring(0, 50) + "...");
            printl("   识别目标数: " + detects.length);
      }
      
      // 4. 获取图像Base64用于存档
      printl("3. 获取图像Base64...");
      var imageBase64 = fullScreenImage.base64();
      printl("   Base64编码长度: " + imageBase64.length);
      
      // 5. 获取Mat对象用于图像分析
      printl("4. 获取Mat对象进行分析...");
      var imageMat = fullScreenImage.getMat();
      printl("   获取Mat对象完成");
      
      // 6. 图像灰度化处理
      printl("5. 图像灰度化处理...");
      opencv.toGray(imageMat);
      printl("   灰度化处理完成");
      
      // 7. 将处理后的Mat转换为Image
      printl("6. 转换处理后的Mat为Image...");
      var grayImage = new Image();
      grayImage.readMat(imageMat);
      printl("   Mat转Image完成");
      
      // 8. 对灰度图像再次进行OCR识别
      printl("7. 对灰度图像进行OCR识别...");
      var grayOcrResult = grayImage.ocr(0, 0, 1, 1);
      var grayText = grayOcrResult.getAllString();
      printl("   灰度图像识别文字长度: " + grayText.length);
      
      // 9. 构造结果报告
      printl("8. 构造结果报告...");
      var report = {
            timestamp: new Date().toISOString(),
            zones: ocrResults,
            originalTextLength: ocrResults.reduce((sum, r) => sum + r.text.length, 0),
            grayTextLength: grayText.length,
            imageBase64Length: imageBase64.length
      };
      printl("   报告构造完成");
      
      // 10. 释放所有资源
      printl("9. 释放所有资源...");
      fullScreenImage.close();
      imageMat.close();
      grayImage.close();
      printl("   资源释放完成");
      
      printl("=== 高级OCR识别系统执行完成 ===");
      return {
            success: true,
            report: report
      };
      
    } catch (error) {
      printl("高级OCR识别系统出错: " + error.message);
      return {
            success: false,
            error: error.message
      };
    }
}

// 执行示例
printl("&#127822;&#127822;&#127822; Image类方法综合示例 &#127822;&#127822;&#127822;");

// 执行验证码处理系统
var captchaResult = captchaProcessingSystem();
printl("验证码处理结果: " + JSON.stringify(captchaResult));

// 执行图像格式转换器
var converterResult = imageFormatConverter();
printl("格式转换结果: " + JSON.stringify(converterResult));

// 执行高级OCR识别系统
var ocrResult = advancedOcrSystem();
printl("高级OCR识别结果: " + JSON.stringify(ocrResult));

printl("&#127822;&#127822;&#127822; 所有示例执行完毕 &#127822;&#127822;&#127822;");

// 第一个方法:&#128204;ocr - 区域OCR识别
/*
类别 详情说明
方法功能 OCR识别指定区域的文字,返回识别结果
方法签名 OcrResult image.ocr(Single left, Single top, Single right, Single bottom)
返回值 OcrResult(OCR识别结果对象)
参数 - Single left:识别区域左边界(百分比,0-1)
- Single top:识别区域上边界(百分比,0-1)
- Single right:识别区域右边界(百分比,0-1)
- Single bottom:识别区域下边界(百分比,0-1)
*/
// 示例:全屏OCR识别
var image = screen.screenShotFull();
printl(image.ocr(0, 0, 1, 1));
image.close(); // 记得释放图片


// 第二个方法:&#128204;base64 - 获取图像Base64编码
/*
类别 详情说明
方法功能 获取图像的Base64编码字符串
方法签名 String image.base64()
返回值 String(图像的Base64编码字符串)
参数 无
*/
// 示例:获取全屏截图的Base64编码
var image = screen.screenShotFull();
printl(image.base64());
image.close(); // 记得释放图片


// 第三个方法:&#128204;getMat - 获取Mat对象
/*
类别 详情说明
方法功能 获取图像对应的Mat对象(用于OpenCV等后续处理)
方法签名 Mat image.getMat()
返回值 Mat(图像对应的Mat对象)
参数 无
*/
// 示例:获取图像的Mat对象
var image = screen.screenShotFull();
var mat = image.getMat();
print.log("获取到的Mat对象:", mat);
image.close(); // 记得释放图片


// 第四个方法:&#128204;readMat - Mat 转 Image
/*
类别 详情说明
方法功能 将Mat对象转换为Image对象(修改Image实例以承载Mat内容)
方法签名 Void image.readMat(Mat mat)
返回值 Void(无返回值,直接修改Image实例)
参数 - Mat mat:待转换的Mat对象
*/
// 示例:将Mat转换为Image
var img = new Image();
img.readMat(mat); // 假设mat是已有的Mat对象
print.log("Mat已转换为Image:", img);
img.close(); // 记得释放图片


// 第五个方法:&#128204;readBase64 - Base64 转 Image
/*
类别 详情说明
方法功能 将Base64编码字符串转换为Image对象
方法签名 Void image.readBase64(String bs)
返回值 Void(无返回值,直接修改Image实例)
参数 - String bs:Base64编码字符串
*/
// 示例:Base64字符串转Image
var img = new Image();
img.readBase64('base64str'); // 'base64str'为实际Base64编码串
print.log("Base64已转换为Image:", img);
img.close(); // 记得释放图片


// 第六个方法:&#128204;readFile - 读取图片文件为Image
/*
类别 详情说明
方法功能 从文件读取图片并转换为Image对象
方法签名 Void image.readFile(String bs)
返回值 Void(无返回值,直接修改Image实例)
参数 - String bs:图片文件路径(可结合资源路径等使用)
*/
// 示例:从资源文件夹读取图片为Image
var img = new Image();
img.readFile(project.getResourcesPath() + "/1.png");
print.log("从文件读取的Image:", img);
img.close(); // 记得释放图片


// 第七个方法:&#128204;close - 释放图像资源
/*
类别 详情说明
方法功能 释放Image对象占用的资源,避免内存泄漏
方法签名 Void image.close()
返回值 Void(无返回值)
参数 无
*/
// 示例:释放Image资源
var image = screen.screenShotFull();
image.close();
print.log("图像资源已释放");

// ... existing code ...

页: [1]
查看完整版本: AIWROK软件苹果IOS系统图色视觉[opencv]方法小结