背景
每逢周六,如果手頭項(xiàng)目不緊,有空閑的話,大家會(huì)醞釀一個(gè)weekend的小項(xiàng)目, 這個(gè)周六下午,大家聊起了"頭腦王者"這個(gè)微信小程序,大家討論的不亦樂(lè)乎,忽然有人提議為這款游戲做一款問(wèn)題查詢(xún)輔助類(lèi)的程序,算不上外掛,姑且叫助手之類(lèi)的吧.
離下班還有一個(gè)小時(shí),于是乎大家開(kāi)干......
1.思路
既然開(kāi)始了,馬上就有了思路:
截取手機(jī)的屏幕 ,獲取題目的圖片
裁剪圖片,獲取題目部分的圖片
圖片通過(guò)OCR識(shí)別成文字,這個(gè)就是題目關(guān)鍵字
把題目關(guān)鍵字通過(guò)搜索引擎查詢(xún),把查詢(xún)結(jié)果顯示出來(lái)
截取手機(jī)的屏幕 ,獲取題目的圖片
裁剪后的圖片,只有題目
OCR返回文字 就是題目關(guān)鍵字
通過(guò)搜索引擎查詢(xún)出結(jié)果
2.運(yùn)行
因?yàn)槭侵苣╉?xiàng)目,只有一個(gè)小時(shí)的時(shí)間,做的比較匆忙,算是拋磚引玉吧.
本來(lái)像抓取過(guò)來(lái)搜索結(jié)果,再做正則表達(dá)式處理,沒(méi)想到遇到了百度https加密的小坑,就直接采用webbrowser.open的方式打開(kāi).
實(shí)測(cè)手機(jī)出現(xiàn)題目,執(zhí)行程序大概2秒鐘就可以返回查詢(xún)結(jié)果,這個(gè)要遠(yuǎn)遠(yuǎn)高于你手工的操作,程序自動(dòng)處理手機(jī)截屏,題目關(guān)鍵字的OCR識(shí)別,自動(dòng)打開(kāi)瀏覽器并查詢(xún)關(guān)鍵字,全部自動(dòng)化了,希望能在"頭腦王者"過(guò)關(guān)斬將中助你一臂之力!
3.總結(jié)
作為一個(gè)weekend的練手項(xiàng)目,主要是提高我們程序人員的興趣,擴(kuò)大大家的知識(shí)面,這個(gè)提升大家的開(kāi)發(fā)水平有很大幫助.
另外,我們程序猿們不僅有尋找BUG的煩惱,也有享受編程的快樂(lè)和生活的樂(lè)趣, Hello, World!
兩枚程序猿祝你周末愉快!
4.代碼
這款頭腦王者微信小程序,最近是特別的火,借助微信朋友圈的這把火燒的得更旺了
我們周末的一個(gè)weekend小項(xiàng)目,做了一個(gè) 頭腦王者小助手
-
import os
-
from PIL import Image
-
from aip import AipOcr # 引入baidu文字識(shí)別OCR SDK
-
from urllib.parse import quote
-
# 定義常量
-
APP_ID = '你的APP_ID'
-
API_KEY = '你的API_KEY'
-
SECRET_KEY = '你的SECRET_KEY'
-
# 讀取圖片
-
def get_file_content(filePath):
-
with open(filePath, 'rb') as fp:
-
return fp.read()
適用于安卓手機(jī),通過(guò)adb命令截屏,并把圖片傳給電腦
-
-
-
def screencap():
-
mcom = "adb shell /system/bin/screencap -p /sdcard/mscreen.png"
-
os.system(mcom)
-
mcom = "adb pull /sdcard/mscreen.png ./mscreen.png"
-
os.system(mcom)
-
裁剪圖片,只把題目部分的截圖保存
-
-
-
def cropimg():
-
im = Image.open("mscreen.png")
-
img_size = im.size
-
print("圖片寬度和高度分別是{}".format(img_size))
-
x = 50
-
y = 400
-
w = 650
-
h = 200
-
region = im.crop((x, y, x+w, y+h))
-
region.save("screen.png")
-
return "screen.png"
-
-
-
def ocr(imgUrl):
-
# 初始化ApiOcr對(duì)象
-
aipOcr = AipOcr(APP_ID, API_KEY, SECRET_KEY)
-
# 調(diào)用通用文字識(shí)別接口
-
result = aipOcr.basicGeneral(get_file_content(imgUrl))
-
-
print(result['words_result_num'])
-
s = ''
-
for i in range(result['words_result_num']):
-
s += result['words_result'][i]['words']
-
print(s)
-
return s
-
-
-
def baidu(word):
-
url = "http://www.baidu.com/s?wd=%s" % quote(word)
-
print(url)
-
import webbrowser
-
webbrowser.open(url)
-
-
-
-
if __name__ == "__main__":
-
-
# 通過(guò)adb命令截屏,并把圖片傳給電腦
-
#screencap()
-
-
# 裁剪圖片,只把題目部分的截圖保存
-
url = cropimg()
-
-
# 調(diào)用baidu通用文字識(shí)別接口,返回識(shí)別的文字
-
s = ocr(url)
-
print(s)
-
# 打開(kāi)默認(rèn)瀏覽器,百度一下獲取的題目?jī)?nèi)容
-
baidu(s)
注意:本代碼的百度API需要換成你自己的API參數(shù),這個(gè)不費(fèi)事也就分分鐘的事情申請(qǐng)一個(gè)就OK.
|