V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
爱意满满的作品展示区。
SkyeX
V2EX  ›  分享创造

写了个冲顶大会类答题游戏辅助,有兴趣的朋友可以试试

  •  
  •   SkyeX · 2018-01-10 01:54:36 +08:00 · 11631 次点击
    这是一个创建于 2511 天前的主题,其中的信息可能已经有所发展或是发生改变。

    这两天冲顶大会之类的直播答题 APP 突然火了起来,不得不佩服互联网公司的想象力,那么程序员怎么用不同的方式玩转答题游戏呢。之前微信的跳一跳小游戏刷报朋友圈,已经有很多朋友写出了自动化的脚本辅助,一看到答题游戏就马上想到可以用类似的方式来写一个简单的脚本。我发现已经有朋友做了个调用百度 api 的,自己就再写个直接用识别库的吧,代码思路简单,可以用在各类答题游戏中。使用文字识别加搜索,只能辅助增加准确率,保证不了全对。

    目前版本增加了截图传输效率,修改了识别参数,对图像进行灰度转化,去干扰增加了识别准确率。结果判断使用了三种方式,对不同问题可以参考不同结果。

    具体代码和环境及使用请戳https://github.com/Skyexu/TopSup

    具体做法

    1. 使用 ADB 获取手机截屏
    adb shell screencap -p /sdcard/screenshot.png
    adb pull /sdcard/screenshot.png .
    
    1. OCR 识别题目与选项文字 分别通过代码截取题目区域与选项区域,再进行文字识别 cut.png

    文字识别两个方法:

    • 谷歌 Tesseract ,安装软件即可,接下来主要使用这个方法
    • 百度 OCR livc ,需要注册百度 API,每天调用次数有限
    1. 搜索判断

    结果判断方式

    1. 直接打开浏览器搜索问题 result.png

    2. 题目+每个选项都通过浏览器进行搜索,从网页代码中提取搜索结果计数

    3. 只用题目搜索结果页面代码中包含选项的词频计数法

    以下为两个示例结果,可以看出下面两道题,两个方法有不同的结果,可以更具问题类型进行不同的决策。

    result2.png

    result3.png

    参考了 I Hacked HQ Trivia But Here ’ s How They Can Stop Me

    写完简单版本想一想,怕是还没有 Hi ,Siri来的方便,不过好在识别准确,查询快,后来又加了几个方法辅助决策。不玩了,写 paper 去了

    62 条回复    2018-01-18 12:37:21 +08:00
    cnwtex
        1
    cnwtex  
       2018-01-10 02:13:33 +08:00
    10 秒够用?
    binux
        2
    binux  
       2018-01-10 03:00:32 +08:00
    知识图谱技术突飞猛进
    ysanne
        3
    ysanne  
       2018-01-10 03:03:48 +08:00
    搞了个 Java 版的,大概 4s 左右可以跑完。不过有的问题比较难弄,比如生僻字读音之类的。
    qfdk
        4
    qfdk  
       2018-01-10 05:08:36 +08:00 via iPhone
    这是高科技啊 不过 技术研究研究就好了 免得丧失公平性
    chenqh
        5
    chenqh  
       2018-01-10 05:58:15 +08:00
    感觉自己好菜..
    sutking
        6
    sutking  
       2018-01-10 08:14:26 +08:00 via iPhone
    感觉“以下选项那个符合 /是……”这类问题就坑了
    marlboros
        7
    marlboros  
       2018-01-10 08:19:49 +08:00   ❤️ 1
    科技使人进步,有时候科技也会使人退步!!!
    那些题,比最后获得的钱更具有价值!!!
    出了这类辅助,可悲可悲!!!
    sm1314
        8
    sm1314  
       2018-01-10 08:24:11 +08:00
    to 楼上,能用搜索引擎简单搜到的不算什么有价值的知识吧
    ob
        9
    ob  
       2018-01-10 08:30:02 +08:00 via Android
    @sm1314 有些题目还真的是没有价值,比如某个明星哪里结婚啊啥的。。
    LanAiFaZuo
        10
    LanAiFaZuo  
       2018-01-10 08:56:50 +08:00
    @ysanne 大佬 可以给我看看你的 java 版吗。最近在学习 java~~
    gaobh
        11
    gaobh  
       2018-01-10 09:00:22 +08:00 via iPhone
    目测要上新闻了
    yuanfnadi
        12
    yuanfnadi  
       2018-01-10 09:08:42 +08:00 via iPhone
    @LanAiFaZuo java 代码不超过 20 行。自己研究一下 很简单的
    beimenjun
        13
    beimenjun  
       2018-01-10 09:21:34 +08:00 via iPhone
    我说这类网游你们有必要用外挂做外挂吗?

    如果说是挑战技术还能理解,这个稍微核心的部分都不别人做的,这种外挂做得真的有意思吗?
    LanAiFaZuo
        14
    LanAiFaZuo  
       2018-01-10 09:34:42 +08:00
    @yuanfnadi 新手,只是想研究下~并不会。。
    ylsc633
        15
    ylsc633  
       2018-01-10 09:42:50 +08:00
    这个冲顶大会...

    感觉里面应该有很多机器人!

    然后实际发放的 有几十万? 肯定木有
    vipper
        16
    vipper  
       2018-01-10 10:27:59 +08:00
    感谢,小米 6 测试成功。

    有遇到些坑:刚开始没有找到 chi_sim.traineddata 文件,最后重新安装选择了中文,就可以了
    SkyeX
        17
    SkyeX  
    OP
       2018-01-10 11:05:42 +08:00
    @vipper 感谢测试,那个文件可以自己下载放到语言包目录下,说明里有给连接
    SkyeX
        18
    SkyeX  
    OP
       2018-01-10 11:08:13 +08:00
    @ylsc633 可能是吧,一般全答对也就每个人十几块钱,有时候多一点几十块,APP 完全和国外的一个一样啊,不知道是什么情况
    SkyeX
        19
    SkyeX  
    OP
       2018-01-10 11:09:30 +08:00
    @beimenjun 做着玩而已,也做不到全对,和题目不会,去百度是一个道理
    SkyeX
        20
    SkyeX  
    OP
       2018-01-10 11:10:23 +08:00
    @ysanne 可以分享下链接学一下吗
    SkyeX
        21
    SkyeX  
    OP
       2018-01-10 11:11:08 +08:00
    @cnwtex 差不多 3 秒内完成吧,也就辅助一下
    SkyeX
        22
    SkyeX  
    OP
       2018-01-10 11:14:38 +08:00
    @marlboros 不是很理解你的想法。这个原理也就是百度一下题目,我不会做百度一下没问题吧,也就是玩玩。说到题目价值,即使是答题真人秀很多也是背的题库吧。这些 APP 出现也就是为了刷流量,做题增长知识提升效果也没多大吧。。。。
    ljbljb007
        23
    ljbljb007  
       2018-01-10 11:42:14 +08:00
    pip install PIL 这个安装不上啊
    提示
    Could not find a version that satisfies the requirement PIL (from versions: )
    No matching distribution found for PIL
    怎么搞?
    ysanne
        24
    ysanne  
       2018-01-10 11:47:59 +08:00
    @LanAiFaZuo 公司电脑写的,并不能挂到 github 上。
    ysanne
        25
    ysanne  
       2018-01-10 11:48:51 +08:00
    楼主你的代码耗时怎么样?我这边 adb 截图 1s,ocr1s,google 大概 2s。时间上还是有点紧。
    yuanfnadi
        26
    yuanfnadi  
       2018-01-10 11:58:11 +08:00
    @SkyeX 全部答对每个人 100.开 5 个模拟器。20 分钟 500.这个收益还不错了。
    cdwyd
        27
    cdwyd  
       2018-01-10 12:11:17 +08:00
    @ysanne
    我这边 ocr 要 5 秒。。。
    ljbljb007
        28
    ljbljb007  
       2018-01-10 12:21:18 +08:00
    好用了 谢谢楼主 不过方法 2 好用 方法 3 不好用 可以自己把方法 3 删掉吗?
    SorryChen
        29
    SorryChen  
       2018-01-10 12:25:21 +08:00 via iPhone
    @ljbljb007 pip install pillow
    huijian222
        30
    huijian222  
       2018-01-10 12:34:02 +08:00
    @yuanfnadi #26 可是。。真的能全对吗。。
    SkyeX
        31
    SkyeX  
    OP
       2018-01-10 12:37:25 +08:00 via Android
    @ljbljb007 代码前面加一个#注释掉就可以了
    SkyeX
        32
    SkyeX  
    OP
       2018-01-10 12:38:07 +08:00 via Android   ❤️ 1
    @cdwyd 可能和电脑配置有关吧,可以尝试用百度 api 看看
    jamev5
        33
    jamev5  
       2018-01-10 12:50:42 +08:00
    @SkyeX #31 命令行里正确识别了中文,可是在浏览器搜索的时候是乱码。
    ysanne
        34
    ysanne  
       2018-01-10 13:37:02 +08:00
    @cdwyd 我用的 tess4j,自己编译的 mac lib。你有对 adb 截屏的图片再截取一次吗?
    jason19659
        35
    jason19659  
       2018-01-10 13:41:21 +08:00
    @jamev5 #33 methods.py 里面改一下
    from urllib.request import quote

    然后
    'https://baidu.com/s?wd=' + quote(question)
    sangmong
        36
    sangmong  
       2018-01-10 13:59:18 +08:00
    马克思
    moxiaonai
        37
    moxiaonai  
       2018-01-10 15:18:43 +08:00
    有点慢
    cdwyd
        38
    cdwyd  
       2018-01-10 16:37:50 +08:00 via Android
    @ysanne 再截取一次是什么意思

    为了压缩时间,改成了语音播放建议的搜索答案,这样就不用在手机和和显示器之间来回切换了
    NicholasYX
        39
    NicholasYX  
       2018-01-10 16:40:05 +08:00
    请问如何找坐标?我想用它来搜头脑王者的题试一下
    qwjhb
        40
    qwjhb  
       2018-01-10 16:41:51 +08:00
    @NicholasYX 截图用画图都可以把
    pheyer
        41
    pheyer  
       2018-01-10 17:15:22 +08:00
    看到 ocr 我很想笑
    imyip
        42
    imyip  
       2018-01-10 18:53:29 +08:00
    再加个识别然后模拟点击? adb shell input tap x y
    qsnow6
        43
    qsnow6  
       2018-01-10 19:01:17 +08:00 via iPhone
    直接抓包就好了
    SkyeX
        44
    SkyeX  
    OP
       2018-01-10 20:45:17 +08:00
    @moxiaonai 更新了一下,应该不慢了
    MonoLogueChi
        45
    MonoLogueChi  
       2018-01-10 20:53:32 +08:00 via Android
    @marlboros 科技发明都是人类为了偷懒而创造的,没有偷懒的欲望,就没有发明创造的动力。所以说偷懒使人类进步
    18912017465
        46
    18912017465  
       2018-01-10 22:14:53 +08:00
    用截图+ocr 的方式,时间上肯定来不及,效率太低了。我的想法是后台抓包得到问题,然后进行百度分析,同事记录进数据库,随着数据库的充实,得到问题后可以现在数据库里比对,没有再百度
    yuanfnadi
        47
    yuanfnadi  
       2018-01-10 23:35:29 +08:00 via iPhone
    @18912017465 你只是就知道了,题目是和视频流一起来的。
    ocr 可以同时解决任何 app 任何平台,而且不会被破解。
    cdwyd
        48
    cdwyd  
       2018-01-11 00:11:10 +08:00
    @qsnow6 抓一个试试嘛
    XiaolinLeo
        49
    XiaolinLeo  
       2018-01-11 00:15:51 +08:00 via iPhone
    SorryChen
        50
    SorryChen  
       2018-01-11 00:16:37 +08:00 via iPhone
    分选项搜的那里很耗时,建议用多线程,我用多线程之后,提速效果显著
    benjunk
        51
    benjunk  
       2018-01-11 00:27:33 +08:00
    @SorryChen 大佬来一个 pr 吧,造福大家
    Linxing
        52
    Linxing  
       2018-01-11 01:22:58 +08:00
    所以楼主瓜分了那笔钱了吗
    alinwu05
        53
    alinwu05  
       2018-01-11 07:51:25 +08:00 via Android
    macOS 打开浏览器搜索,关键词乱码怎么解决?
    sundyli
        54
    sundyli  
       2018-01-11 10:26:00 +08:00
    @SkyeX 我也写了这种辅助, 但真不建议你开源出来, 节目方知晓了可能会追究你的责任哦...
    benjunk
        55
    benjunk  
       2018-01-11 10:41:15 +08:00
    @sundyli
    这是 MIT 开源的,又不是开发外挂来收费的,造福大家。层主想自己独占,自己就闭源呗
    siriussilen
        56
    siriussilen  
       2018-01-11 11:19:08 +08:00
    这个我也写了一个 python 脚本,我用的是阿里的 ocr 识别技术,不过识别技术不够高,准确率比较差
    ljbljb007
        57
    ljbljb007  
       2018-01-11 13:38:09 +08:00
    新版本有问题 昨天的版本好用
    ljbljb007
        58
    ljbljb007  
       2018-01-11 13:43:13 +08:00
    Traceback (most recent call last):
    File "GetQuestionTessAndroid.py", line 33, in <module>
    m2 = Thread(methods.run_algorithm(1, question, choices))
    File "E:\downloads\TopSup-master\common\methods.py", line 76, in run_algorithm
    open_webbrowser_count(question, choices)
    File "E:\downloads\TopSup-master\common\methods.py", line 30, in open_webbrowser_count
    output(choices, counts)
    File "E:\downloads\TopSup-master\common\methods.py", line 48, in output
    counts = list(map(int, counts))
    ValueError: invalid literal for int() with base 10: 'html><html><body>\r\n<script type="text/javascript">\r\n var u = document.URL;\r\n var ua = navigator.userAgent.toLowerCase();\r\n var u = "https://www.baidu.com/s?"+qs(\'wd|word\')+\'&tn=02

    提示这个 怎么整?
    yao978318542
        59
    yao978318542  
       2018-01-11 17:59:59 +08:00
    e ...我写了个 php 版本的 命中率 80 左右 有的还是得自己判断啊。。。。。
    Bresh
        60
    Bresh  
       2018-01-12 02:12:16 +08:00 via Android
    这东西感觉还是人多力量大 毕竟三个臭皮匠顶个诸葛亮
    去一些 yy 或者群里 一起玩
    q358566385
        61
    q358566385  
       2018-01-17 18:33:16 +08:00
    import urllib.parse
    ImportError: No module named parse

    这个怎么破? Pyhton2 和 3 都安装了
    SkyeX
        62
    SkyeX  
    OP
       2018-01-18 12:37:21 +08:00
    @q358566385 使用 python3 运行
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   1164 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 41ms · UTC 18:10 · PVG 02:10 · LAX 10:10 · JFK 13:10
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.