0.背景
每逢周六,如果手頭項(xiàng)目不緊,有空閑的話,大家會(huì)醞釀一個(gè)weekend的小項(xiàng)目, 這個(gè)周六下午,大家聊起了"頭腦王者"這個(gè)微信小程序,大家討論的不亦樂(lè)乎,忽然有人提議為這款游戲做一款問(wèn)題查詢輔助類(lèi)的程序,算不上外掛,姑且叫助手之類(lèi)的吧.
離下班還有一個(gè)小時(shí),于是乎大家開(kāi)干......
Screen Shot 2018-01-28 at 00.05.38.png
1.思路
既然開(kāi)始了,馬上就有了思路:
- 截取手機(jī)的屏幕 ,獲取題目的圖片
- 裁剪圖片,獲取題目部分的圖片
- 圖片通過(guò)OCR識(shí)別成文字,這個(gè)就是題目關(guān)鍵字
- 把題目關(guān)鍵字通過(guò)搜索引擎查詢,把查詢結(jié)果顯示出來(lái)





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秒鐘就可以返回查詢結(jié)果,這個(gè)要遠(yuǎn)遠(yuǎn)高于你手工的操作,程序自動(dòng)處理手機(jī)截屏,題目關(guān)鍵字的OCR識(shí)別,自動(dòng)打開(kāi)瀏覽器并查詢關(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.
