当前位置: 首页 > news >正文

小猿口算脚本

实现原理:安卓adb截图传到电脑,然后用python裁剪获得两张数字图片,使用ddddocr识别数字,比较大小,再用adb命令模拟安卓手势实现><

import os
import ddddocr
from time import sleep
from PIL import Image

def take_screenshot(path):
    """从设备截取屏幕并保存到指定路径。"""
    os.system(f'adb shell screencap -p > {path}')

    # 读取截取的屏幕截图并替换行结束符
    with open(path, 'rb') as f:
        return f.read().replace(b'\r\n', b'\n')

def process_image(image_path, crop_area):
    """打开图片,裁剪并返回裁剪后的图片。"""
    with Image.open(image_path) as img:
        return img.crop(crop_area)

def extract_text(img):
    """提取图片中的文本。"""
    with open(img, 'rb') as f:
        img_bytes = f.read()
    res = ocr.classification(img_bytes)
    return res.replace(' ', '').replace('\n', '')

def compare_numbers(x, y):
    """比较两个数字并相应地执行滑动操作。"""
    try:
        x_int, y_int = int(x), int(y)
        if x_int > y_int:
            print(f"{x} > {y}")
            os.system("adb shell input swipe 450 1800 850 1900 1")
            os.system("adb shell input swipe 850 1900 450 2000 1")
        else:
            print(f"{x} < {y}")
            os.system("adb shell input swipe 850 1800 450 1900 1")
            os.system("adb shell input swipe 450 1900 850 2000 1")
    except ValueError:
        print("数字格式无效。")

def main():
    """主程序逻辑。"""
    screenshot_path = 'screenshot.png'

    # 截取屏幕并保存
    screenshot = take_screenshot(screenshot_path)
    with open(screenshot_path, 'wb') as f:
        f.write(screenshot)

    # 定义裁剪区域(左,上,右,下)分别是两个数字在图片中的区域坐标
    crop_areas = [
        (330, 720, 530, 880),
        (730, 720, 930, 880)
    ]

    cropped_images = []
    for i, crop_area in enumerate(crop_areas, start=1):
        cropped_image = process_image(screenshot_path, crop_area)
        cropped_image_path = f"screenshot{i}.png"
        cropped_image.save(cropped_image_path)
        cropped_images.append(cropped_image_path)

    # 从裁剪后的图片中提取文本
    texts = [extract_text(image) for image in cropped_images]

    # 比较提取的数字
    compare_numbers(texts[0], texts[1])


if __name__ == '__main__':
    ocr = ddddocr.DdddOcr(show_ad=False)
    while True:
        main()
        sleep(0.2)

相关文章:

  • 2024面试自动化测试面试题【含答案】
  • Linux安装conda
  • 我服了,上班在 Excel 里都能摸鱼。。。
  • 爬虫prc技术----小红书爬取解决xs
  • 数据结构_day1
  • 计算机视觉之OpenCV vs YOLO
  • 设计一个日志管理系统,支持多级别日志记录
  • 常用的8款文件加密软件分享|2024办公文件用什么加密软件保护?
  • Git常用命令(持续更新中)
  • 凡事预则立,不预则废
  • 汽车3d动效的作用!云渲染实现3d动效
  • 第 17 场小白入门赛蓝桥杯
  • 2024年9月30日--10月6日(ue5肉鸽结束,20小时,共2851小时)
  • 学习 JpGraph-历史曲线
  • RelationGraph实现工单进度图——js技能提升
  • GitHub Copilot 使用手册(一)--配置
  • 基于Vue3+Ts+Vite项目中grpc-Web的应用以及其中的坑
  • Biomamba求职| 国奖+4篇一作SCI
  • Python测试框架--Allure
  • CSS——属性值计算
  • 海南省三亚市委原常委、秘书长黄兴武被“双开”
  • 比特币价格时隔三个月再度站上10万美元
  • 广州下调个人住房公积金贷款利率
  • 陈雯出任外交部离退休干部局局长,此前为外交部办公厅副主任
  • 同观·德国|默茨当总理后,能否带领德国在欧盟“说了算”?
  • 中国驻俄大使张汉晖人民日报撰文:共襄和平伟业,续谱友谊新篇