點擊上方「iOS開發」,選擇「置頂公眾號」
關鍵時刻,第一時間送達!
這兩天衝頂大會之類的直播答題 APP 突然火了起來,不得不佩服網際網路公司的想像力,那麼程式設計師怎麼用不同的方式玩轉答題遊戲呢。之前微信的跳一跳小遊戲刷爆朋友圈,已經有很多朋友寫出了自動化的腳本輔助,一看到答題遊戲就馬上想到可以用類似的方式來寫一個簡單的腳本。我發現已經有朋友做了個調用百度 api 的,自己就再寫個直接用識別庫的吧,代碼思路簡單,可以用在各類答題遊戲中。使用文字識別加搜索,只能起到輔助決策的作用,可以參考結果,增加準確率,也保證不了全對。
具體代碼和環境及使用請戳:https://github.com/Skyexu/TopSup
隨手 Star ^ ^
具體做法
1.使用 ADB 獲取手機截屏
adb shell screencap -p /sdcard/screenshot.png
adb pull /sdcard/screenshot.png .
2.OCR 識別題目與選項文字
分別通過代碼截取題目區域與選項區域,再進行文字識別
文字識別兩個方法:
3.搜索判斷
結果判斷方式
1.直接打開瀏覽器搜索問題
2.題目+每個選項都通過搜尋引擎進行搜索,從網頁代碼中提取搜索結果的數目
3.只用題目進行搜索,統計結果頁面代碼中包含選項的詞頻
以下為兩個示例結果,可以看出下面兩道題,兩個方法有不同的結果,可以根據問題類型進行不同的決策。
參考了 I Hacked HQ Trivia But Here’s How They Can Stop Me
主要代碼
驗證思路的主要代碼是實現截圖,識別,調用瀏覽器搜索。其實很簡單
def pull_screenshot():
os.system('adb shell screencap -p /sdcard/screenshot.png')
os.system('adb pull /sdcard/screenshot.png .')
pull_screenshot()
img = Image.open("./screenshot.png")
# 切割題目位置,左上角坐標和右下角坐標,自行測試解析度
question = img.crop((50, 350, 1000, 560)) # 堅果 pro1
choices = img.crop((75, 535, 990, 1150))
#region = img.crop((75, 315, 1167, 789)) # iPhone 7P
# tesseract 路徑
pytesseract.pytesseract.tesseract_cmd = 'C:\Program Files (x86)\Tesseract-OCR\tesseract'
# 語言包目錄
tessdata_dir_config = '--tessdata-dir "C:\Program Files (x86)\Tesseract-OCR\tessdata"'
# lang 指定中文簡體
text = pytesseract.image_to_string(question, lang='chi_sim', config=tessdata_dir_config)
text = text.replace("", "")[2:]
print(text)
webbrowser.open('https://baidu.com/s?wd='+text)
總結
寫完簡單版本想一想,怕是還沒有 Hi ,Siri來的方便,不過好在識別準確,查詢快,後來又加了幾個方法輔助決策。文字識別加搜索,在這類遊戲中並不能完全做對,想要實現完全對,可能還是得抓包? 或者存儲題庫,不過這就太費時間了。有了 ADB 截圖,怕是各種小輔助都可以玩了,大家可以發揮想像力。python 寫小腳本真的很方便。接下來可以嘗試文字識別後 nlp 處理一下關係,然後搜索不同選擇結果,增加準確率等等。不玩了不玩了,得寫 paper 去了。
【點擊成為Android大神】