1. 程式人生 > 其它 >go實現西瓜視訊花椒直播等平臺智慧答題

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哩舞。