首页 > Python资料 博客日记
小猿口算Pk基础版
2024-10-27 08:00:05Python资料围观47次
这篇文章介绍了小猿口算Pk基础版,分享给大家做个参考,收藏Python资料网收获更多编程知识
小猿口算pk(分数和整数)基础版
主要python 源程序
```python
import time
import pytesseract
from PIL import Image, ImageEnhance, ImageFilter, ImageOps
import re
import subprocess
def preprocess_image(image):
# 将图像转换为灰度图
image = image.convert('L')
# 增强对比度
enhancer = ImageEnhance.Contrast(image)
image = enhancer.enhance(3.0)
# 二值化处理
image = image.point(lambda p: p > 128 and 255)
# 锐化图像
image = image.filter(ImageFilter.SHARPEN)
# 使用高斯模糊去除噪声
image = image.filter(ImageFilter.GaussianBlur(radius=0.58))
return image
def split_image(image):
# 获取图像的宽度和高度
width, height = image.size
mid_x = width // 2
return image.crop((0, 0, mid_x, height)), image.crop((mid_x, 0, width, height))
def extract_number(text):
decimal_pattern = r'[-+]?\d*\.?\d+([eE][-+]?\d+)?'
fraction_pattern = r'[-+]?\d+/\d+'
# 优先匹配分数
fraction_match = re.search(fraction_pattern, text)
decimal_match = re.search(decimal_pattern, text)
# 处理特殊情况:避免识别出1/1或1的情况
if fraction_match:
fraction_text = fraction_match.group()
# 如果分子是1,尝试获取分母是否有意义
if fraction_text.startswith('1/'):
return fraction_text # 保留分数形式,稍后处理
else:
return fraction_text
return decimal_match.group() if decimal_match else None
def parse_number(number_str):
if '/' in number_str:
numerator, denominator = map(int, number_str.split('/'))
return numerator / denominator
return float(number_str)
def correct_ocr_result(text):
# 纠正混淆:避免将0错误地替换为9
if text.count('0') > text.count('9'):
corrected_text = text.replace('9', '0') # 只在确认是0的情况下进行替换
else:
corrected_text = text
# 修复分子为1、2和5的错误
corrected_text = re.sub(r'(?<!\d)1/', '1/', corrected_text) # 保留1作为分子
corrected_text = re.sub(r'(?<!\d)2(?!\d)', '2', corrected_text) # 保留2
corrected_text = re.sub(r'(?<!\d)5(?!\d)', '5', corrected_text) # 保留5
# 添加逻辑以纠正可能的混淆
# 示例:如果上下文中出现了5和2的混淆,增加一些逻辑来决定
if '5' in corrected_text and '2' in corrected_text:
# 比较出现的次数,或上下文来判断是否混淆
if corrected_text.count('5') > corrected_text.count('2'):
corrected_text = corrected_text.replace('2', '5') # 作为示例,可以进行调整
elif corrected_text.count('2') > corrected_text.count('5'):
corrected_text = corrected_text.replace('5', '2') # 作为示例,可以进行调整
return corrected_text
def execute_adb_command(command):
subprocess.run(command, shell=True)
def run_test_script():
subprocess.run("E:\\screenshot_and_crop.bat", shell=True)
def process_image(image_path):
original_image = Image.open(image_path)
left_half, right_half = split_image(original_image)
processed_left = preprocess_image(left_half)
processed_right = preprocess_image(right_half)
# 使用Tesseract进行OCR
config = '--psm 6 --oem 3 -c tessedit_char_whitelist=0123456789./ '
left_text = pytesseract.image_to_string(processed_left, lang="eng", config=config)
right_text = pytesseract.image_to_string(processed_right, lang="eng", config=config)
# 修改:保留原始结果并进行纠正
left_text = correct_ocr_result(left_text.strip().replace('\n', '/'))
right_text = correct_ocr_result(right_text.strip().replace('\n', '/'))
return left_text, right_text
def main_loop(image_path):
while True:
try:
run_test_script() # 启动截图脚本
left_text, right_text = process_image(image_path)
left_number = extract_number(left_text)
right_number = extract_number(right_text)
print("左半部分:", left_text)
print("右半部分:", right_text)
print("左边提取的数字:", left_number)
print("右边提取的数字:", right_number)
if left_number and right_number:
left_value = parse_number(left_number)
right_value = parse_number(right_number)
print(f"左边数值: {left_value}")
print(f"右边数值: {right_value}")
if left_value > right_value:
print("左边大于右边")
execute_adb_command(
"adb shell \"input touchscreen swipe 443 1222 697 1400; input touchscreen swipe 697 1400 447 1430\"")
elif left_value < right_value:
print("左边小于右边")
execute_adb_command(
"adb shell \"input touchscreen swipe 586 1277 355 1373; input touchscreen swipe 355 1373 611 1486\"")
# time.sleep(0.01) # 控制循环频率
except Exception as e:
print(f"发生错误: {e}")
# 每次循环后等待0.2秒
time.sleep(0.45)
if __name__ == '__main__':
image_path = "E:\\screenshots\\xiaoyuan.png"
main_loop(image_path)
使用Mumu 模拟器,在安卓模拟器设置中,手机获取root,开启abd调试(默认开启)
下载小袁口算apk文件,双击安装到Mumu 安卓模拟器中
下载adb 到电脑中,并配置环境变量(系统变量path中添加adb的安装路径)
mumu 模拟器的端口号为7555 ,在命令行中,输入 adb connect 127.0.0.1:7555 连接模拟器,使用adb get-state 检查是否连接成功,输出device,则表示连接成功
使用下面的脚本 进行屏幕的截取(默认存储在模拟器分配的存储空间中,因此需要拷贝到你的电脑存储中)
@echo off
:: 截取屏幕并保存到设备
adb shell screencap -p /sdcard/screenshot.png
:: 将截图从设备拉取到本地
adb pull /sdcard/screenshot.png E:\screenshots\screenshot.png
:: 使用 ImageMagick 裁剪指定区
magick E:\screenshots\screenshot.png -crop 810x360+140+380 E:\screenshots\xiaoyuan.png
:: 输出完成信息
echo
当图片传到电脑中的实际存储空间中后,在python源程序中,修改自己的照片存储路径,这里使用的是ocr图片识别,识别后会进行大小的比较,最后模拟指针移动,在模拟器的屏幕中,绘制出对应的大于号或者小于号。一直循环。
版权声明:本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:jacktools123@163.com进行投诉反馈,一经查实,立即删除!
标签:
相关文章
最新发布
- 【Python】selenium安装+Microsoft Edge驱动器下载配置流程
- Python 中自动打开网页并点击[自动化脚本],Selenium
- Anaconda基础使用
- 【Python】成功解决 TypeError: ‘<‘ not supported between instances of ‘str’ and ‘int’
- manim边学边做--三维的点和线
- CPython是最常用的Python解释器之一,也是Python官方实现。它是用C语言编写的,旨在提供一个高效且易于使用的Python解释器。
- Anaconda安装配置Jupyter(2024最新版)
- Python中读取Excel最快的几种方法!
- Python某城市美食商家爬虫数据可视化分析和推荐查询系统毕业设计论文开题报告
- 如何使用 Python 批量检测和转换 JSONL 文件编码为 UTF-8
点击排行
- 版本匹配指南:Numpy版本和Python版本的对应关系
- 版本匹配指南:PyTorch版本、torchvision 版本和Python版本的对应关系
- Python 可视化 web 神器:streamlit、Gradio、dash、nicegui;低代码 Python Web 框架:PyWebIO
- 相关性分析——Pearson相关系数+热力图(附data和Python完整代码)
- Python与PyTorch的版本对应
- Anaconda版本和Python版本对应关系(持续更新...)
- Python pyinstaller打包exe最完整教程
- Could not build wheels for llama-cpp-python, which is required to install pyproject.toml-based proj