酷! 程式員用Python帶你玩轉沖頂大會,python大會
2018年1月3日,王思聰被迫動用自己的微博,為一個誕生不到10天的App打了廣告,“每天我都發獎金,今晚9點就發10萬”。對他而言,這天的微博並非生日宴會,而是戰場。王思聰的一則微博開啟了“全民競答”類APP的爆紅之路。
一時間,直播巨頭們都跟上“王校長”的節奏,“沖頂大會”之外,映客旗下的“芝士超人”、今日頭條旗下的“百萬英雄”和花椒直播旗下的“百萬作戰”紛紛亮相,每天狂撒百萬現金。
“沖頂大會”、“芝士超人”、“百萬英雄”等知識競答遊戲火了,獎金數額也從最初的人民幣5萬、10萬漲到了100萬、101萬。
為了能夠全部答對12道題,平分數額如此龐大的獎金池,參賽者開始想方設法提高自己答題的正確率。
正如節目主持人介紹的一樣,許多答題者開始尋找身邊的朋友共同答題,以求覆蓋到更多類型的知識點,提高通關的幾率。
各種各樣的、QQ答題群誕生,每個人都在群聊裡分享自己認為正確的答案。
讓你猜不到的是,答題遊戲居然也有外掛!
為了能夠全部答對12道題,平分數額如此龐大的獎金池,參賽者開始想方設法提高自己答題的正確率。
已經有程式員設計了“輔助程式”,用於快速檢索答案。
這個用Python程式可以修剪並識別圖片中的文字內容(問題和選項),然後通過百度進行搜尋索引鍵出現的次數,最後將統計的資訊展示出來。這樣一來,答題者就可以根據統計資料來選擇相應的答案,極大提高了答題的正確率。
那麼程式員到底應該如何玩呢?
首先用 WDA 來擷取螢幕。WDA 本是 Facebook 開發的一套 iOS 測試架構,前幾天看見大家都用來做“跳一跳”的外掛,便特意去瞭解了一下,發現也能用在沖頂大會上。
之後 crop 出題目所在的位置(可能需要適配手機螢幕),然後調用開放的 OCR 介面讀取出文字文本,最後調用搜尋引擎,就可以達到之前 gif 圖的效果。這套環境是 iOS + Mac,如果是安卓應該有更方便的方法。
其實最初的想法是希望搜尋+選擇答案全部自動化完成的,思路是 OCR 題目和候選答案,組成三個組合扔到百度或Google裡搜尋,然後哪個組合的結果出現次數最多就選擇哪個。試了幾個問題後發現並不是這樣,比如上面圖片的“駱駝的駝峰是儲存什麼的?”,可能多數人都會認為是水,因此出現的次數最多,其實是錯誤答案。
最後還有兩個痛點:
免費 OCR 介面調用次數有限,所以不能一直去截屏識別,只能等題目出現時運行程式。
官方也很套路,有的問題是沒法搜尋的。比如這種:
最後附上代碼:
# python3import wdaimport ioimport urllib.parseimport webbrowserimport requestsimport timeimport base64from PIL import Imagec = wda.Client()# 百度OCR APIapi_key = ''api_secret = ''token = ''while True: time.sleep(0.5) c.screenshot('1.png') im = Image.open("./1.png") region = im.crop((75, 315, 1167, 789)) # iPhone 7P imgByteArr = io.BytesIO() region.save(imgByteArr, format='PNG') image_data = imgByteArr.getvalue() base64_data = base64.b64encode(image_data) r = requests.post('https://aip.baidubce.com/rest/2.0/ocr/v1/general_basic', params={'access_token': token}, data={'image': base64_data}) result = '' for i in r.json()['words_result']: result += i['words'] result = urllib.parse.quote(result) webbrowser.open('https://baidu.com/s?wd='+result) break
(代碼來源:https://livc.io/blog/204)
以上就是本文的全部內容,希望對大家的學習有所協助,也希望大家多多支援幫客之家。