V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
The Go Programming Language
http://golang.org/
Go Playground
Go Projects
Revel Web Framework
henson
V2EX  ›  Go 编程语言

Golang 写的问答 APP 自动答题助手

  •  
  •   henson ·
    henson · 2018-01-22 15:49:32 +08:00 · 2245 次点击
    这是一个创建于 2279 天前的主题,其中的信息可能已经有所发展或是发生改变。

    项目地址:

    https://github.com/henson/Answer

    https://gitee.com/henson/Answer

    欢迎试用,顺便给个星,谢谢!

    Travis Status for henson/Answer Go Report Card

    Answer

    问答 APP 自动答题助手,适用于 百万英雄 / 芝士超人 / 冲顶大会 / 花椒百万赢家 等多个直播答题类 APP,支持 iOS、Android 手机和模拟器,3 秒出结果,可以自动答题。

    目录

    特点

    • 超快的响应速度
    • 支持 iOS、Android
    • 支持真机测试和模拟器
    • 全面覆盖百万英雄 /芝士超人 /冲顶大会 /花椒百万赢家等多个直播答题类 APP
    • 优化搜索逻辑保证高正确率
    • 多维度参考值,答案交叉验证
    • 自动答题(目前仅支持 Android )

    更新日志

    • 2018.01.21
      • 加入搜狗汪仔答题助手的结果
    • 2018.01.20
      • 改进 ABD 手机截屏获取方式,提高速度
      • 增加 Android 自动答题功能
      • 题目和选项一次截取识别
    • 2018.01.18
      • 增加知识图谱结果
    • 2018.01.15
      • 调整适应性,百万英雄 /芝士超人 /冲顶大会 /花椒百万赢家等全适用
    • 2018.01.10
      • 改进算法逻辑,提高正确率

    方法原理

    1. ADB 获取手机截屏
    • ~~命令行生成截屏图片,把图片传输到电脑上~~
    adb shell screencap -p /sdcard/screenshot.png
    adb pull /sdcard/screenshot.png .
    
    adb shell screencap -p
    
    1. OCR 识别题目与选项文字

    ​ 两个方法:

    • 谷歌 Tesseract ,安装软件即可,不同电脑配置运行效率不同
    • 百度 OCR ,需要注册百度 API,每天调用次数有限
    1. 申请百度 OCR

    1. 通过算法对搜索结果进行筛选、判断

      目前用到的算法:

    • 文本关联相似度算法
    • 结巴分词算法

    文本关联相似度算法

    (参考 github.com/smileboywtu/MillionHeroAssistant

    通过分别统计问题与三个答案的关联度来选择正确的答案,在集合相当大的情况下,关联度会呈现正相关。

    假设题目是:

    中国历史上著名的科举制度开始于那个朝代?

    • 汉朝
    • 唐朝
    • 隋朝

    我们先用百度分别搜索汉朝唐朝隋朝,得到如下数据:

    朝代 | 搜索出的数量(来自百度为您找到相关结果约) ---- | ------------------------------------------ 汉朝 | 17900000 唐朝 | 30500000 隋朝 | 16600000

    然后我们在用题目 + 答案的方式,搜索示例:

    中国历史上著名的科举制度开始于那个朝代? 汉朝 得到三次的搜索结果:

    关键字 | 搜索出的数量(来自百度为您找到相关结果约) -------- | ------------------------------------------ Q + 汉朝 | 602000 Q + 唐朝 | 837000 Q + 隋朝 | 658000

    关联度计算方式:

    K = count(Q & A) / (count(Q) * count(A))
    

    关联度如下:

    答案 | 关联度 ---- | ------ 汉朝 | 0.0336 唐朝 | 0.0274 隋朝 | 0.0396

    使用步骤

    Android

    1. 安装 ADB

    windows

    下载地址: https://adb.clockworkmod.com/ ,并配置环境变量

    Mac

    使用 brew 进行安装 brew cask install android-platform-tools

    安装完后插入安卓设备且安卓已打开 USB 调试模式,终端输入 adb devices ,显示设备号则表示成功。我手上的机子是坚果 pro1,第一次不成功,查看设备管理器有叹号,使用 handshaker 加载驱动后成功,也可以使用豌豆荚之类的试试。

    List of devices attached
    6934dc33    device
    

    若不成功,可以参考Android 和 iOS 操作步骤进行修改

    2.安装模拟器

    windows

    • 安装夜神模拟器逍遥模拟器,然后在模拟器上安装西瓜视频、冲顶大会等答题 APP
    • 把模拟器设置成竖屏(分辨率 900*1440 ),打开 USB 调试模式
    • 确认端口号,夜神模拟器 62001,逍遥模拟器 21503
    • 连接测试,连接成功会有提示
    adb connect 127.0.0.1:62001
    

    3. 安装谷歌 Tesseract

    Windows 下链接: 推荐使用安装版,在安装时选择增加中文简体语言包

    其他系统: https://github.com/tesseract-ocr/tesseract/wiki

    iOS

    1.安装 WDA

    iOS 真机如何安装 WebDriverAgent (参考 https://testerhome.com/topics/7220

    2.安装 tesseract 以及简体中文包

    Mac

    brew install tesseract
    cd /usr/local/Cellar/tesseract/{version}/share/tessdata
    wget https://github.com/tesseract-ocr/tessdata/raw/master/chi_sim.traineddata
    

    配置 Golang 环境

    安装 Golang

    https://golang.org/doc/
    

    从源码安装本项目

    go get -u github.com/henson/Answer
    

    直接下载可执行文件

    根据平台直接下载各版本运行文件: releases

    运行

    1. 根据实际情况设置配置文件

    配置参数说明:

    # 是否开始调试模式
    debug: true
    # 游戏名称, xigua 西瓜视频 /cddh 冲顶大会 /huajiao 花椒 /zscr 芝士超人
    app: xigua
    # 是否模拟自动答题
    automatic: false
    # 对应的设备类型:ios or android
    device: android
    # android 连接地址
    adb_address: '127.0.0.1:62001'
    # ios 设备连接 wda 的地址
    wda_address: '127.0.0.1:8100'
    # 西瓜视频裁剪区域:x,y,w,h
    xg_q_x: 30
    xg_q_y: 240
    xg_q_w: 840
    xg_q_h: 180
    xg_a_x: 30
    xg_a_y: 410
    xg_a_w: 840
    xg_a_h: 450
    ……
    
    1. 填入百度 OCR key

    修改参数:

    # 百度 OCR API 参数
    Baidu_API_Key: "**************************"
    Baidu_Secret_Key: "**************************"
    
    1. 程序运行:
    ./Answer
    

    cd cmd
    go run main.go
    

    项目参考

    本项目在开发过程中参考了以上开源项目,在此对开源作者表示感谢!

    TODO

    • 对题目进行分类,建立题型库,针对不同题型采取不同的处理方法1.png1.png
    6 条回复    2018-01-23 10:38:16 +08:00
    Len1133
        1
    Len1133  
       2018-01-22 15:58:22 +08:00
    赞一个
    anasplrt34
        2
    anasplrt34  
       2018-01-22 16:44:50 +08:00
    这算法能解释下么....
    firefox12
        3
    firefox12  
       2018-01-22 19:23:45 +08:00 via iPhone
    相当干活
    firefox12
        4
    firefox12  
       2018-01-22 19:28:15 +08:00 via iPhone
    干货 当然最核心的还是百度干了。比如那个句话的意思 。

    如果改成这种题型 估计就不行了
    下面四句诗 那句是作者小时候的作品?
    a b c d 四个答案 那个是
    Julio
        5
    Julio  
       2018-01-23 09:29:43 +08:00
    刚开始就用 node 撸了一个版本,其中的搜索和算法比楼主的还多,但是依然无法保证准确率,对于一些简单的题目,还是很容易搜索和分析的。但是复杂的题目或者数学题就没戏了。还有搜狗的那个也不靠谱。特别对于最后一题,准确率堪忧,坑了我好几次。
    zarte
        6
    zarte  
       2018-01-23 10:38:16 +08:00
    支持下
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   我们的愿景   ·   实用小工具   ·   1712 人在线   最高记录 6543   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 26ms · UTC 16:38 · PVG 00:38 · LAX 09:38 · JFK 12:38
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.