B2B网络软件

标题: AIWROK软件苹果IOS系统图色视觉[opencv]方法小结 [打印本页]

作者: YYPOST群发软件    时间: 10 小时前
标题: AIWROK软件苹果IOS系统图色视觉[opencv]方法小结
AIWROK软件苹果IOS系统图色视觉[opencv]方法小结
AIWROK软件苹果IOS系统图色视觉[opencv]方法小结 B2B网络软件 AIWROK软件苹果IOS系统图色视觉[opencv]方法小结 B2B网络软件

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

  5. //🍎Image 类 方法小结


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


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


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


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


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


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


  79. // 第七个方法:📌close - 释放图像资源
  80. /*
  81. 类别 详情说明
  82. 方法功能 释放Image对象占用的资源,避免内存泄漏
  83. 方法签名 Void image.close()
  84. 返回值 Void(无返回值)
  85. 参数 无
  86. */
  87. // 示例:释放Image资源
  88. new Image().close();
  89. 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()
实战示例子:


  1. // ... existing code ...

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

  6. //🍎Image 类 方法小结

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

  9. /**
  10. * 验证码处理系统 - 综合示例
  11. * 功能:自动截取验证码区域、OCR识别、图像优化、结果上传
  12. */
  13. function captchaProcessingSystem() {
  14.     printl("=== 验证码处理系统启动 ===");
  15.    
  16.     try {
  17.         // 1. 截取屏幕指定区域(验证码通常在固定位置)
  18.         printl("1. 截取验证码区域...");
  19.         var screenWidth = screen.getScreenWidth();
  20.         var screenHeight = screen.getScreenHeight();
  21.         
  22.         // 假设验证码在屏幕右上角区域 (30%-50% width, 10%-20% height)
  23.         var captchaImage = screen.screenShot(
  24.             Math.floor(screenWidth * 0.2),
  25.             Math.floor(screenHeight * 0.1),
  26.             80
  27.         );
  28.         printl("   验证码截图完成");
  29.         
  30.         // 2. OCR识别验证码
  31.         printl("2. OCR识别验证码...");
  32.         var ocrResult = captchaImage.ocr(0, 0, 1, 1);
  33.         var captchaText = ocrResult.getAllString();
  34.         printl("   识别结果: " + captchaText);
  35.         
  36.         // 3. 获取图像Base64编码用于日志记录或网络传输
  37.         printl("3. 获取图像Base64编码...");
  38.         var base64Str = captchaImage.base64();
  39.         printl("   Base64编码长度: " + base64Str.length);
  40.         
  41.         // 4. 获取Mat对象进行图像处理
  42.         printl("4. 获取Mat对象进行图像优化...");
  43.         var mat = captchaImage.getMat();
  44.         printl("   获取Mat对象成功");
  45.         
  46.         // 5. 图像二值化处理以提高识别准确率
  47.         printl("5. 图像二值化处理...");
  48.         opencv.threshold(mat, 100, 255); // 二值化处理
  49.         printl("   图像二值化完成");
  50.         
  51.         // 6. 将处理后的Mat转换回Image对象
  52.         printl("6. 转换处理后的Mat为Image...");
  53.         var processedImage = new Image();
  54.         processedImage.readMat(mat);
  55.         printl("   Mat转Image完成");
  56.         
  57.         // 7. 再次OCR识别处理后的图像
  58.         printl("7. 对处理后的图像再次OCR识别...");
  59.         var processedOcrResult = processedImage.ocr(0, 0, 1, 1);
  60.         var processedCaptchaText = processedOcrResult.getAllString();
  61.         printl("   处理后识别结果: " + processedCaptchaText);
  62.         
  63.         // 8. 将处理后的图像转换为Base64
  64.         printl("8. 获取处理后图像的Base64...");
  65.         var processedBase64 = processedImage.base64();
  66.         printl("   处理后Base64编码长度: " + processedBase64.length);
  67.         
  68.         // 9. 构造用于上传的数据
  69.         printl("9. 构造上传数据...");
  70.         var uploadData = {
  71.             originalCaptcha: captchaText,
  72.             processedCaptcha: processedCaptchaText,
  73.             originalImage: base64Str.substring(0, 50) + "...", // 截取部分展示
  74.             processedImage: processedBase64.substring(0, 50) + "...", // 截取部分展示
  75.             timestamp: new Date().toISOString()
  76.         };
  77.         printl("   数据构造完成: " + JSON.stringify(uploadData));
  78.         
  79.         // 10. 模拟上传到服务器
  80.         printl("10. 模拟上传到服务器...");
  81.         // 在实际应用中,这里会使用网络请求上传数据
  82.         // new OkHttp().post("https://api.example.com/captcha", uploadData);
  83.         printl("   数据上传完成");
  84.         
  85.         // 11. 保存处理后的图像到文件(用于调试和验证)
  86.         printl("11. 保存处理后的图像到文件...");
  87.         var resourcePath = project.getResourcesPath();
  88.         var savePath = resourcePath + "/captcha_processed_" + Date.now() + ".png";
  89.         // 在实际应用中,这里会保存图像到文件
  90.         // processedImage.save(savePath);
  91.         printl("   图像保存路径: " + savePath);
  92.         
  93.         // 12. 释放所有图像资源
  94.         printl("12. 释放图像资源...");
  95.         captchaImage.close();
  96.         mat.close();
  97.         processedImage.close();
  98.         printl("   所有图像资源已释放");
  99.         
  100.         printl("=== 验证码处理系统执行完成 ===");
  101.         return {
  102.             success: true,
  103.             originalText: captchaText,
  104.             processedText: processedCaptchaText
  105.         };
  106.         
  107.     } catch (error) {
  108.         printl("验证码处理系统出错: " + error.message);
  109.         return {
  110.             success: false,
  111.             error: error.message
  112.         };
  113.     }
  114. }

  115. /**
  116. * 图像处理工具函数 - 图像格式转换器
  117. * 功能:将图像在不同格式间转换,支持Base64、文件、Mat等格式
  118. */
  119. function imageFormatConverter() {
  120.     printl("=== 图像格式转换器 ===");
  121.    
  122.     try {
  123.         // 1. 从文件读取图像
  124.         printl("1. 从资源文件夹读取图像...");
  125.         var imageFromFile = new Image();
  126.         var resourcePath = project.getResourcesPath();
  127.         var testImagePath = resourcePath + "/test_image.png";
  128.         // 注意:实际使用时需要确保文件存在
  129.         // imageFromFile.readFile(testImagePath);
  130.         printl("   从文件读取图像完成: " + testImagePath);
  131.         
  132.         // 2. 转换为Base64
  133.         printl("2. 转换为Base64...");
  134.         // var base64FromFile = imageFromFile.base64();
  135.         var base64FromFile = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAYAAAAfFcSJAAAADUlEQVR42mP8/5+hHgAHggJ/PchI7wAAAABJRU5ErkJggg=="; // 模拟Base64
  136.         printl("   Base64转换完成,长度: " + base64FromFile.length);
  137.         
  138.         // 3. 从Base64创建新图像
  139.         printl("3. 从Base64创建新图像...");
  140.         var imageFromBase64 = new Image();
  141.         imageFromBase64.readBase64(base64FromFile);
  142.         printl("   Base64转图像完成");
  143.         
  144.         // 4. 获取Mat对象
  145.         printl("4. 获取Mat对象...");
  146.         var matFromBase64 = imageFromBase64.getMat();
  147.         printl("   获取Mat对象完成");
  148.         
  149.         // 5. 从Mat创建新图像
  150.         printl("5. 从Mat创建新图像...");
  151.         var imageFromMat = new Image();
  152.         imageFromMat.readMat(matFromBase64);
  153.         printl("   Mat转图像完成");
  154.         
  155.         // 6. 再次转换为Base64进行验证
  156.         printl("6. 验证转换一致性...");
  157.         var base64FromMat = imageFromMat.base64();
  158.         var isConsistent = base64FromFile === base64FromMat;
  159.         printl("   转换一致性检查: " + (isConsistent ? "通过" : "失败"));
  160.         
  161.         // 7. 释放资源
  162.         printl("7. 释放资源...");
  163.         // imageFromFile.close();
  164.         matFromBase64.close();
  165.         // imageFromBase64.close();
  166.         imageFromMat.close();
  167.         printl("   资源释放完成");
  168.         
  169.         printl("=== 图像格式转换器执行完成 ===");
  170.         return {
  171.             success: true,
  172.             consistency: isConsistent
  173.         };
  174.         
  175.     } catch (error) {
  176.         printl("图像格式转换器出错: " + error.message);
  177.         return {
  178.             success: false,
  179.             error: error.message
  180.         };
  181.     }
  182. }

  183. /**
  184. * 高级OCR识别系统 - 多区域识别与处理
  185. * 功能:同时识别图像中多个区域的文字,并进行分类处理
  186. */
  187. function advancedOcrSystem() {
  188.     printl("=== 高级OCR识别系统 ===");
  189.    
  190.     try {
  191.         // 1. 全屏截图
  192.         printl("1. 全屏截图...");
  193.         var fullScreenImage = screen.screenShotFull();
  194.         printl("   全屏截图完成");
  195.         
  196.         // 2. 定义多个识别区域
  197.         var ocrZones = [
  198.             { name: "标题区域", left: 0, top: 0, right: 1, bottom: 0.1 },
  199.             { name: "主要内容", left: 0, top: 0.1, right: 1, bottom: 0.8 },
  200.             { name: "状态栏", left: 0, top: 0.9, right: 1, bottom: 1 },
  201.             { name: "按钮区域", left: 0.7, top: 0.8, right: 1, bottom: 0.9 }
  202.         ];
  203.         
  204.         // 3. 对每个区域进行OCR识别
  205.         printl("2. 多区域OCR识别...");
  206.         var ocrResults = [];
  207.         for (var i = 0; i < ocrZones.length; i++) {
  208.             var zone = ocrZones[i];
  209.             printl("   识别区域: " + zone.name);
  210.             
  211.             var result = fullScreenImage.ocr(zone.left, zone.top, zone.right, zone.bottom);
  212.             var text = result.getAllString();
  213.             var detects = result.getAllDetect();
  214.             
  215.             ocrResults.push({
  216.                 zone: zone.name,
  217.                 text: text,
  218.                 detectCount: detects.length,
  219.                 details: detects
  220.             });
  221.             
  222.             printl("     识别文字: " + text.substring(0, 50) + "...");
  223.             printl("     识别目标数: " + detects.length);
  224.         }
  225.         
  226.         // 4. 获取图像Base64用于存档
  227.         printl("3. 获取图像Base64...");
  228.         var imageBase64 = fullScreenImage.base64();
  229.         printl("   Base64编码长度: " + imageBase64.length);
  230.         
  231.         // 5. 获取Mat对象用于图像分析
  232.         printl("4. 获取Mat对象进行分析...");
  233.         var imageMat = fullScreenImage.getMat();
  234.         printl("   获取Mat对象完成");
  235.         
  236.         // 6. 图像灰度化处理
  237.         printl("5. 图像灰度化处理...");
  238.         opencv.toGray(imageMat);
  239.         printl("   灰度化处理完成");
  240.         
  241.         // 7. 将处理后的Mat转换为Image
  242.         printl("6. 转换处理后的Mat为Image...");
  243.         var grayImage = new Image();
  244.         grayImage.readMat(imageMat);
  245.         printl("   Mat转Image完成");
  246.         
  247.         // 8. 对灰度图像再次进行OCR识别
  248.         printl("7. 对灰度图像进行OCR识别...");
  249.         var grayOcrResult = grayImage.ocr(0, 0, 1, 1);
  250.         var grayText = grayOcrResult.getAllString();
  251.         printl("   灰度图像识别文字长度: " + grayText.length);
  252.         
  253.         // 9. 构造结果报告
  254.         printl("8. 构造结果报告...");
  255.         var report = {
  256.             timestamp: new Date().toISOString(),
  257.             zones: ocrResults,
  258.             originalTextLength: ocrResults.reduce((sum, r) => sum + r.text.length, 0),
  259.             grayTextLength: grayText.length,
  260.             imageBase64Length: imageBase64.length
  261.         };
  262.         printl("   报告构造完成");
  263.         
  264.         // 10. 释放所有资源
  265.         printl("9. 释放所有资源...");
  266.         fullScreenImage.close();
  267.         imageMat.close();
  268.         grayImage.close();
  269.         printl("   资源释放完成");
  270.         
  271.         printl("=== 高级OCR识别系统执行完成 ===");
  272.         return {
  273.             success: true,
  274.             report: report
  275.         };
  276.         
  277.     } catch (error) {
  278.         printl("高级OCR识别系统出错: " + error.message);
  279.         return {
  280.             success: false,
  281.             error: error.message
  282.         };
  283.     }
  284. }

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

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

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

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

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

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


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


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


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


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


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


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

  388. // ... existing code ...
复制代码







欢迎光临 B2B网络软件 (http://bbs.niubt.cn/) Powered by Discuz! X3.2