go實現西瓜視訊花椒直播等平臺智慧答題
本文原始碼
https://github.com/Chain-Zhang/answer_ai
介紹
最近出了很多答題平分獎金的直播,只要能夠連續答對12道題,就能與所有答對的人一起平分獎池裡的獎金,20萬到500萬不等。當這個時候,我才體會到“書到用時方恨少”這句至理名言。這時突然想到,咦!我們不是有無所不知的網際網路嗎,題目拿到百度中一搜不就完了。可是一看答題時間只有10秒,儘管我有著單身20多年的手速,也愣是做不到呀。再一想,我特麼是程式猿呀,這種事還需要我親自動手?
於是一通百度,找到了個大神的java智慧答題的原始碼,這裡把大神的原始碼地址貼出來供大家參考:
https://github.com/lingfengsan/MillionHero
然而,我學了這麼一大段時間的go語言,能不能用go來實現一下呢。 於是就動手嘗試了一下,思路與前面提到的java的工具差不多。下面就來說道說道我是怎麼實現的。
思路
1、手機與電腦連線,並開啟直播頁面 2、當頁面出題時,通過adb截圖並儲存到電腦 3、通過百度AI文字識別,提取圖片中的題目和選項的文字 4、使用百度搜索並,然後統計搜尋得到結果數量 5、比較搜尋到的結果數量並排序 6、否定的問題選擇數量最少的選項,肯定的問題選數量最多的選項
環境
硬體
▪ windows電腦一臺 ▪ 安卓手機一部 ▪ 安卓資料線一根
軟體
▪ golang 開發環境 ▪ adb 安卓除錯驅動
其他
▪ 百度AI開發者平臺建立一個文字識別的應用
環境搭建
硬體就沒有什麼好說的了。這裡主要說下軟體。
golang開發環境
首先,肯定是要下載安裝包啦,這裡給個下載地址,自己根據情況選擇版本下載:golang安裝包 (i386表示x86,amd64表示x64)。
安裝完Go之後,我們最好還是檢查一些所有的環境變數是否正常。主要的環境變數有以下幾個:
▪ GOROOT:Go的安裝目錄
▪ GOPATH:用於存放Go語言Package的目錄,這個目錄不能在Go的安裝目錄中
▪ GOBIN:Go二進位制檔案存放目錄,寫成%GOROOT%bin
就好
▪ PATH:需要將%GOBIN%加在PATH變數的最後,方便在命令列下執行Go
完成之後在cmd視窗輸入:go version
go version
如圖所示,表示我們已經安裝配置成功。
然後就是IDE了,這個就更簡單了。直接用記事本都可以,當然也可以用些輕量的編輯器,vscode, vim都是可以的。也可以用goland等。這些看自己的愛好。反正我是用的vscode。
adb安裝
adb的全稱為Android Debug Bridge 除錯橋,是連線Android手機與PC端的橋樑,通過adb可以管理、操作模擬器和裝置,如安裝軟體、檢視裝置軟硬體引數、系統升級、執行shell命令等。 這裡先給一個下載地址:adb下載地址 (有積分的大佬們從我這裡下吧,我一分都沒有了,想賺點分) 下載完成後安裝好即可。然後把安裝好的路徑配置到環境變數中去,方便我們在cmd視窗下使用adb命令。配置好後,可以在cmd視窗下執行adb devices
命令:
adb devices
從圖中可以看到,這裡我們啟動了adb,並且給了個裝置列表,因為我沒有連線安卓裝置,所以沒有東西顯示。這個時候,我們把安卓手機用資料線連線到電腦,並在手機上開啟USB除錯選項。設定->開發者選項->USB除錯
,不同的品牌的手機可能有差別,百度一下你就知道。
有時候可能做到這些還是列不出你的裝置。這時候再需要做以下事情:
1、在計算機管理中裝置管理中找到你的裝置,然後右擊->屬性->詳細資訊->在詳細資訊頁面的屬性中找到硬體ID,再複製的硬體ID,我的手機是魅族,我的硬體ID是:2A45
2、在C:Users你的使用者名稱.android
目錄下找到adb_usb.ini檔案,如果沒有自己新建。然後把你剛剛複製的硬體ID寫進去,由於這個ID是16進位制的,所以前面加上0x,即:0x2A45
。
3、重啟adb,停止Adb:adb kill-server
,啟動adb:adb start-server
。完成這些應該就可以了。如果還是不行,請自行百度。
至此,我們的環境算是完成了。
實驗
實驗之前,肯定是下載原始碼嘍,當然還有少不了的依賴包。這裡我用了個baidu-ai-sdk的包。可以通過以下命令完成安裝:
go get github.com/chenqinghe/baidu-ai-go-sdk
然後通過git下載我的原始碼:
git clone https://github.com/Chain-Zhang/answer_ai.git
我們先看下main函式的內容
func main(){
for {
var cmd string
fmt.Printf("> ")
fmt.Scan(&cmd)
switch cmd{
case "1":
ai.Start()
case "2":
ai.ExeCommand("cmd", []string{"/c", "adb", "devices"})
case "exit":
os.Exit(1)
}
}
}
從程式碼中可以看到,在程式執行的時候會等待使用者的輸入。
1、當輸入 1
時會進行截圖答題的操作
2、當輸入 2
時會列出與電腦連線的裝置
3、當輸入 exit
時會退出程式
下面我們在cmd視窗中進入我們程式碼的目錄,執行以下命令來執行我們的程式:
go run main.go
然後輸入2,看下是否有裝置連線:
檢視裝置
然後手機開啟直播,當主播出題時,輸入1回車,這裡實驗所以手機直接開啟一張圖片,手機介面如下圖:
手機介面
經過一系列的分析後,返回以下結果:
答題結果
根據否定的問題選擇數量最少的選項,肯定的問題選數量最多的選項所以這一題選擇: 2-c哩c哩舞。
更新
為了提高答題的準確率,以及答題速度,本工具更新了,百度搜索,搜狗搜尋,360搜尋這3個搜尋引擎同時查詢答案,並採取了多執行緒同時查詢每一個結果。更新後,效果如下:
更新後效果
根據3個搜尋引擎的結果作為對比,本題應該選擇: 2-c哩c哩舞。