写了个冲顶大会类答题游戏辅助,有兴趣的朋友可以试试 - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
爱意满满的作品展示区。
SkyeX
V2EX    分享创造

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

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

    这两天冲顶大会之类的直播答题 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  
    PRO
       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~~
    Solix
        11
    Solix  
       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  
    PRO
       2018-01-0 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     Solana     1227 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 28ms UTC 17:24 PVG 01:24 LAX 10:24 JFK 13:24
    Do have faith in what you're doing.
    ubao msn snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86