介绍
最近出了很多答题平分奖金的直播,只要能够连续答对 12 道题,就能与所有答对的人一起平分奖池里的奖金,20 万到 500 万不等.当这个时候,我才体会到 "书到用时方恨少" 这句至理名言.这时突然想到,咦!我们不是有无所不知的互联网吗,题目拿到百度中一搜不就完了.可是一看答题时间只有 10 秒,尽管我有着单身 20 多年的手速,也愣是做不到呀.再一想,我特么是程序猿呀,这种事还需要我亲自动手?
于是一通百度,找到了个大神的 java 智能答题的源码,这里把大神的源码地址贴出来供大家参考: https://github.com/lingfengsan/MillionHero
然而,我学了这么一大段时间的 go 语言,能不能用 go 来实现一下呢.
于是就动手尝试了一下,思路与前面提到的 java 的工具差不多.下面就来说道说道我是怎么实现的.
思路
手机与电脑连接,并打开直播页面
当页面出题时,通过 adb 截图并保存到电脑
通过百度 AI 文字识别,提取图片中的题目和选项的文字
使用百度搜索并,然后统计搜索得到结果数量
比较搜索到的结果数量并排序
否定的问题选择数量最少的选项,肯定的问题选数量最多的选项.
环境
硬件
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调试
,不同的品牌的手机可能有差别,百度一下你就知道.
有时候可能做到这些还是列不出你的设备.这时候再需要做以下事情:
在计算机管理中设备管理中找到你的设备,然后右击 -> 属性 -> 详细信息 -> 在详细信息页面的属性中找到硬件 ID,再复制的硬件 ID,我的手机是魅族,我的硬件 ID 是:2A45
在
C: \Users\你的用户名\.android
目录下找到 adb_usb.ini 文件,如果没有自己新建.然后把你刚刚复制的硬件 ID 写进去,由于这个 ID 是 16 进制的,所以前面加上 0x, 即:
0x2A45
.
重启 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 时会进行截图答题的操作.
当输入 2 时会列出与电脑连接的设备
当输入 exit 时会退出程序.
下面我们在 cmd 窗口中进入我们代码的目录,执行以下命令来运行我们的程序:
go run main.go
然后输入 2,看下是否有设备连接:
查看设备
然后手机打开直播,当主播出题时,输入 1 回车,这里实验所以手机直接打开一张图片,手机界面如下图:
手机界面
经过一系列的分析后,返回以下结果:
答题结果
根据
否定的问题选择数量最少的选项,肯定的问题选数量最多的选项
所以这一题选择: 2-c 哩 c 哩舞.
源码
本文源码
完
来源: http://www.jianshu.com/p/8cfcf0b4642e