當前位置:
首頁 > 最新 > 教你巧玩沖頂大會答題類遊戲

教你巧玩沖頂大會答題類遊戲

這兩天沖頂大會之類的直播答題 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 去了。

喜歡這篇文章嗎?立刻分享出去讓更多人知道吧!

本站內容充實豐富,博大精深,小編精選每日熱門資訊,隨時更新,點擊「搶先收到最新資訊」瀏覽吧!


請您繼續閱讀更多來自 Cocoa開發者社區 的精彩文章:

接手一個負分的 iOS 項目後我做了什麼

TAG:Cocoa開發者社區 |