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("🍎🍎🍎 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 ...
页:
[1]