酷! 程序员用Python带你玩转冲顶大会

作者:lijiao 时间:2022-02-20 11:56:08 

2018年1月3日,王思聪被迫动用自己的微博,为一个诞生不到10天的App打了广告,“每天我都发奖金,今晚9点就发10万”。对他而言,这天的微博并非生日宴会,而是战场。王思聪的一则微博开启了“全民竞答”类APP的爆红之路。

酷! 程序员用Python带你玩转冲顶大会

一时间,直播巨头们都跟上“王校长”的节奏,“冲顶大会”之外,映客旗下的“芝士超人”、今日头条旗下的“百万英雄”和花椒直播旗下的“百万作战”纷纷亮相,每天狂撒百万现金。

酷! 程序员用Python带你玩转冲顶大会

“冲顶大会”、“芝士超人”、“百万英雄”等知识竞答游戏火了,奖金数额也从最初的人民币5万、10万涨到了100万、101万。

为了能够全部答对12道题,平分数额如此庞大的奖金池,参赛者开始想方设法提高自己答题的正确率。

正如节目主持人介绍的一样,许多答题者开始寻找身边的朋友共同答题,以求覆盖到更多类型的知识点,提高通关的几率。

各种各样的微信、QQ答题群诞生,每个人都在群聊里分享自己认为正确的答案。

酷! 程序员用Python带你玩转冲顶大会

让你猜不到的是,答题游戏居然也有 * !

为了能够全部答对12道题,平分数额如此庞大的奖金池,参赛者开始想方设法提高自己答题的正确率。

已经有程序员设计了“辅助程序”,用于快速检索答案。

酷! 程序员用Python带你玩转冲顶大会

这个用Python程序可以修剪并识别图片中的文字内容(问题和选项),然后通过百度进行搜索关键字出现的次数,最后将统计的信息展示出来。这样一来,答题者就可以根据统计数据来选择相应的答案,极大提高了答题的正确率。

那么程序员到底应该如何玩呢?

首先用 WDA 来获取屏幕截图。WDA 本是 Facebook 开发的一套 iOS 测试框架,前几天看见大家都用来做微信“跳一跳”的 * ,便特意去了解了一下,发现也能用在冲顶大会上。

之后 crop 出题目所在的位置(可能需要适配手机屏幕),然后调用开放的 OCR 接口读取出文字文本,最后调用搜索引擎,就可以达到之前 gif 图的效果。这套环境是 iOS + Mac,如果是安卓应该有更方便的方法。

其实最初的想法是希望搜索+选择答案全部自动化完成的,思路是 OCR 题目和候选答案,组成三个组合扔到百度或谷歌里搜索,然后哪个组合的结果出现次数最多就选择哪个。试了几个问题后发现并不是这样,比如上面图片的“骆驼的驼峰是存储什么的?”,可能多数人都会认为是水,因此出现的次数最多,其实是错误答案。

最后还有两个痛点:

免费 OCR 接口调用次数有限,所以不能一直去截屏识别,只能等题目出现时运行程序。
官方也很套路,有的问题是没法搜索的。比如这种:

酷! 程序员用Python带你玩转冲顶大会

最后附上代码:


# python3
import wda
import io
import urllib.parse
import webbrowser
import requests
import time
import base64
from PIL import Image

c = wda.Client()
# 百度OCR API
api_key = ''
api_secret = ''
token = ''

while True:
 time.sleep(0.5)
 c.screenshot('1.png')
 im = Image.open("./1.png")
 region = im.crop((75, 315, 1167, 789)) # iPhone 7P
 imgByteArr = io.BytesIO()
 region.save(imgByteArr, format='PNG')
 image_data = imgByteArr.getvalue()
 base64_data = base64.b64encode(image_data)
 r = requests.post('https://aip.baidubce.com/rest/2.0/ocr/v1/general_basic',
          params={'access_token': token}, data={'image': base64_data})
 result = ''
 for i in r.json()['words_result']:
   result += i['words']
 result = urllib.parse.quote(result)
 webbrowser.open('https://baidu.com/s?wd='+result)
 break

(代码来源:https://livc.io/blog/204)

标签:python,冲顶大会,答题
0
投稿

猜你喜欢

  • Python使用pandas将表格数据进行处理

    2023-10-08 06:23:55
  • python的格式化输出(format,%)实例详解

    2022-03-20 04:17:57
  • python爬虫实战之最简单的网页爬虫教程

    2022-02-06 17:03:36
  • Python制作刷网页流量工具

    2021-10-21 00:23:28
  • python中迭代器(iterator)用法实例分析

    2023-12-16 05:32:51
  • 简单实现Standby SQL Server 数据库的方法

    2009-10-23 09:26:00
  • vue-element-admin项目导入和导出的实现

    2024-05-21 10:29:53
  • vue 自定义指令directives及其常用钩子函数说明

    2024-05-09 10:43:47
  • 解密ThinkPHP3.1.2版本之模板继承

    2023-09-06 16:02:15
  • 如何优化网站图片以快速显示

    2008-04-05 10:09:00
  • ASP 支持中文的len(),left(),right()的函数代码

    2011-03-03 10:59:00
  • JAVA简单链接Oracle数据库 注册和登陆功能的实现代码

    2024-01-23 13:15:12
  • Python实现FTP弱口令扫描器的方法示例

    2023-12-16 04:46:45
  • Python全面解析json数据并保存为csv文件

    2021-02-14 03:26:26
  • python不同版本的_new_不同点总结

    2023-09-21 15:36:45
  • Python自动化办公之手机号提取

    2022-12-26 11:31:46
  • python元组简单介绍

    2023-07-31 18:06:12
  • MySQL主从复制与读写分离原理及用法详解

    2024-01-14 21:16:25
  • 在ASP.NET 2.0中操作数据之二十五:大数据量时提高分页的效率

    2023-07-11 09:05:31
  • 轻松掌握MySQL数据库锁机制的相关原理

    2008-12-17 15:23:00
  • asp之家 网络编程 m.aspxhome.com