| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102 | 
							- # coding: utf-8
 
- #
 
- """
 
- import uiautomator2 as u2
 
- import uiautomator2.ext.ocr as ocr
 
- u2.plugin_add("ocr", ocr.OCR)
 
- d = u2.connect()
 
- d.ext_ocr("对战模式").click()
 
- """
 
- import requests
 
- import time
 
- API = ""
 
- class OCRObjectNotFound(Exception):
 
-     pass
 
- class OCR(object):
 
-     def __init__(self, d):
 
-         """
 
-         Args:
 
-             d: uiautomator2 instance
 
-         """
 
-         self._d = d
 
-         if not API:
 
-             raise EnvironmentError("set API var before using OCR")
 
-     def all(self):
 
-         rawdata = self._d.screenshot(format='raw')
 
-         r = requests.post(API, files={"file": ("tmp.jpg", rawdata)})
 
-         r.raise_for_status()
 
-         resp = r.json()
 
-         assert resp['success']
 
-         result = []
 
-         for item in resp['data']:
 
-             lx, ly, rx, ry = item['coords']
 
-             x, y = (lx + rx) // 2, (ly + ry) // 2
 
-             ocr_text = item['text']
 
-             result.append((ocr_text, x, y))
 
-         result.sort(key=lambda v: (v[2], v[1]))
 
-         return result
 
-     def __call__(self, text):
 
-         return OCRSelector(self, text)
 
- class OCRSelector(object):
 
-     def __init__(self, server, text=None, textContains=None):
 
-         self._server = server
 
-         self._d = server._d
 
-         self._text = text
 
-         self._text_contains = textContains
 
-     def all(self):
 
-         result = []
 
-         for (ocr_text, x, y) in self._server.all():
 
-             matched = False
 
-             if self._text == ocr_text:  # exactly match
 
-                 matched = True
 
-             elif self._text_contains and self._text_contains in ocr_text:
 
-                 matched = True
 
-             if matched:
 
-                 result.append((ocr_text, x, y))
 
-         return result
 
-     def wait(self, timeout=10):
 
-         """
 
-         Args:
 
-             timeout: seconds to wait
 
-         
 
-         Returns:
 
-             List of recognition (text, x, y)
 
-             
 
-         Raises:
 
-             OCRObjectNotFound
 
-         """
 
-         deadline = time.time() + timeout
 
-         first = True
 
-         while first or time.time() < deadline:
 
-             first = False
 
-             all = self.all()
 
-             if all:
 
-                 return all
 
-         raise OCRObjectNotFound(self._text)
 
-     def click(self, timeout=10):
 
-         result = self.wait(timeout=timeout)
 
-         _, x, y = result[0]
 
-         self._d.click(x, y)
 
- if __name__ == '__main__':
 
-     import uiautomator2.ext.ocr as ocr
 
-     import uiautomator2 as u2
 
-     d = u2.connect()
 
-     print(ocr.OCR(d)("王者峡谷").click())
 
 
  |