【小猿口算】解计算题的几种思路以及如何使用 MYScrcpy 开发一个解题插件

前言

MYScrcpy Github / Gitee
说实话,做这个插件一开始我是拒绝的😬,奈何的确是撞枪口上了!MYScrcpy主打的就是一个视频采集、手机自动化控制。本文主要讲讲思路,顺便巩固一下MYScrcpy插件开发知识。

注意

插件用于功能测试及教学目的,切勿违法违规使用!

效果

算式运算

小猿口算 分数运算

我们开始吧

总体思路

目前大部分童鞋,主要是在比大小上发力。个别优秀的,直接抓包解析,也算是玩到家门口了。鉴于此,本文主要讲讲如何解混合运算、约分、分数计算等题型。

  1. 获取题目信息
    • 图像OCR识别
    • dump_hierarchy
  2. 解题
  3. 绘制答案

获取题目信息

截图及图像识别方式

  • 截图笔者采用的是uiautomator2.screenshot(),相较ADB,速度能快一些。
img = self.device.u2d.screenshot()
  • 图像识别有很多办法,很多童鞋也发了一些思路及教程,我这里不过多赘述。
    笔者采用的是 DdddOcr 识别。
    较Opencv及pytesseract,个人感觉准确率更高,且更方便。
    def get_numbers(self, img_left: Image.Image, img_right: Image.Image) -> Tuple[int, int]:
        """
            获取数字
        :return:
        """
        return self.ocr.classification(img_left), self.ocr.classification(img_right)
        
    def get_images(self):
        """
            获取图像
        :return:
        """

        # 截屏
        img = self.device.u2d.screenshot()

        img_coord = Coordinate(img.width, img.height)

        # 截图
        left_tl = img_coord.to_point(ScalePoint(.19, .24))
        left_br = img_coord.to_point(ScalePoint(.4, .31))

        right_tl = img_coord.to_point(ScalePoint(.6, .24))
        right_br = img_coord.to_point(ScalePoint(.82, .3))

        left = img.crop([
            left_tl.x, left_tl.y,
            left_br.x, left_br.y,
        ])

        right = img.crop([
            right_tl.x, right_tl.y,
            right_br.x, right_br.y,
        ])

        return self.process(left), self.process(right)
    def process(image: Image.Image) -> np.ndarray:
        """
            图像清晰化处理
        :param image:
        :return:
        """

        cont = cv2.convertScaleAbs(
            cv2.cvtColor(np.array(image), cv2.COLOR_RGB2GRAY),
            alpha=2, beta=0
        )
        return cv2.threshold(
            cv2.GaussianBlur(cont, (5, 5), 0),
            0, 255, cv2.THRESH_BINARY + cv2.THRESH_OTSU
        )[1]

dump_hierarchy方式

图像识别存在一定的识别错误的情况,笔者后采用uiautomator2.dump_hierarchy()获取题目,准确性高。

通过uiautomator2.dump_hierarchy()方法,获取当前页面的 ui hierarchy 信息。进行元素查找。
可以自行解析,也可以使用 uiautomator2的定位器 定位器说明

        # 获取问题公式
        formulas = self.get_formulas(self.device.u2d.dump_hierarchy(pretty=True).split('\n'))
    @staticmethod
    
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值