自动翻转卡包和拼写均已实现,剩下的点听力,阅读,语法,较为简单(如需要请自行增补代码)
ps: 使用雷电模拟器
这里提供的代码重要是思绪,直接粘贴复制是用不了的(因为缺少相关情况和python的模块包)
实现自动拼写:
- import pyautogui,time,logging,re
- from paddleocr import PaddleOCR
- pyautogui.PAUSE = 0.1
- time.sleep(1)
- img_path="pinxie.png"
- ##定位键盘,这个x,y很重要,定位全局。(尽量别修改)
- x,y=pyautogui.locateCenterOnScreen(img_path,region=(0,0,500,900),confidence=0.8)##左半屏
- ##可以不带region参数 x,y=pyautogui.locateCenterOnScreen(img_path,confidence=0.8)##全屏寻找
- print(x,y)
- keyboard_layout = {
- 'q': (x-365, y-196), 'w': (x-320, y-196), 'e': (x-275, y-196), 'r': (x-230, y-196), 't': (x-185, y-196),
- 'y': (x-140, y-196), 'u': (x-95, y-196), 'i': (x-50, y-196), 'o': (x-5, y-196), 'p': (x+40, y-196),
- 'a': (x-340, y-136), 's': (x-295, y-136), 'd': (x-250, y-136), 'f': (x-205, y-136), 'g': (x-160, y-136),
- 'h': (x-115, y-136), 'j': (x-70, y-136), 'k': (x-25, y-136), 'l': (x+20, y-136),
- 'z': (x-300, y-76), 'x': (x-255, y-76), 'c': (x-210, y-76), 'v': (x-165, y-76), 'b': (x-120, y-76),
- 'n': (x-75, y-76), 'm': (x-30, y-76)
- }
- #这里的坐标不要修改,我调好的参数。
- ##这里是主体部分
- while True:##一般这里就是二十五个循环(25个单词拼写)
- def type_text(text):
- for char in text:
- if char in keyboard_layout:
- x, y = keyboard_layout[char]
- pyautogui.click(x, y)
- # 模拟第一次输入
- type_text("qwertyuipoiuy")
- pyautogui.click(x, y)
- time.sleep(0.5)
- ##截取单词
- pyautogui.screenshot("danci.png", (int(x - 360), int(y - 536), 380, 250))
- danci = []
- ##识别单词
- logging.disable(logging.DEBUG)
- ocr = PaddleOCR(use_angle_cls=True, lang="ch")
- result = ocr.ocr(f"danci.png", cls=True)
- for idx in range(len(result)):
- res = result[idx]
- for line in res:
- danci.append(line[1][0])
- # 将列表转换为一个字符串
- string = ''.join(danci)
- # 定义正则表达式模式,匹配 "提示" 后面的单词
- pattern = re.compile(r'提示(\w+)')
- # 使用正则表达式进行匹配
- match = pattern.search(string)
- result = match.group(1) # <---这个就是识别出来的正确答案
- print(result) #打印出来方便观察的(可以删)
- ##以上为识别单词(识别结束)
- # 现在可以点击删除键清空单词
- pyautogui.click(x + 20, y - 76)
- # 现在开始输入单词
- type_text(result)
- pyautogui.click(x, y)
- time.sleep(1) #延迟函数(很重要)可以根据你的电脑调整时间,但是不要删除(给截屏反应时间的),因为那个页面跳转会有0.3秒的时间响应
复制代码 思绪都写在注释里了
自动翻转卡包:
- import logging,re,Levenshtein
- import pyautogui,time
- from paddleocr import PaddleOCR, draw_ocr
- li=[]##识别表
- li1=[]##对比表1
- li22=[]##对比表22
- def ocrbaocun(): ##识别保存后正则化 为 对比表1
- li=[]
- li1=[]##初始化列表为空,防止混淆
- pp=0
- while True:
- if (pp==5):
- break
- time.sleep(1.5)
- img_path = "shibie.png"
- x, y = pyautogui.locateCenterOnScreen(img_path, region=(0, 0, 400, 800), confidence=0.7)
- pyautogui.click(x, y + 200)
- time.sleep(1.5)
- pyautogui.screenshot(f"shot{pp+1}.png", (int(x - 235), int(y - 160), 350, 370))
- ##开始识别翻译的截屏
- logging.disable(logging.DEBUG)
- ocr = PaddleOCR(use_angle_cls=True, lang="ch")
- result = ocr.ocr(f"shot{pp+1}.png", cls=True)
- for idx in range(len(result)):
- res = result[idx]
- str1 = ""
- for line in res:
- str1 += line[1][0]
- pp += 1
- # 按住鼠标左键
- pyautogui.mouseDown(button='left')
- # 向上滑动
- pyautogui.moveRel(0, -100, duration=0.2) # 这里的100可以调整,表示滑动的距离
- # 释放鼠标左键
- pyautogui.mouseUp(button='left')
- li.append(str1)
- print(li)
- #正则表达式
- pattern = re.compile(r'(?<![A-Z])\b(?!vt|n|adj|adv)[a-zA-Z]+\b|[\u4e00-\u9fa5]+')
- # 遍历列表中的每个元素
- for text in li:
- # 使用findall方法匹配文本中的单词
- matches = pattern.findall(text)
- # 输出匹配到的单词
- li1.append(matches)
- time.sleep(2)
- print(li1)
- for i in range(5):
- ocrchoice(li1)
- def ocrchoice(li1):
- time.sleep(1.5)
- li2=[]
- li22=[]
- elect_path = "choice.png"
- x, y = pyautogui.locateCenterOnScreen(elect_path, confidence=0.7, region=(0, 0, 400, 800))
- pyautogui.screenshot("choicejietu.png", (int(x - 200), int(y + 100), 390, 270))
- logging.disable(logging.DEBUG)
- ocr = PaddleOCR(use_angle_cls=True, lang="ch")
- result = ocr.ocr(f"choicejietu.png", cls=True)
- for idx in range(len(result)):
- res = result[idx]
- for line in res:
- li2.append(line[1][0])
- pattern = re.compile(r'[\u4e00-\u9fa5]+')
- for text in li2:
- matches = pattern.findall(text)
- li22.append(matches)
- print(li22)
- ##从这里开始选择
- decide(x,y,li1,li22)
- def decide(x,y,li1,li22):
- flat_list1 = [item for sublist in li1 for item in sublist]
- # 设置相似度阈值
- immediate_threshold = 0.7
- def are_similar(str1, str2):
- return Levenshtein.ratio(str1, str2)
- # 找到第二个双层列表中包含相似元素的子列表的相似度最大索引
- max_similarity = 0
- matching_index = -1
- immediate_found=False
- for idx, sublist in enumerate(li22):
- for item in sublist:
- for flat_item in flat_list1:
- similarity = are_similar(item, flat_item)
- print(f"Comparing '{item}' with '{flat_item}', similarity: {similarity}")
- if similarity >= immediate_threshold:
- print(f"Found immediate match with similarity {similarity} at index {idx}")
- matching_index=idx
- max_similarity=similarity
- immediate_found=True
- break
- if similarity > max_similarity:
- max_similarity = similarity
- matching_index = idx
- if immediate_found:
- break
- if immediate_found:
- break
- print(f"Matching index: {matching_index}, max similarity: {max_similarity}")
- #以上有两种匹配方案,如果有相似度>=0.8的子列表,就直接结束比对(一般都是1.0的相似度)。
- #如果没有>=0.8的,就比对所有字符串后取最大相似度所在的子列表索引。
- if(matching_index==0):
- pyautogui.click(x + 150, y + 130)##A
- if(matching_index==1):
- pyautogui.click(x + 150, y + 200)##B
- if(matching_index==2):
- pyautogui.click(x + 150, y + 270)##C
- if(matching_index==3):
- pyautogui.click(x + 150, y + 340)##D
- time.sleep(0.5)
- # 按住鼠标左键
- pyautogui.mouseDown(button='left')
- # 向上滑动
- pyautogui.moveRel(0, -100, duration=0.2) # 这里的100可以调整,表示滑动的距离
- # 释放鼠标左键
- pyautogui.mouseUp(button='left')
- time.sleep(1.5)
- while True:
- ocrbaocun()
- time.sleep(1)
复制代码 简单解说下卡包的思绪:
列表里的1,2,3,4,5是分别五个单词的翻译及其单词(还没有正则化)五个字符串在一个列表中往后累加的,以是后面也是一样的形式
白色框:是正则化(re)后的每个单词及其翻译
绿色框(每个单词都是这样的):是第一个的单词的选择(A,B,C,D),显而易见也是已经经过 正则化。
选择思绪:
判断相似度:
以上有两种匹配方案,如果有相似度>=0.8的子列表,就直接竣事比对(一般都是1.0的相似度)如果没有>=0.8的,就比对所有字符串后取最大相似度所在的子列表索引。
Matching index就是选项,0,1,2,3分别对应A,B,C,D.
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。 |