 | |  |  | AIWROK软件苹果IOS系统图色视觉[opencv]方法小结
- /*
- 🍎交流 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[i];
- 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("🍎🍎🍎 Image类方法综合示例 🍎🍎🍎");
- // 执行验证码处理系统
- var captchaResult = captchaProcessingSystem();
- printl("验证码处理结果: " + JSON.stringify(captchaResult));
- // 执行图像格式转换器
- var converterResult = imageFormatConverter();
- printl("格式转换结果: " + JSON.stringify(converterResult));
- // 执行高级OCR识别系统
- var ocrResult = advancedOcrSystem();
- printl("高级OCR识别结果: " + JSON.stringify(ocrResult));
- printl("🍎🍎🍎 所有示例执行完毕 🍎🍎🍎");
- // 第一个方法:📌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());
- image.close(); // 记得释放图片
- // 第三个方法:📌getMat - 获取Mat对象
- /*
- 类别 详情说明
- 方法功能 获取图像对应的Mat对象(用于OpenCV等后续处理)
- 方法签名 Mat image.getMat()
- 返回值 Mat(图像对应的Mat对象)
- 参数 无
- */
- // 示例:获取图像的Mat对象
- var image = screen.screenShotFull();
- var mat = image.getMat();
- print.log("获取到的Mat对象:", mat);
- image.close(); // 记得释放图片
- // 第四个方法:📌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(); // 记得释放图片
- // 第五个方法:📌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(); // 记得释放图片
- // 第六个方法:📌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(); // 记得释放图片
- // 第七个方法:📌close - 释放图像资源
- /*
- 类别 详情说明
- 方法功能 释放Image对象占用的资源,避免内存泄漏
- 方法签名 Void image.close()
- 返回值 Void(无返回值)
- 参数 无
- */
- // 示例:释放Image资源
- var image = screen.screenShotFull();
- image.close();
- print.log("图像资源已释放");
- // ... existing code ...
复制代码
| |  | |  |
|