B2BÍøÂçÈí¼þ

 ÕÒ»ØÃÜÂë
 Á¢¼´×¢²á ÉóºËÍøÕ¾ºÅ:QQ:896757558
ËÑË÷
²é¿´: 3|»Ø¸´: 0
´òÓ¡ ÉÏÒ»Ö÷Ìâ ÏÂÒ»Ö÷Ìâ

AIWROKÈí¼þ±¾µØ´î½¨OCRÕÒ×Ö·þÎñÆ÷

[¸´ÖÆÁ´½Ó]

1159

Ö÷Ìâ

1164

Ìû×Ó

7913

»ý·Ö

abc

Rank: 9Rank: 9Rank: 9

»ý·Ö
7913
Ìø×ªµ½Ö¸¶¨Â¥²ã
Â¥Ö÷
AIWROKÈí¼þ±¾µØ´î½¨OCRÕÒ×Ö·þÎñÆ÷
AIWROKÈí¼þ±¾µØ´î½¨OCRÕÒ×Ö·þÎñÆ÷ B2BÍøÂçÈí¼þ

  1. /**
  2. * ÇáÁ¿OCRʶ±ð - AIWROK¶Ë·â×°
  3. * ͨ¹ýfrpËíµÀÁ¬½Ó±¾µØµçÄÔµÄRapidOCR·þÎñ
  4. * ·þÎñÆ÷: http://154.201.80.51:9999 ¡ú frp ¡ú ±¾µØµçÄÔ:9999
  5. *
  6. * ·½·¨:
  7. *   ocrRecognize(region)         È«Á¿Ê¶±ð£¬·µ»ØwordsÊý×é
  8. *   ocrFindText(text, region, mode)  ²éÕÒÎÄ×Ö£¬·µ»Ø×ø±ê
  9. *   ocrFindAndClick(text)         ²éÕÒÎÄ×Ö²¢µã»÷
  10. *   ocrGetAllText(region)         ·µ»ØÈ«²¿ÎÄ×ÖÆ´½Ó
  11. *   ocrTextExists(text)           ¼ì²éÎÄ×ÖÊÇ·ñ´æÔÚ
  12. *   ocrWaitAndClick(text, timeout) µÈ´ýÎÄ×Ö³öÏÖ²¢µã»÷
  13. *   testOcrServer()               ²âÊÔÁ¬½Ó
  14. *
  15. * Rhino ES5 ×¢ÒâÊÂÏî:
  16. *   1. ×Ö·û´®Æ´½Ó²úÉúConsString£¬´«¸øJava·½·¨Ç°±ØÐëÓÃ""+ǿת
  17. *   2. ÿ´ÎÇëÇónew okHttp()£¬²»Òª¹²ÏíʵÀý£¨setHeader»áÀÛ»ý£©
  18. *   3. sleepÓÃsleep.millisecond()²»ÄÜÓÃsleep(number)
  19. *   4. ʱ¼äÓÃnew Date().getTime()²»ÓÃDate.now()
  20. *   5. ½ØÍ¼¶ÔÏóÓÃimg.toBase64()²»ÓÃbitmap.compress()
  21. *   6. ÇøÓò½ØÍ¼ÓÃcutImagePercent(0~1°Ù·Ö±È)²»ÓÃscreen.screenShotÏñËØ
  22. */

  23. var OCR_CONFIG = {
  24.     // ¾ÖÓòÍøÖ±Á¬£¨ÊÖ»úºÍµçÄÔͬһWiFiʱÓÃÕâ¸ö£¬²»×ßfrpËíµÀ£¬¿ì3-5±¶£©
  25.     SERVER_LOCAL: "http://192.128.10.103:9999",
  26.     // frpËíµÀ£¨ÊÖ»ú²»ÔÚͬһWiFiʱÓÃÕâ¸ö£¬¾­·þÎñÆ÷ÖÐת£©
  27.     SERVER_REMOTE: "http://165.201.20.51:9999",
  28.     // µ±Ç°Ê¹ÓõķþÎñÆ÷£¬×Ô¶¯¼ì²âÓÅÏÈÓþÖÓòÍø
  29.     SERVER: "http://192.168.10.103:9999",
  30.     timeout: 30000
  31. };

  32. /**
  33. * ½ØÍ¼×ªbase64
  34. * @param {Array} region ¿ÉÑ¡ [x1,y1,x2,y2] °Ù·Ö±È0~100
  35. * @return {String} base64×Ö·û´®
  36. */
  37. function ocrScreenshot(region) {
  38.     var img;
  39.     if (region && region.length >= 4) {
  40.         // regionÊǰٷֱÈ0~100£¬cutImagePercentÓÃ0~1
  41.         var x1 = region[0] / 100;
  42.         var y1 = region[1] / 100;
  43.         var x2 = region[2] / 100;
  44.         var y2 = region[3] / 100;
  45.         img = screen.screenShotFull().cutImagePercent(x1, y1, x2, y2);
  46.     } else {
  47.         img = screen.screenShotFull();
  48.     }
  49.     if (!img) {
  50.         throw new Error("½ØÍ¼Ê§°Ü");
  51.     }
  52.     // AIWROK Image¶ÔÏó×Ô´øtoBase64()£¬·µ»ØJava×Ö·û´®ÐèÓÃ""+ǿתJS×Ö·û´®
  53.     var b64 = "" + img.toBase64();
  54.     // ÊͷŽØÍ¼¶ÔÏó
  55.     try { img.recycle(); } catch(e) {}
  56.     return b64;
  57. }

  58. /**
  59. * ·¢ËÍOCRÇëÇó
  60. * ÓÃhttp.json()Ìæ´úhttp.post()£¬Ö±½Ó´«¶ÔÏó²»ÊÖ¶¯JSON.stringify
  61. * ÕâÑù²»»á²úÉúConsStringÀàÐÍÎÊÌ⣨ÒÑÑéÖ¤http.json()ÄÜÅÜͨ£©
  62. * @param {String} apiPath ½Ó¿Ú·¾¶
  63. * @param {Object} params ÇëÇó²ÎÊý
  64. * @return {Object|null} ½âÎöºóµÄJSON
  65. */
  66. function ocrRequest(apiPath, params) {
  67.     var http = new okHttp();
  68.     http.setHeader("Content-Type", "application/json");
  69.     try {
  70.         // http.json(url, object) Ö±½Ó´«¶ÔÏó£¬okHttpÄÚ²¿ÐòÁл¯
  71.         // ²Î¿¼ÒÑÑéÖ¤ÄÜÅÜͨµÄOCR²âÊÔ_AIWROK¶Ë.jsµÚ260ÐÐ
  72.         var resp = "" + http.json(OCR_CONFIG.SERVER + apiPath, params || {});
  73.         if (!resp || resp.length === 0) {
  74.             printl("[OCR] ·µ»Ø¿ÕÏìÓ¦");
  75.             return null;
  76.         }
  77.         return JSON.parse(resp);
  78.     } catch (e) {
  79.         printl("[OCR] ÇëÇóʧ°Ü: " + e);
  80.         return null;
  81.     }
  82. }

  83. /**
  84. * È«Á¿OCRʶ±ð
  85. * @param {Array} region ¿ÉÑ¡ [x1,y1,x2,y2] °Ù·Ö±È
  86. * @return {Array} wordsÊý×é [{text,score,box}]
  87. */
  88. function ocrRecognize(region) {
  89.     var b64 = ocrScreenshot(region);
  90.     var params = { image: b64 };
  91.     if (region) params.region = region;

  92.     var resp = ocrRequest("/ocr", params);
  93.     if (!resp || resp.code != 0) {
  94.         printl("[OCR] ʶ±ðʧ°Ü: " + (resp ? resp.error : "ÎÞÏìÓ¦"));
  95.         return [];
  96.     }
  97.     return resp.words || [];
  98. }

  99. /**
  100. * ²éÕÒÎÄ×Ö
  101. * @param {String} text Òª²éÕÒµÄÎÄ×Ö
  102. * @param {Array} region ¿ÉÑ¡ÇøÓò
  103. * @param {String} mode exact=¾«È·Æ¥Åä, include=°üº¬Æ¥Åä
  104. * @return {Array} Æ¥Åä½á¹û [{text,x,y,score,box}]
  105. */
  106. function ocrFindText(text, region, mode) {
  107.     var b64 = ocrScreenshot(region);
  108.     var params = {
  109.         image: b64,
  110.         text: text,
  111.         mode: mode || "include"
  112.     };
  113.     if (region) params.region = region;

  114.     var resp = ocrRequest("/ocr_find", params);
  115.     if (!resp || resp.code != 0) {
  116.         printl("[OCR] ²éÕÒʧ°Ü: " + (resp ? resp.error : "ÎÞÏìÓ¦"));
  117.         return [];
  118.     }
  119.     return resp.found || [];
  120. }

  121. /**
  122. * ²éÕÒÎÄ×Ö²¢µã»÷
  123. * @param {String} text Òª²éÕÒµÄÎÄ×Ö
  124. * @param {Array} region ¿ÉÑ¡ÇøÓò
  125. * @return {Boolean} ÊÇ·ñµã»÷³É¹¦
  126. */
  127. function ocrFindAndClick(text, region) {
  128.     var found = ocrFindText(text, region, "include");
  129.     if (found.length > 0) {
  130.         var item = found[0];
  131.         var sw = screen.getScreenWidth();
  132.         var sh = screen.getScreenHeight();
  133.         var absX, absY;

  134.         if (region && region.length >= 4) {
  135.             var rx1 = Math.round(region[0] * sw / 100);
  136.             var ry1 = Math.round(region[1] * sh / 100);
  137.             absX = rx1 + item.x;
  138.             absY = ry1 + item.y;
  139.         } else {
  140.             absX = item.x;
  141.             absY = item.y;
  142.         }

  143.         // Ëæ»úÆ«ÒÆ¡À5pxÄâÈË»¯
  144.         absX += Math.floor(Math.random() * 10) - 5;
  145.         absY += Math.floor(Math.random() * 10) - 5;

  146.         printl("[OCR] ÕÒµ½'" + text + "' ×ø±ê(" + absX + "," + absY + ") µã»÷");
  147.         auto.clickPoint(absX, absY);
  148.         return true;
  149.     }
  150.     return false;
  151. }

  152. /**
  153. * »ñȡȫ²¿ÎÄ×Ö
  154. * @param {Array} region ¿ÉÑ¡ÇøÓò
  155. * @return {String} È«²¿ÎÄ×ÖÆ´½Ó
  156. */
  157. function ocrGetAllText(region) {
  158.     var b64 = ocrScreenshot(region);
  159.     var params = { image: b64 };
  160.     if (region) params.region = region;

  161.     var resp = ocrRequest("/ocr_all", params);
  162.     if (!resp || resp.code != 0) {
  163.         return "";
  164.     }
  165.     return resp.all_text || "";
  166. }

  167. /**
  168. * ¼ì²éÎÄ×ÖÊÇ·ñ´æÔÚ
  169. * @param {String} text Òª¼ì²éµÄÎÄ×Ö
  170. * @param {Array} region ¿ÉÑ¡ÇøÓò
  171. * @return {Boolean}
  172. */
  173. function ocrTextExists(text, region) {
  174.     var found = ocrFindText(text, region, "include");
  175.     return found.length > 0;
  176. }

  177. /**
  178. * µÈ´ýÎÄ×Ö³öÏÖ²¢µã»÷
  179. * @param {String} text µÈ´ýµÄÎÄ×Ö
  180. * @param {Number} timeout ³¬Ê±ÃëÊý
  181. * @param {Array} region ¿ÉÑ¡ÇøÓò
  182. * @return {Boolean}
  183. */
  184. function ocrWaitAndClick(text, timeout, region) {
  185.     var maxTime = (timeout || 10) * 1000;
  186.     var startTime = new Date().getTime();

  187.     while (new Date().getTime() - startTime < maxTime) {
  188.         if (ocrFindAndClick(text, region)) {
  189.             return true;
  190.         }
  191.         sleep.millisecond(1000);
  192.     }
  193.     printl("[OCR] µÈ´ý'" + text + "'³¬Ê±");
  194.     return false;
  195. }

  196. /**
  197. * ²âÊÔOCR·þÎñÁ¬½Ó
  198. * @return {Boolean}
  199. */
  200. function testOcrServer() {
  201.     try {
  202.         var http = new okHttp();
  203.         var resp = "" + http.get(OCR_CONFIG.SERVER + "/health");
  204.         var data = JSON.parse(resp);
  205.         if (data.code == 0) {
  206.             printl("[OCR] ·þÎñÁ¬½ÓÕý³£!");
  207.             printl("[OCR] ÒýÇæ: " + data.engine);
  208.             printl("[OCR] ÒѼÓÔØ: " + data.loaded);
  209.             return true;
  210.         }
  211.     } catch (e) {
  212.         printl("[OCR] Á¬½Óʧ°Ü: " + e);
  213.         printl("[OCR] Çë¼ì²é: 1.±¾µØOCR·þÎñÊÇ·ñÆô¶¯ 2.frp¿Í»§¶ËÊÇ·ñÆô¶¯");
  214.     }
  215.     return false;
  216. }

  217. // ===== ʹÓÃʾÀý =====
  218. function main() {
  219.     printl("===== ÇáÁ¿OCR²âÊÔ =====");

  220.     // ²âÊÔÁ¬½Ó
  221.     if (!testOcrServer()) {
  222.         return;
  223.     }

  224.     // È«Á¿Ê¶±ð
  225.     printl("\n--- È«Á¿Ê¶±ð ---");
  226.     var words = ocrRecognize();
  227.     for (var i = 0; i < words.length; i++) {
  228.         printl("  [" + i + "] " + words[i].text + " (score=" + words[i].score + ")");
  229.     }

  230.     // »ñȡȫ²¿ÎÄ×Ö
  231.     printl("\n--- È«²¿ÎÄ×Ö ---");
  232.     var allText = ocrGetAllText();
  233.     printl(allText);

  234.     // ²éÕÒÎÄ×Ö
  235.     printl("\n--- ²éÕÒÎÄ×Ö ---");
  236.     var found = ocrFindText("ÉèÖÃ");
  237.     if (found.length > 0) {
  238.         printl("ÕÒµ½'ÉèÖÃ': " + found[0].x + "," + found[0].y);
  239.     } else {
  240.         printl("δÕÒµ½'ÉèÖÃ'");
  241.     }

  242.     printl("\n===== ²âÊÔÍê³É =====");
  243. }

  244. // ×Ô¶¯Ö´ÐвâÊÔ
  245. main();
¸´ÖÆ´úÂë


»Ø¸´

ʹÓõÀ¾ß ¾Ù±¨

±¾°æ»ý·Ö¹æÔò

¹Ø±Õ

QQ|»ÓªÏúÈí¼þ×ÛºÏÌÖÂÛ|»ÓªÏúÈí¼þÓÐÎʱشð|»ÓªÏúÈí¼þ½Ì³Ì×¨Çø|»ÓªÏúÈí¼þPOST½Å±¾·ÖÏí|»ÓªÏúÈí¼þÆÕͨ½Å±¾·ÖÏí|»ÓªÏúÈí¼þÈí¼þ×ÊѶ|»ÓªÏúÈí¼þ¾«Æ·Èí¼þ|»ÓªÏúÈí¼þ¸üй«¸æ|ÓªÏúÈí¼þ|B2BÈí¼þ|B2BÍøÂçÈí¼þ ( ¾©ICP±¸09078825ºÅ )±¾ÍøÕ¾¿ª·¢µÄÓªÏúÈí¼þÊÇÒ»¿îеÄÍøÂçÓªÏúÈí¼þ£¬Õâ¿îÓªÏú¿ÉÒÔÈ¥ÍøÕ¾Èí¼þ£¬²©¿ÍÈí¼þ£¬B2BÈí¼þ£¬·ÖÀàÐÅÏ¢Íø·¢Ìù£¬¿ÉÒÔÇÀɳ·¢£¬¿ÉÒÔµ½°Ù¶ÈÎÄ¿âÉÏ´«WORDÎĵµ£¬¿ÉÒÔµ½Ò»Ð©ÊÇÏà²áÍøÕ¾×Ô¶¯ÉÏ´«Í¼Æ¬£¬Õâ¸ö×Ô¶¯·¢ÌûÈí¼þ×Ô´øÔÆÖ©Ö룬¼Ó¿ìÊÕ¼£¬ÓÐ6ÖÖ¶Ô½Ó´òÂë½Ó¿Ú£¬·½±ã£¬Ð§Âʸߣ¬Ëٶȿ죬¶øÇÒ¶ÔÍ϶¯µÄÑéÖ¤ÂëÈ«ÍøµÚÒ»¼Ò¶À¼ÒÖ§³Ö£¬È«²¿Ô­´´¼¼Êõ£¬¶À¼ÒÑз¢£¬Õý°æÔ­´´´ø°æÈ¨Èí¼þ¡£Ñ¡ÔñÍòÄÜÓªÏúÈí¼þ£¬¾ÍÑ¡ÔñÁËÒ»ÖÖ׬ǮµÄЧÂÊ£¬´ÓûÓб»³¬Ô½¹ý£¬Ò»Ö±ÔÚŬÁ¦Ñз¢Ð¼¼Êõ¡£·Å·ÉÃÎÏ룬½â·ÅË«ÊÖ£¬À´µã´´Ò⣬³É¾ÍÄãµÄÃÎÏ룬¾ÍÔÚÍòÄÜÓªÏúÈí¼þ¿ªÊ¼

map2

GMT+8, 2026-8-20 08:33 , Processed in 0.232286 second(s), 33 queries .

¿ìËٻظ´ ·µ»Ø¶¥²¿ ·µ»ØÁбí