酷! 程序員用Python帶你玩轉(zhuǎn)沖頂大會(huì)
2018年1月3日,王思聰被迫動(dòng)用自己的微博,為一個(gè)誕生不到10天的App打了廣告,“每天我都發(fā)獎(jiǎng)金,今晚9點(diǎn)就發(fā)10萬(wàn)”。對(duì)他而言,這天的微博并非生日宴會(huì),而是戰(zhàn)場(chǎng)。王思聰?shù)囊粍t微博開(kāi)啟了“全民競(jìng)答”類(lèi)APP的爆紅之路。
一時(shí)間,直播巨頭們都跟上“王校長(zhǎng)”的節(jié)奏,“沖頂大會(huì)”之外,映客旗下的“芝士超人”、今日頭條旗下的“百萬(wàn)英雄”和花椒直播旗下的“百萬(wàn)作戰(zhàn)”紛紛亮相,每天狂撒百萬(wàn)現(xiàn)金。
“沖頂大會(huì)”、“芝士超人”、“百萬(wàn)英雄”等知識(shí)競(jìng)答游戲火了,獎(jiǎng)金數(shù)額也從最初的人民幣5萬(wàn)、10萬(wàn)漲到了100萬(wàn)、101萬(wàn)。
為了能夠全部答對(duì)12道題,平分?jǐn)?shù)額如此龐大的獎(jiǎng)金池,參賽者開(kāi)始想方設(shè)法提高自己答題的正確率。
正如節(jié)目主持人介紹的一樣,許多答題者開(kāi)始尋找身邊的朋友共同答題,以求覆蓋到更多類(lèi)型的知識(shí)點(diǎn),提高通關(guān)的幾率。
各種各樣的微信、QQ答題群誕生,每個(gè)人都在群聊里分享自己認(rèn)為正確的答案。
讓你猜不到的是,答題游戲居然也有外掛!
為了能夠全部答對(duì)12道題,平分?jǐn)?shù)額如此龐大的獎(jiǎng)金池,參賽者開(kāi)始想方設(shè)法提高自己答題的正確率。
已經(jīng)有程序員設(shè)計(jì)了“輔助程序”,用于快速檢索答案。
這個(gè)用Python程序可以修剪并識(shí)別圖片中的文字內(nèi)容(問(wèn)題和選項(xiàng)),然后通過(guò)百度進(jìn)行搜索關(guān)鍵字出現(xiàn)的次數(shù),最后將統(tǒng)計(jì)的信息展示出來(lái)。這樣一來(lái),答題者就可以根據(jù)統(tǒng)計(jì)數(shù)據(jù)來(lái)選擇相應(yīng)的答案,極大提高了答題的正確率。
那么程序員到底應(yīng)該如何玩呢?
首先用 WDA 來(lái)獲取屏幕截圖。WDA 本是 Facebook 開(kāi)發(fā)的一套 iOS 測(cè)試框架,前幾天看見(jiàn)大家都用來(lái)做微信“跳一跳”的外掛,便特意去了解了一下,發(fā)現(xiàn)也能用在沖頂大會(huì)上。
之后 crop 出題目所在的位置(可能需要適配手機(jī)屏幕),然后調(diào)用開(kāi)放的 OCR 接口讀取出文字文本,最后調(diào)用搜索引擎,就可以達(dá)到之前 gif 圖的效果。這套環(huán)境是 iOS + Mac,如果是安卓應(yīng)該有更方便的方法。
其實(shí)最初的想法是希望搜索+選擇答案全部自動(dòng)化完成的,思路是 OCR 題目和候選答案,組成三個(gè)組合扔到百度或谷歌里搜索,然后哪個(gè)組合的結(jié)果出現(xiàn)次數(shù)最多就選擇哪個(gè)。試了幾個(gè)問(wèn)題后發(fā)現(xiàn)并不是這樣,比如上面圖片的“駱駝的駝峰是存儲(chǔ)什么的?”,可能多數(shù)人都會(huì)認(rèn)為是水,因此出現(xiàn)的次數(shù)最多,其實(shí)是錯(cuò)誤答案。
最后還有兩個(gè)痛點(diǎn):
免費(fèi) OCR 接口調(diào)用次數(shù)有限,所以不能一直去截屏識(shí)別,只能等題目出現(xiàn)時(shí)運(yùn)行程序。
官方也很套路,有的問(wèn)題是沒(méi)法搜索的。比如這種:
最后附上代碼:
# python3 import wda import io import urllib.parse import webbrowser import requests import time import base64 from PIL import Image c = wda.Client() # 百度OCR API api_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
(代碼來(lái)源:https://livc.io/blog/204)
以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
相關(guān)文章
python釘釘機(jī)器人運(yùn)維腳本監(jiān)控實(shí)例
今天小編就為大家分享一篇python釘釘機(jī)器人運(yùn)維腳本監(jiān)控實(shí)例,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2019-02-02使用tensorflow實(shí)現(xiàn)線(xiàn)性svm
這篇文章主要為大家詳細(xì)介紹了使用tensorflow實(shí)現(xiàn)線(xiàn)性svm的相關(guān)資料,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2018-09-09基于Python實(shí)現(xiàn)自動(dòng)化生成數(shù)據(jù)報(bào)表
這篇文章主要介紹了如何使用Python自動(dòng)化生成數(shù)據(jù)報(bào)表,從而提高效率,再也不用一條條數(shù)據(jù)創(chuàng)建Excel數(shù)據(jù)報(bào)表了,感興趣的同學(xué)可以試一試2022-01-01python使用typing模塊加強(qiáng)代碼的可讀性(實(shí)戰(zhàn)演示)
Python是一門(mén)弱類(lèi)型的語(yǔ)言,很多時(shí)候我們可能不清楚函數(shù)參數(shù)類(lèi)型或者返回值類(lèi)型,很有可能導(dǎo)致一些類(lèi)型沒(méi)有指定方法,typing模塊可以很好的解決這個(gè)問(wèn)題。下面通過(guò)本文給大家介紹python使用typing模塊加強(qiáng)代碼的可讀性,感興趣的朋友一起看看吧2021-12-12