湛江自做網(wǎng)站杭州谷歌推廣
目錄
寫(xiě)在前面:
一、關(guān)于小猿口算:
二、代碼邏輯
1.數(shù)字識(shí)別
2.答題部分
三、代碼分享:
補(bǔ)充:軟件包下載
寫(xiě)在前面:
最近小猿口算已經(jīng)被不少大學(xué)生攻占,小學(xué)生直呼有掛。原本是以為大學(xué)生都打著本科一年級(jí)也是一年級(jí),研一也是一年級(jí),博一也是一年級(jí)的口號(hào),憑借自己實(shí)力去欺負(fù)小學(xué)生呢。沒(méi)曾想竟然是大學(xué)生通過(guò)腳本刷題。
一個(gè)好好的給小學(xué)生的口算題已經(jīng)變成了大學(xué)生的計(jì)算機(jī)大戰(zhàn),比誰(shuí)的腳本刷題速度更快了(這里偷偷懷疑一下,是不是清華的老師給他的學(xué)生們布置了一項(xiàng)作業(yè):比誰(shuí)的腳本刷題刷的快了)
小猿口算已經(jīng)連夜招聘網(wǎng)絡(luò)安全工程師了:
這里也分享一個(gè)小編的腳本,質(zhì)量很差,甚至還沒(méi)自己做的快呢,不過(guò)可以用來(lái)自己練手或者自己跑著玩兒,也算是順應(yīng)時(shí)代潮流。
最后,欺負(fù)小學(xué)生這種事情,還是不推薦干的。
一、關(guān)于小猿口算:
主頁(yè)就長(zhǎng)這樣,也沒(méi)啥好介紹的,今天的主角是“口算PK”里的“20以內(nèi)的數(shù)字比大小”,比賽規(guī)則啥的,大家應(yīng)該看名稱就能才出來(lái)。我這里是為了方便運(yùn)行腳本,是在電腦MuMu模擬器上運(yùn)行的小猿口算:
至于比賽過(guò)程,則是給兩個(gè)數(shù)字,可以通過(guò)畫(huà)大于號(hào)小于號(hào)來(lái)進(jìn)行答題:
二、代碼邏輯
1.數(shù)字識(shí)別
數(shù)字識(shí)別用來(lái)一種很笨的方法:截圖,然后通過(guò)OpenCv識(shí)別。代碼的話放在最后一塊演示。首選需要把小猿口算和Pycharm同時(shí)出現(xiàn)在屏幕上,需要打開(kāi)Mumu模擬器的窗口置頂功能以方便同時(shí)能看到Pycharm和小猿口算
然后如下放置:
?
由于這個(gè)截圖是截取的置頂位置的圖片,參數(shù)什么的還得自己調(diào),大家可以查看截取的num.py文件查看自己截圖截到了哪個(gè)地方,自己修改一下mumu模擬器的位置或者代碼中截圖位置的參數(shù),保證能截到一下num.png所示的兩個(gè)數(shù)字信息就好了。
2.答題部分
既然能截取到圖片,并識(shí)別出數(shù)字,那比較大于小于就So easy了,接下來(lái)就是畫(huà)大于號(hào)小于號(hào),我們直接通過(guò)
pyautogui.mouseDown(),
pyautogui.move
pyautogui.mouseUp()
來(lái)實(shí)現(xiàn)按下鼠標(biāo),鼠標(biāo)移動(dòng)畫(huà)大于號(hào)或者小于號(hào),松開(kāi)鼠標(biāo)的操作。邏輯還是挺簡(jiǎn)單的。不過(guò)這個(gè)答題只能保證質(zhì)量,不能保證速度。
三、代碼分享:
import math
import sys
import timeimport cv2
import keyboard
import pyautogui
import pytesseract
from PIL import ImageGrab# 鼠標(biāo)移動(dòng)相對(duì)位置,分為前后兩段,用于畫(huà)大于號(hào)或者小于號(hào)
# x1大于0,畫(huà)大于,小于0畫(huà)小于
def mouse_move(x1, y1):pyautogui.mouseDown()pyautogui.move(x1, y1, duration=0.1)pyautogui.mouseUp()
while True:# 按下空格鍵終止程序if keyboard.is_pressed('space'):print('游戲結(jié)束!')sys.exit()ImageGrab.grab(bbox=(100, 300, 450, 450)).save('./pngs/num.png')# 改為自己的tesseract.exe路徑pytesseract.pytesseract.tesseract_cmd = r'E:\IDEs\Python\Tesseract-OCR\tesseract.exe'# 設(shè)置生成的照片的路徑img = cv2.imread('./pngs/num.png')img = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)_, thresh = cv2.threshold(img, 150, 100, cv2.THRESH_BINARY)result = pytesseract.image_to_string(thresh, config='--psm 6').split('?')try:result[0] = result[0].strip()result[1] = result[1].strip()if result[0] == 'O':result[0] = 0if result[1] == 'O':result[1] = 0num1 = math.floor(float(result[0]))num2 = math.floor(float(result[1]))# 設(shè)置畫(huà)大于號(hào)小于號(hào)的初始位置,參數(shù)可調(diào)pyautogui.moveTo(277, 700, duration=0.1)if num1 > num2:mouse_move(100,100)print(f'{num1} > {num2}')else:mouse_move (-100,100)print(f'{num1} < {num2}')time.sleep(0.05)except IndexError as e:print('未捕獲到內(nèi)容!')except ValueError as e:print('未捕獲到內(nèi)容!')
補(bǔ)充:軟件包下載
除了CV2和tesseract之外,其他的幾個(gè)軟件包直接鼠標(biāo)碰到報(bào)錯(cuò)(提示找不到軟件包)的地方,就會(huì)給出解決方法:下載軟件包。是在不行自己pip install +軟件包名也能下載
需要注意的是cv2是opencv里面的一部分,因此需要以下指令下載openCV
pip install opencv-python
OpenCV包還是挺大的,推薦使用國(guó)內(nèi)鏡像:
pip install opencv-python -i https://pypi.tuna.tsinghua.edu.cn/simple
至于tesseract需要手動(dòng)下載,訪問(wèn)如下地址:
Tesseract User Manual | tessdoc
?滑到最低端選擇download
跳轉(zhuǎn)頁(yè)面后點(diǎn)擊這個(gè)UB開(kāi)頭的東西
跳轉(zhuǎn)之后找到“set up”程序下載即可
下載安裝之后,記得把代碼里tesseract.exe的路徑也跟著修改一下。