B2B网络软件

标题: AIWROK软件找字与OCR方法汇总示例 [打印本页]

作者: YYPOST群发软件    时间: 8 小时前
标题: AIWROK软件找字与OCR方法汇总示例



AIWROK软件找字与OCR方法汇总示例


AIWROK软件找字与OCR方法汇总示例 B2B网络软件
AIWROK软件找字与OCR方法汇总示例 B2B网络软件

  1. // 找字与OCR方法汇总示例
  2. // 兼容ES5和Rhino引擎
  3. // 适用于安卓AIWROK环境
  4. // 技术交流QQ群711841924群一,苹果内测群,528816639

  5. /**
  6. * 模块:基础找字方法
  7. * 功能:提供多种文字查找方法
  8. */
  9. var FindTextMethods = {
  10.     /**
  11.      * 方法1:基础找字方法
  12.      * @param {string} text - 要查找的文字
  13.      * @param {number} timeout - 超时时间(毫秒)
  14.      * @returns {Object} 找到的文字位置信息
  15.      */
  16.     findTextBasic: function(text, timeout) {
  17.         timeout = timeout || 5000;
  18.         var start = new Date().getTime();
  19.         var result;
  20.         
  21.         while (new Date().getTime() - start < timeout) {
  22.             try {
  23.                 if (typeof auto !== 'undefined' && typeof auto.findText === 'function') {
  24.                     result = auto.findText(text, 0.8);
  25.                     if (result) {
  26.                         return result;
  27.                     }
  28.                 }
  29.             } catch (e) {
  30.                 // 忽略错误,继续尝试
  31.             }
  32.             sleep.millisecond(100);
  33.         }
  34.         
  35.         return null;
  36.     },
  37.    
  38.     /**
  39.      * 方法2:区域找字方法
  40.      * @param {string} text - 要查找的文字
  41.      * @param {number} x1 - 区域左上角X坐标
  42.      * @param {number} y1 - 区域左上角Y坐标
  43.      * @param {number} x2 - 区域右下角X坐标
  44.      * @param {number} y2 - 区域右下角Y坐标
  45.      * @returns {Object} 找到的文字位置信息
  46.      */
  47.     findTextInRegion: function(text, x1, y1, x2, y2) {
  48.         try {
  49.             if (typeof auto !== 'undefined' && typeof auto.findText === 'function') {
  50.                 var region = [x1, y1, x2, y2];
  51.                 var result = auto.findText(text, 0.8, region);
  52.                 return result;
  53.             }
  54.         } catch (e) {
  55.             // 忽略错误
  56.         }
  57.         return null;
  58.     },
  59.    
  60.     /**
  61.      * 方法3:模糊找字方法
  62.      * @param {string} text - 要查找的文字
  63.      * @param {number} similarity - 相似度(0-1)
  64.      * @returns {Object} 找到的文字位置信息
  65.      */
  66.     findTextFuzzy: function(text, similarity) {
  67.         similarity = similarity || 0.8;
  68.         try {
  69.             if (typeof auto !== 'undefined' && typeof auto.findText === 'function') {
  70.                 var result = auto.findText(text, similarity);
  71.                 return result;
  72.             }
  73.         } catch (e) {
  74.             // 忽略错误
  75.         }
  76.         return null;
  77.     },
  78.    
  79.     /**
  80.      * 方法4:多次尝试找字方法
  81.      * @param {string} text - 要查找的文字
  82.      * @param {number} maxAttempts - 最大尝试次数
  83.      * @param {number} interval - 尝试间隔(毫秒)
  84.      * @returns {Object} 找到的文字位置信息
  85.      */
  86.     findTextWithRetry: function(text, maxAttempts, interval) {
  87.         maxAttempts = maxAttempts || 5;
  88.         interval = interval || 1000;
  89.         
  90.         for (var i = 0; i < maxAttempts; i++) {
  91.             try {
  92.                 if (typeof auto !== 'undefined' && typeof auto.findText === 'function') {
  93.                     var result = auto.findText(text, 0.8);
  94.                     if (result) {
  95.                         return result;
  96.                     }
  97.                 }
  98.             } catch (e) {
  99.                 // 忽略错误,继续尝试
  100.             }
  101.             sleep.millisecond(interval);
  102.         }
  103.         
  104.         return null;
  105.     },
  106.    
  107.     /**
  108.      * 方法5:批量找字方法
  109.      * @param {Array} texts - 要查找的文字数组
  110.      * @returns {Object} 找到的第一个文字位置信息
  111.      */
  112.     findTextBatch: function(texts) {
  113.         for (var i = 0; i < texts.length; i++) {
  114.             try {
  115.                 if (typeof auto !== 'undefined' && typeof auto.findText === 'function') {
  116.                     var result = auto.findText(texts[i], 0.8);
  117.                     if (result) {
  118.                         return {
  119.                             text: texts[i],
  120.                             position: result
  121.                         };
  122.                     }
  123.                 }
  124.             } catch (e) {
  125.                 // 忽略错误,继续尝试下一个文字
  126.             }
  127.         }
  128.         
  129.         return null;
  130.     },
  131.    
  132.     /**
  133.      * 方法6:找字并点击方法
  134.      * @param {string} text - 要查找并点击的文字
  135.      * @param {number} timeout - 超时时间(毫秒)
  136.      * @returns {boolean} 是否成功点击
  137.      */
  138.     findTextAndClick: function(text, timeout) {
  139.         var result = this.findTextBasic(text, timeout);
  140.         if (result) {
  141.             var x = result.x + result.width / 2;
  142.             var y = result.y + result.height / 2;
  143.             // 添加随机偏移模拟真实点击
  144.             var randomX = x + (Math.random() - 0.5) * 10;
  145.             var randomY = y + (Math.random() - 0.5) * 10;
  146.             try {
  147.                 if (typeof touch !== 'undefined' && typeof touch.tap === 'function') {
  148.                     touch.tap(randomX, randomY);
  149.                     return true;
  150.                 }
  151.             } catch (e) {
  152.                 // 忽略错误
  153.             }
  154.         }
  155.         return false;
  156.     },
  157.    
  158.     /**
  159.      * 方法7:等待文字出现方法
  160.      * @param {string} text - 要等待的文字
  161.      * @param {number} timeout - 超时时间(秒)
  162.      * @returns {boolean} 是否在超时前找到文字
  163.      */
  164.     waitForText: function(text, timeout) {
  165.         timeout = timeout || 30;
  166.         var startTime = Date.now();
  167.         var timeoutMs = timeout * 1000;
  168.         
  169.         while (Date.now() - startTime < timeoutMs) {
  170.             try {
  171.                 if (typeof auto !== 'undefined' && typeof auto.findText === 'function') {
  172.                     var result = auto.findText(text, 0.8);
  173.                     if (result) {
  174.                         return true;
  175.                     }
  176.                 }
  177.             } catch (e) {
  178.                 // 忽略错误,继续尝试
  179.             }
  180.             sleep.millisecond(1000);
  181.         }
  182.         
  183.         return false;
  184.     }
  185. };

  186. /**
  187. * 模块:OCR方法
  188. * 功能:提供多种OCR文字识别方法
  189. */
  190. var OCRMethods = {
  191.     /**
  192.      * 方法1:基础OCR识别
  193.      * @param {number} x1 - 区域左上角X坐标
  194.      * @param {number} y1 - 区域左上角Y坐标
  195.      * @param {number} x2 - 区域右下角X坐标
  196.      * @param {number} y2 - 区域右下角Y坐标
  197.      * @returns {string} 识别到的文字
  198.      */
  199.     ocrBasic: function(x1, y1, x2, y2) {
  200.         try {
  201.             if (typeof ocr === 'function') {
  202.                 var result = ocr(x1, y1, x2, y2);
  203.                 return result;
  204.             }
  205.         } catch (e) {
  206.             // 忽略错误,返回空字符串
  207.         }
  208.         return "";
  209.     },
  210.    
  211.     /**
  212.      * 方法2:带语言设置的OCR识别
  213.      * @param {number} x1 - 区域左上角X坐标
  214.      * @param {number} y1 - 区域左上角Y坐标
  215.      * @param {number} x2 - 区域右下角X坐标
  216.      * @param {number} y2 - 区域右下角Y坐标
  217.      * @param {string} lang - 语言设置
  218.      * @returns {string} 识别到的文字
  219.      */
  220.     ocrWithLanguage: function(x1, y1, x2, y2, lang) {
  221.         try {
  222.             if (typeof ocr === 'function') {
  223.                 lang = lang || "chi_sim";
  224.                 var result = ocr(x1, y1, x2, y2, lang);
  225.                 return result;
  226.             }
  227.         } catch (e) {
  228.             // 忽略错误,返回空字符串
  229.         }
  230.         return "";
  231.     },
  232.    
  233.     /**
  234.      * 方法3:全屏OCR识别
  235.      * @returns {string} 识别到的文字
  236.      */
  237.     ocrFullScreen: function() {
  238.         try {
  239.             if (typeof ocr === 'function') {
  240.                 var screenWidth = 0;
  241.                 var screenHeight = 0;
  242.                 try {
  243.                     if (typeof screen !== 'undefined' && typeof screen.getScreenWidth === 'function') {
  244.                         screenWidth = screen.getScreenWidth();
  245.                         screenHeight = screen.getScreenHeight();
  246.                     }
  247.                 } catch (e) {
  248.                     // 忽略错误,使用默认值
  249.                 }
  250.                 var result = ocr(0, 0, screenWidth, screenHeight);
  251.                 return result;
  252.             }
  253.         } catch (e) {
  254.             // 忽略错误,返回空字符串
  255.         }
  256.         return "";
  257.     },
  258.    
  259.     /**
  260.      * 方法4:OCR识别并查找特定文字
  261.      * @param {number} x1 - 区域左上角X坐标
  262.      * @param {number} y1 - 区域左上角Y坐标
  263.      * @param {number} x2 - 区域右下角X坐标
  264.      * @param {number} y2 - 区域右下角Y坐标
  265.      * @param {string} keyword - 要查找的关键字
  266.      * @returns {boolean} 是否找到关键字
  267.      */
  268.     ocrAndFindKeyword: function(x1, y1, x2, y2, keyword) {
  269.         try {
  270.             var text = this.ocrBasic(x1, y1, x2, y2);
  271.             return text.indexOf(keyword) !== -1;
  272.         } catch (e) {
  273.             // 忽略错误,返回false
  274.         }
  275.         return false;
  276.     },
  277.    
  278.     /**
  279.      * 方法5:OCR识别并提取数字
  280.      * @param {number} x1 - 区域左上角X坐标
  281.      * @param {number} y1 - 区域左上角Y坐标
  282.      * @param {number} x2 - 区域右下角X坐标
  283.      * @param {number} y2 - 区域右下角Y坐标
  284.      * @returns {Array} 提取到的数字数组
  285.      */
  286.     ocrExtractNumbers: function(x1, y1, x2, y2) {
  287.         try {
  288.             var text = this.ocrBasic(x1, y1, x2, y2);
  289.             var numbers = text.match(/\d+/g) || [];
  290.             return numbers;
  291.         } catch (e) {
  292.             // 忽略错误,返回空数组
  293.         }
  294.         return [];
  295.     },
  296.    
  297.     /**
  298.      * 方法6:OCR识别并解析坐标
  299.      * @param {number} x1 - 区域左上角X坐标
  300.      * @param {number} y1 - 区域左上角Y坐标
  301.      * @param {number} x2 - 区域右下角X坐标
  302.      * @param {number} y2 - 区域右下角Y坐标
  303.      * @returns {Array} 解析到的坐标数组
  304.      */
  305.     ocrExtractCoordinates: function(x1, y1, x2, y2) {
  306.         try {
  307.             var text = this.ocrBasic(x1, y1, x2, y2);
  308.             var coords = [];
  309.             var regex = /(\d+),(\d+)/g;
  310.             var match;
  311.             
  312.             while ((match = regex.exec(text)) !== null) {
  313.                 coords.push({
  314.                     x: parseInt(match[1], 10),
  315.                     y: parseInt(match[2], 10)
  316.                 });
  317.             }
  318.             
  319.             return coords;
  320.         } catch (e) {
  321.             // 忽略错误,返回空数组
  322.         }
  323.         return [];
  324.     },
  325.    
  326.     /**
  327.      * 方法7:OCR识别并提取邮箱
  328.      * @param {number} x1 - 区域左上角X坐标
  329.      * @param {number} y1 - 区域左上角Y坐标
  330.      * @param {number} x2 - 区域右下角X坐标
  331.      * @param {number} y2 - 区域右下角Y坐标
  332.      * @returns {Array} 提取到的邮箱数组
  333.      */
  334.     ocrExtractEmails: function(x1, y1, x2, y2) {
  335.         try {
  336.             var text = this.ocrBasic(x1, y1, x2, y2);
  337.             var emails = text.match(/[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,}/g) || [];
  338.             return emails;
  339.         } catch (e) {
  340.             // 忽略错误,返回空数组
  341.         }
  342.         return [];
  343.     },
  344.    
  345.     /**
  346.      * 方法8:OCR识别并提取URL
  347.      * @param {number} x1 - 区域左上角X坐标
  348.      * @param {number} y1 - 区域左上角Y坐标
  349.      * @param {number} x2 - 区域右下角X坐标
  350.      * @param {number} y2 - 区域右下角Y坐标
  351.      * @returns {Array} 提取到的URL数组
  352.      */
  353.     ocrExtractURLs: function(x1, y1, x2, y2) {
  354.         try {
  355.             var text = this.ocrBasic(x1, y1, x2, y2);
  356.             var urls = text.match(/https?:\/\/[\w\-]+(\.[\w\-]+)+([\w\-\.,@?^=%&:/~\+#]*[\w\-\@?^=%&/~\+#])?/g) || [];
  357.             return urls;
  358.         } catch (e) {
  359.             // 忽略错误,返回空数组
  360.         }
  361.         return [];
  362.     },
  363.    
  364.     /**
  365.      * 方法9:基础文字查询方法 - 查询包含文字
  366.      * @param {string} text - 要查询的文字
  367.      * @returns {object|null} 识别到的目标对象或null
  368.      */
  369.     findIncludeText: function(text) {
  370.         try {
  371.             var result = new ocrResult().findIncludeText(text);
  372.             return result;
  373.         } catch (e) {
  374.             // 忽略错误,返回null
  375.         }
  376.         return null;
  377.     },
  378.    
  379.     /**
  380.      * 方法10:基础文字查询方法 - 查询包含文字(多目标)
  381.      * @param {string} text - 要查询的文字
  382.      * @returns {Array} 识别到的目标对象数组
  383.      */
  384.     findIncludeTexts: function(text) {
  385.         try {
  386.             var result = new ocrResult().findIncludeTexts(text);
  387.             return result;
  388.         } catch (e) {
  389.             // 忽略错误,返回空数组
  390.         }
  391.         return [];
  392.     },
  393.    
  394.     /**
  395.      * 方法11:基础文字查询方法 - 模糊查询(近似匹配)
  396.      * @param {string} text - 要查询的文字
  397.      * @returns {object|null} 识别到的模糊匹配目标或null
  398.      */
  399.     findSimText: function(text) {
  400.         try {
  401.             var img = screen.screenShotFull();
  402.             var ocrres = img.MLKitOcr('zh');
  403.             var result = ocrres.findSimText(text);
  404.             img.recycle();
  405.             return result;
  406.         } catch (e) {
  407.             // 忽略错误,返回null
  408.         }
  409.         return null;
  410.     },
  411.    
  412.     /**
  413.      * 方法12:基础文字查询方法 - 精确查询文字
  414.      * @param {string} text - 要查询的文字
  415.      * @returns {object|null} 识别到的精确目标或null
  416.      */
  417.     findText: function(text) {
  418.         try {
  419.             var img = screen.screenShotFull();
  420.             var ocrres = img.MLKitOcr('zh');
  421.             var result = ocrres.findText(text);
  422.             img.recycle();
  423.             return result;
  424.         } catch (e) {
  425.             // 忽略错误,返回null
  426.         }
  427.         return null;
  428.     },
  429.    
  430.     /**
  431.      * 方法13:基础文字查询方法 - 获取所有识别目标
  432.      * @returns {Array} 所有识别目标的数组
  433.      */
  434.     getAllDetect: function() {
  435.         try {
  436.             var result = new ocrResult().getAllDetect();
  437.             return result;
  438.         } catch (e) {
  439.             // 忽略错误,返回空数组
  440.         }
  441.         return [];
  442.     },
  443.    
  444.     /**
  445.      * 方法14:基础文字查询方法 - 获取所有识别文字
  446.      * @returns {string} 所有识别文字的拼接结果
  447.      */
  448.     getAllString: function() {
  449.         try {
  450.             var result = new ocrResult().getAllString();
  451.             return result;
  452.         } catch (e) {
  453.             // 忽略错误,返回空字符串
  454.         }
  455.         return "";
  456.     },
  457.    
  458.     /**
  459.      * 方法15:基础文字查询方法 - 获取JSON格式结果
  460.      * @returns {string} OCR识别结果的JSON字符串
  461.      */
  462.     getJson: function() {
  463.         try {
  464.             var result = new ocrResult().getJson();
  465.             return result;
  466.         } catch (e) {
  467.             // 忽略错误,返回空字符串
  468.         }
  469.         return "";
  470.     },
  471.    
  472.     /**
  473.      * 方法16:基础文字查询方法 - 获取JSON字符串
  474.      * @returns {string} OCR识别结果的JSON字符串
  475.      */
  476.     getJsonString: function() {
  477.         try {
  478.             var result = new ocrResult().getJsonString();
  479.             return result;
  480.         } catch (e) {
  481.             // 忽略错误,返回空字符串
  482.         }
  483.         return "";
  484.     },
  485.    
  486.     /**
  487.      * 方法17:核心识别方法 - MLKitOcr文字识别(Google MLKit引擎)
  488.      * @param {string} lang - 识别语言,默认"zh"
  489.      * @returns {object|null} OCR识别结果对象或null
  490.      */
  491.     MLKitOcr: function(lang) {
  492.         try {
  493.             lang = lang || "zh";
  494.             var img = screen.screenShotFull();
  495.             var result = img.MLKitOcr(lang);
  496.             img.recycle();
  497.             return result;
  498.         } catch (e) {
  499.             console.log("MLKitOcr error:", e.message);
  500.             return null;
  501.         }
  502.     },
  503.    
  504.     /**
  505.      * 方法18:核心识别方法 - MLKitOcrRect文字区域识别
  506.      * @param {string} lang - 识别语言,默认"zh"
  507.      * @param {Array} region - 识别区域的百分比坐标 [x1, y1, x2, y2]
  508.      * @returns {object|null} OCR识别结果对象或null
  509.      */
  510.     MLKitOcrRect: function(lang, region) {
  511.         try {
  512.             lang = lang || "zh";
  513.             region = region || [0, 0, 1, 1];
  514.             var img = screen.screenShotFull();
  515.             var result = img.MLKitOcrRect(lang, region);
  516.             img.recycle();
  517.             return result;
  518.         } catch (e) {
  519.             console.log("MLKitOcrRect error:", e.message);
  520.             return null;
  521.         }
  522.     },
  523.    
  524.     /**
  525.      * 方法19:核心识别方法 - aiworkOCR文字识别
  526.      * @param {number} size - 识别尺寸,推荐值:640、320
  527.      * @param {Array} region - 识别区域的百分比坐标 [x1, y1, x2, y2]
  528.      * @returns {object|null} OCR识别结果对象或null
  529.      */
  530.     aiworkOCR: function(size, region) {
  531.         try {
  532.             size = size || 640;
  533.             region = region || [0, 0, 1, 1];
  534.             var img = screen.screenShotFull();
  535.             var result = img.aiworkOCR(size, region);
  536.             img.recycle();
  537.             return result;
  538.         } catch (e) {
  539.             console.log("aiworkOCR error:", e.message);
  540.             return null;
  541.         }
  542.     },
  543.    
  544.     /**
  545.      * 方法20:核心识别方法 - paddleOCR文字识别
  546.      * @param {number} size - 识别尺寸,推荐值:640、320
  547.      * @param {Array} region - 识别区域的百分比坐标 [x1, y1, x2, y2]
  548.      * @returns {object|null} OCR识别结果对象或null
  549.      */
  550.     paddleOCR: function(size, region) {
  551.         try {
  552.             size = size || 640;
  553.             region = region || [0, 0, 1, 1];
  554.             var img = screen.screenShotFull();
  555.             var result = img.paddleOCR(size, region);
  556.             img.recycle();
  557.             return result;
  558.         } catch (e) {
  559.             console.log("paddleOCR error:", e.message);
  560.             return null;
  561.         }
  562.     },
  563.    
  564.     /**
  565.      * 方法21:OpenCV相关方法 - 通过训练字库识别
  566.      * @param {object} matImg - 输入的图片对象(Mat类型)
  567.      * @param {string} dictPath - 字库文件路径/名称
  568.      * @param {number} threshold - 相似度阈值(0~1)
  569.      * @param {number} expectedCount - 预期识别的文字数量
  570.      * @param {Array} region - 识别区域的百分比坐标 [x1,y1,x2,y2]
  571.      * @returns {object|null} OCR识别结果对象或null
  572.      */
  573.     opencvOCR: function(matImg, dictPath, threshold, expectedCount, region) {
  574.         try {
  575.             if (typeof opencv !== 'undefined' && typeof opencv.OCR === 'function') {
  576.                 dictPath = dictPath || "";
  577.                 threshold = threshold || 0;
  578.                 expectedCount = expectedCount || 0;
  579.                 region = region || [];
  580.                 var result = opencv.OCR(matImg, dictPath, threshold, expectedCount, region);
  581.                 return result;
  582.             }
  583.         } catch (e) {
  584.             // 忽略错误,返回null
  585.         }
  586.         return null;
  587.     },
  588.    
  589.     /**
  590.      * 方法22:OpenCV相关方法 - 基于CV文件的OCR识别
  591.      * @param {string} cvFileName - CV文件名
  592.      * @returns {object|null} OCR识别结果对象或null
  593.      */
  594.     opencvOCREx: function(cvFileName) {
  595.         try {
  596.             if (typeof opencv !== 'undefined' && typeof opencv.OCREx === 'function') {
  597.                 cvFileName = cvFileName || "";
  598.                 var result = opencv.OCREx(cvFileName);
  599.                 return result;
  600.             }
  601.         } catch (e) {
  602.             console.log("opencvOCREx error:", e.message);
  603.             return null;
  604.         }
  605.         return null;
  606.     }
  607. };



  608. /**
  609. * 模块:OCR引擎管理
  610. * 功能:管理OCR引擎的加载和卸载
  611. */
  612. var OCREngineManager = {
  613.     /**
  614.      * 加载OCR引擎
  615.      * @param {string} lang - 语言模型
  616.      * @returns {boolean} 是否加载成功
  617.      */
  618.     loadOCREngine: function(lang) {
  619.         lang = lang || "chi_sim";
  620.         try {
  621.             if (typeof loadOCR === 'function') {
  622.                 var result = loadOCR(lang);
  623.                 return result;
  624.             } else {
  625.                 console.log("loadOCR function not available");
  626.                 return false;
  627.             }
  628.         } catch (e) {
  629.             console.log("Error loading OCR engine:", e.message);
  630.             return false;
  631.         }
  632.     },
  633.    
  634.     /**
  635.      * 卸载OCR引擎
  636.      * @returns {boolean} 是否卸载成功
  637.      */
  638.     unloadOCREngine: function() {
  639.         try {
  640.             if (typeof unloadOCR === 'function') {
  641.                 var result = unloadOCR();
  642.                 return result;
  643.             } else {
  644.                 console.log("unloadOCR function not available");
  645.                 return false;
  646.             }
  647.         } catch (e) {
  648.             console.log("Error unloading OCR engine:", e.message);
  649.             return false;
  650.         }
  651.     },
  652.    
  653.     /**
  654.      * 检查OCR引擎状态
  655.      * @returns {boolean} OCR引擎是否已加载
  656.      */
  657.     isOCREngineLoaded: function() {
  658.         try {
  659.             if (typeof isOCRLoaded === 'function') {
  660.                 var result = isOCRLoaded();
  661.                 return result;
  662.             } else {
  663.                 console.log("isOCRLoaded function not available");
  664.                 return false;
  665.             }
  666.         } catch (e) {
  667.             console.log("Error checking OCR engine status:", e.message);
  668.             return false;
  669.         }
  670.     }
  671. };

  672. /**
  673. * 模块:工具函数
  674. * 功能:提供各种工具函数
  675. */
  676. var Utils = {
  677.     /**
  678.      * 延迟执行
  679.      * @param {number} ms - 延迟毫秒数
  680.      */
  681.     sleep: function(ms) {
  682.         java.lang.Thread.sleep(ms);
  683.     },
  684.    
  685.     /**
  686.      * 获取设备信息
  687.      * @returns {Object} 设备信息
  688.      */
  689.     getDeviceInfo: function() {
  690.         var screenWidth = 0;
  691.         var screenHeight = 0;
  692.         
  693.         try {
  694.             if (typeof screen !== 'undefined' && typeof screen.getScreenWidth === 'function') {
  695.                 screenWidth = screen.getScreenWidth();
  696.                 screenHeight = screen.getScreenHeight();
  697.             }
  698.         } catch (e) {
  699.             // 忽略错误,使用默认值
  700.         }
  701.         
  702.         return {
  703.             width: screenWidth,
  704.             height: screenHeight,
  705.             model: "未知",
  706.             brand: "未知",
  707.             sdk: "未知",
  708.             androidVersion: "未知"
  709.         };
  710.     },
  711.    
  712.     /**
  713.      * 创建图像对象
  714.      * @param {string} path - 图像路径
  715.      * @returns {Object} 图像对象
  716.      */
  717.     createImage: function(path) {
  718.         try {
  719.             var img = new image();
  720.             img.read(path);
  721.             return img;
  722.         } catch (e) {
  723.             console.log("Error creating image object:", e.message);
  724.             return null;
  725.         }
  726.     },
  727.    
  728.     /**
  729.      * 打印日志
  730.      * @param {string} message - 日志消息
  731.      */
  732.     log: function(message) {
  733.         console.log(message);
  734.     },
  735.    
  736.     /**
  737.      * 随机数生成
  738.      * @param {number} min - 最小值
  739.      * @param {number} max - 最大值
  740.      * @returns {number} 随机数
  741.      */
  742.     random: function(min, max) {
  743.         return Math.floor(Math.random() * (max - min + 1)) + min;
  744.     }
  745. };

  746. /**
  747. * 综合示例:使用找字和OCR方法
  748. */
  749. function runComprehensiveDemo() {
  750.     console.log("=== AIWROK 找字与OCR方法终极汇总示例 ===");
  751.    
  752.     // 1. 打印设备信息
  753.     console.log("\n1. 设备信息:");
  754.     var deviceInfo = Utils.getDeviceInfo();
  755.     console.log("设备型号: " + deviceInfo.model);
  756.     console.log("屏幕尺寸: " + deviceInfo.width + "x" + deviceInfo.height);
  757.     console.log("Android版本: " + deviceInfo.androidVersion);
  758.    
  759.     // 2. 尝试使用基础找字方法
  760.     console.log("\n2. 基础找字示例:");
  761.     var textResult = FindTextMethods.findTextBasic("确定", 3000);
  762.     if (textResult) {
  763.         console.log("找到文字'确定',位置: x=" + textResult.x + ", y=" + textResult.y);
  764.     } else {
  765.         console.log("未找到文字'确定'");
  766.     }
  767.    
  768.     // 3. 尝试使用OCR识别并点击
  769.     console.log("\n3. OCR识别与点击示例:");
  770.     var targetText = "雷电"; // 要查找并点击的文字
  771.     var clicked = false;
  772.    
  773.     // 尝试使用内置的MLKitOcr进行识别
  774.     console.log("\n1. 尝试使用MLKitOcr进行识别:");
  775.     var mlkitResult = OCRMethods.MLKitOcr('zh');
  776.     if (mlkitResult) {
  777.         console.log("MLKitOcr识别成功");
  778.         console.log("MLKitOcr识别结果:");
  779.         console.log(mlkitResult);
  780.         
  781.         // 尝试查找并点击目标文字
  782.         try {
  783.             var target = mlkitResult.findIncludeText(targetText);
  784.             if (target) {
  785.                 console.log("使用MLKitOcr找到文字'" + targetText + "',正在点击...");
  786.                 target.hidClick();
  787.                 clicked = true;
  788.                 console.log("点击成功!");
  789.             } else {
  790.                 console.log("MLKitOcr未找到文字'" + targetText + "'");
  791.             }
  792.         } catch (e) {
  793.             console.log("MLKitOcr点击失败:", e.message);
  794.         }
  795.     } else {
  796.         console.log("MLKitOcr识别失败");
  797.     }
  798.    
  799.     // 尝试使用MLKitOcrRect进行识别
  800.     console.log("\n2. 尝试使用MLKitOcrRect进行识别:");
  801.     var mlkitRectResult = OCRMethods.MLKitOcrRect('zh', [0, 0, 1, 1]);
  802.     if (mlkitRectResult) {
  803.         console.log("MLKitOcrRect识别成功");
  804.         console.log("MLKitOcrRect识别结果:");
  805.         console.log(mlkitRectResult);
  806.         
  807.         // 尝试查找并点击目标文字
  808.         try {
  809.             var target = mlkitRectResult.findIncludeText(targetText);
  810.             if (target) {
  811.                 console.log("使用MLKitOcrRect找到文字'" + targetText + "',正在点击...");
  812.                 target.hidClick();
  813.                 clicked = true;
  814.                 console.log("点击成功!");
  815.             } else {
  816.                 console.log("MLKitOcrRect未找到文字'" + targetText + "'");
  817.             }
  818.         } catch (e) {
  819.             console.log("MLKitOcrRect点击失败:", e.message);
  820.         }
  821.     } else {
  822.         console.log("MLKitOcrRect识别失败");
  823.     }
  824.    
  825.     // 尝试使用aiworkOCR进行识别
  826.     console.log("\n3. 尝试使用aiworkOCR进行识别:");
  827.     var aiworkResult = OCRMethods.aiworkOCR(640, [0, 0, 1, 1]);
  828.     if (aiworkResult) {
  829.         console.log("aiworkOCR识别成功");
  830.         console.log("aiworkOCR识别结果:");
  831.         console.log(aiworkResult);
  832.         
  833.         // 尝试查找并点击目标文字
  834.         try {
  835.             var target = aiworkResult.findIncludeText(targetText);
  836.             if (target) {
  837.                 console.log("使用aiworkOCR找到文字'" + targetText + "',正在点击...");
  838.                 target.hidClick();
  839.                 clicked = true;
  840.                 console.log("点击成功!");
  841.             } else {
  842.                 console.log("aiworkOCR未找到文字'" + targetText + "'");
  843.             }
  844.         } catch (e) {
  845.             console.log("aiworkOCR点击失败:", e.message);
  846.         }
  847.     } else {
  848.         console.log("aiworkOCR识别失败");
  849.     }
  850.    
  851.     // 尝试使用paddleOCR进行识别
  852.     console.log("\n4. 尝试使用paddleOCR进行识别:");
  853.     var paddleResult = OCRMethods.paddleOCR(640, [0, 0, 1, 1]);
  854.     if (paddleResult) {
  855.         console.log("paddleOCR识别成功");
  856.         console.log("paddleOCR识别结果:");
  857.         console.log(paddleResult);
  858.         
  859.         // 尝试查找并点击目标文字
  860.         try {
  861.             var target = paddleResult.findIncludeText(targetText);
  862.             if (target) {
  863.                 console.log("使用paddleOCR找到文字'" + targetText + "',正在点击...");
  864.                 target.hidClick();
  865.                 clicked = true;
  866.                 console.log("点击成功!");
  867.             } else {
  868.                 console.log("paddleOCR未找到文字'" + targetText + "'");
  869.             }
  870.         } catch (e) {
  871.             console.log("paddleOCR点击失败:", e.message);
  872.         }
  873.     } else {
  874.         console.log("paddleOCR识别失败");
  875.     }
  876.    
  877.     // 尝试使用opencv.OCREx进行识别
  878.     console.log("\n5. 尝试使用opencv.OCREx进行识别:");
  879.     var opencvResult = OCRMethods.opencvOCREx('图色473670.cv');
  880.     if (opencvResult) {
  881.         console.log("opencv.OCREx识别成功");
  882.         try {
  883.             console.log("opencv.OCREx识别结果:");
  884.             console.log(opencvResult.getAllString());
  885.             
  886.             // 尝试查找并点击目标文字
  887.             var target = opencvResult.findIncludeText(targetText);
  888.             if (target) {
  889.                 console.log("使用opencv.OCREx找到文字'" + targetText + "',正在点击...");
  890.                 target.hidClick();
  891.                 clicked = true;
  892.                 console.log("点击成功!");
  893.             } else {
  894.                 console.log("opencv.OCREx未找到文字'" + targetText + "'");
  895.             }
  896.         } catch (e) {
  897.             console.log("opencv.OCREx操作失败:", e.message);
  898.         }
  899.     } else {
  900.         console.log("opencv.OCREx识别失败");
  901.     }
  902.    
  903.     // 所有OCR方法都尝试完毕
  904.     if (!clicked) {
  905.         console.log("\n所有OCR方法都未找到文字'" + targetText + "'");
  906.     }
  907.    
  908.     // 7. 批量找字示例
  909.     console.log("\n4. 批量找字示例:");
  910.     var texts = ["确定", "取消", "设置", "开始"];
  911.     var batchResult = FindTextMethods.findTextBatch(texts);
  912.     if (batchResult) {
  913.         console.log("找到文字: " + batchResult.text + ",位置: x=" + batchResult.position.x + ", y=" + batchResult.position.y);
  914.     } else {
  915.         console.log("未找到任何文字");
  916.     }
  917.    
  918.     console.log("\n=== 示例执行完成 ===");
  919. }

  920. /**
  921. * 高级示例:自动化任务流程
  922. */
  923. function runAutomationTask() {
  924.     console.log("=== AIWROK 自动化任务流程示例 ===");
  925.    
  926.     console.log("✅ 开始执行自动化任务");
  927.    
  928.     // 1. 等待应用启动
  929.     console.log("\n1. 等待应用启动...");
  930.     // 这里可以使用基础找字方法等待应用启动
  931.     var appStarted = false;
  932.     var startTime = Date.now();
  933.     var timeoutMs = 30 * 1000;
  934.    
  935.     while (Date.now() - startTime < timeoutMs) {
  936.         var result = FindTextMethods.findTextBasic("首页", 1000);
  937.         if (result) {
  938.             appStarted = true;
  939.             break;
  940.         }
  941.         sleep.millisecond(1000);
  942.     }
  943.    
  944.     if (!appStarted) {
  945.         console.log("❌ 应用启动超时");
  946.         return;
  947.     }
  948.     console.log("✅ 应用启动成功");
  949.    
  950.     // 2. 点击登录按钮
  951.     console.log("\n2. 点击登录按钮...");
  952.     var loginResult = FindTextMethods.findTextBasic("登录", 3000);
  953.     if (loginResult) {
  954.         auto.clickPoint(loginResult.x, loginResult.y);
  955.         sleep.millisecond(1000);
  956.         console.log("✅ 登录按钮点击成功");
  957.     } else {
  958.         console.log("❌ 未找到登录按钮");
  959.         return;
  960.     }
  961.    
  962.     // 3. 等待登录页面
  963.     console.log("\n3. 等待登录页面...");
  964.     var loginPageLoaded = false;
  965.     startTime = Date.now();
  966.     timeoutMs = 10 * 1000;
  967.    
  968.     while (Date.now() - startTime < timeoutMs) {
  969.         var result = FindTextMethods.findTextBasic("用户名", 1000);
  970.         if (result) {
  971.             loginPageLoaded = true;
  972.             break;
  973.         }
  974.         sleep.millisecond(1000);
  975.     }
  976.    
  977.     if (!loginPageLoaded) {
  978.         console.log("❌ 登录页面加载超时");
  979.         return;
  980.     }
  981.     console.log("✅ 登录页面加载成功");
  982.    
  983.     // 4. 执行登录操作(这里只是示例,实际需要输入用户名密码)
  984.     console.log("\n4. 执行登录操作...");
  985.     // 模拟输入用户名密码
  986.     // input.setText("username", "test");
  987.     // input.setText("password", "123456");
  988.    
  989.     // 5. 点击登录按钮
  990.     var loginSubmitResult = FindTextMethods.findTextBasic("登录", 3000);
  991.     if (loginSubmitResult) {
  992.         auto.clickPoint(loginSubmitResult.x, loginSubmitResult.y);
  993.         sleep.millisecond(1000);
  994.         console.log("✅ 登录操作提交成功");
  995.     } else {
  996.         console.log("❌ 未找到登录提交按钮");
  997.         return;
  998.     }
  999.    
  1000.     // 6. 等待登录成功
  1001.     console.log("\n5. 等待登录成功...");
  1002.     var loginSuccess = false;
  1003.     startTime = Date.now();
  1004.     timeoutMs = 15 * 1000;
  1005.    
  1006.     while (Date.now() - startTime < timeoutMs) {
  1007.         var result = FindTextMethods.findTextBasic("欢迎", 1000);
  1008.         if (result) {
  1009.             loginSuccess = true;
  1010.             break;
  1011.         }
  1012.         sleep.millisecond(1000);
  1013.     }
  1014.    
  1015.     if (!loginSuccess) {
  1016.         console.log("❌ 登录失败或超时");
  1017.         return;
  1018.     }
  1019.     console.log("✅ 登录成功");
  1020.    
  1021.     console.log("\n=== 自动化任务执行完成 ===");
  1022. }



  1023. // 运行示例(如果直接执行此文件)
  1024. if (typeof console !== 'undefined' && console.log) {
  1025.     // 延迟1秒后运行示例,以便有时间准备测试环境
  1026.     setTimeout(function() {
  1027.         runComprehensiveDemo();
  1028.         // 可以选择运行自动化任务示例
  1029.         // runAutomationTask();
  1030.     }, 1000);
  1031. }



复制代码







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