??在騰訊收購(gòu)閱文之后桐早,微信讀書(shū)的無(wú)限卡已經(jīng)不能免費(fèi)看書(shū)了锈遥,這時(shí)白嫖微信讀書(shū)每日一答的書(shū)幣成了不錯(cuò)的選擇纫事。嚴(yán)重偏科又手速垃圾的我在等級(jí)升高下逐漸力不從心,于是突然有了這個(gè)想法所灸,寫(xiě)個(gè)能快速識(shí)別問(wèn)題文字的小程序,因?yàn)楝F(xiàn)有的識(shí)別文字等程序(如QQ)會(huì)出現(xiàn)識(shí)別速度慢炫七、手動(dòng)框選識(shí)別區(qū)域的問(wèn)題爬立。
1 環(huán)境準(zhǔn)備
系統(tǒng):WIN10
python version:3.6
所需要的庫(kù):pyautogui,keyboard,PILLOW,baidu-aip
2 獲取屏幕位置
??既然是對(duì)屏幕制定區(qū)域進(jìn)行截圖,必須要知道該區(qū)域在屏幕上的坐標(biāo)万哪,因此需要使用pyautogui大三方庫(kù)侠驯,windows上不需要安裝其他依賴(lài)模塊。
import pyautogui
print('Press Ctrl-C to quit.')
try:
while True:
# Get and print the mouse coordinates.
x, y = pyautogui.position()
positionStr = 'X: ' + str(x).rjust(4) + ' Y: ' + str(y).rjust(4)
print(positionStr, end='')
print('\b' * len(positionStr), end='', flush=True)
except KeyboardInterrupt:
#按ctrl+c結(jié)束程序
print('\nDone.')
3 指定區(qū)域屏幕截圖
??需要使用PILLOW第三方庫(kù)奕巍,安裝方法自行百度吟策。實(shí)現(xiàn)的操作是對(duì)制定區(qū)域截圖,并保存到目標(biāo)文件夾中的止,之后以二進(jìn)制只讀方式打開(kāi)該圖片檩坚,返回其結(jié)果。每次保存圖片會(huì)自動(dòng)覆蓋之前的圖片诅福,具體代碼如下:
from PIL import ImageGrab
def get_file_content():
#左上坐標(biāo)點(diǎn)(x1,y1)匾委,右上坐標(biāo)點(diǎn)(x2,y2),box = (x1,y1,x2,y2)
box = (1450,267,1850,365)
#截圖
image = ImageGrab.grab(box)
while True:
try:
#保存圖片
filepath = "C:/Users/MAIBENBEN/Desktop/1.jpg"
image.save(filepath)
break
except:
continue
4 文字識(shí)別
??在此需要用到百度AI開(kāi)放平臺(tái)文字識(shí)別技術(shù),因此需要注冊(cè)百度智能云賬號(hào)/百度賬號(hào)氓润,注冊(cè)過(guò)程十分簡(jiǎn)單赂乐,一分鐘完成,具體步驟可以參考咖气。
??為了使用該功能挨措,需要安裝baidu-aip第三方庫(kù),很小巧且好用的一個(gè)庫(kù)崩溪,識(shí)別速度很快浅役,2秒左右。具體代碼如下:
from aip import AipOcr
def word_identify():
#輸入自己的應(yīng)用的信息
APP_ID = '***'
API_KEY = '***'
SECRET_KEY = '***'
client= AipOcr(APP_ID, API_KEY, SECRET_KEY)
#讀取圖片信息悯舟,返回二進(jìn)制結(jié)果
img = get_file_content()
#返回識(shí)別結(jié)果
res = client.basicGeneral(img)
print(res)
#返回識(shí)別結(jié)果中的文字信息
return ''.join([word['words'] for word in res['words_result']])
5 按鍵識(shí)別并保存到剪貼板
??實(shí)現(xiàn)功能為担租,當(dāng)程序運(yùn)行后,按下某鍵就進(jìn)行截圖和文字識(shí)別操作抵怎,按下某鍵退出程序奋救,按其他鍵無(wú)反應(yīng),需要用到keyboard第三方庫(kù)反惕。還需將識(shí)別結(jié)果保存到剪貼板中尝艘,需要使用第三方庫(kù)pyperclip。程序運(yùn)行后按b鍵進(jìn)行截圖識(shí)別姿染,按q鍵結(jié)束程序背亥,具體代碼如下:
import keyboard
import pyperclip
while True:
try:
print('Press and release a shortcut(b): ')
? ?#捕捉按鍵狀態(tài)
shortcut = keyboard.read_key()
print('Shortcut selected:', shortcut)
if shortcut == 'b':
words = word_identify()
print(words)
? ? ?#識(shí)別結(jié)果保存到剪貼板
pyperclip.copy(words)
elif shortcut == 'q':
break
else:
continue
except KeyboardInterrupt:
#防止出現(xiàn)按ctrl+c結(jié)束程序的情況
print("\n")
continue
第一次用簡(jiǎn)書(shū)投稿秒际,若代碼有錯(cuò)誤可在評(píng)論區(qū)交流。
最后狡汉,祝你白嫖開(kāi)心娄徊!
PS:之后有時(shí)間可能會(huì)做如下更新:
??1.使用selenium模塊自動(dòng)打開(kāi)瀏覽器進(jìn)行搜索。
??2.對(duì)問(wèn)題進(jìn)行精細(xì)化處理盾戴,使其更便于搜索寄锐。
??3.自動(dòng)捕獲窗口坐標(biāo)位置,在此基礎(chǔ)上進(jìn)行截圖操作尖啡。
??4.添加題庫(kù)橄仆,從題庫(kù)對(duì)比尋找答案,沒(méi)有則自行搜索衅斩。