教你巧玩沖頂大會答題類遊戲
這兩天沖頂大會之類的直播答題 APP 突然火了起來,不得不佩服互聯網公司的想像力,那麼程序員怎麼用不同的方式玩轉答題遊戲呢。之前微信的跳一跳小遊戲刷爆朋友圈,已經有很多朋友寫出了自動化的腳本輔助,一看到答題遊戲就馬上想到可以用類似的方式來寫一個簡單的腳本。我發現已經有朋友做了個調用百度 api 的,自己就再寫個直接用識別庫的吧,代碼思路簡單,可以用在各類答題遊戲中。使用文字識別加搜索,只能起到輔助決策的作用,可以參考結果,增加準確率,也保證不了全對。
隨手 Star ^ ^
具體做法
1.使用 ADB 獲取手機截屏
adb shell screencap -p /sdcard/screenshot.png
adb pull /sdcard/screenshot.png .
2.OCR 識別題目與選項文字
分別通過代碼截取題目區域與選項區域,再進行文字識別
文字識別兩個方法:
谷歌Tesseract,安裝軟體即可,接下來主要使用這個方法
百度 OCRlivc,需要註冊百度 API,每天調用次數有限
3.搜索判斷
結果判斷方式
1.直接打開瀏覽器搜索問題
2.題目+每個選項都通過搜索引擎進行搜索,從網頁代碼中提取搜索結果的數目
3.只用題目進行搜索,統計結果頁面代碼中包含選項的詞頻
以下為兩個示例結果,可以看出下面兩道題,兩個方法有不同的結果,可以根據問題類型進行不同的決策。
主要代碼
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 路徑
# 語言包目錄
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 去了。
TAG:Cocoa開發者社區 |