酷! 程序员用Python带你玩转冲顶大会
作者:lijiao 发布时间:2022-02-20 11:56:08
2018年1月3日,王思聪被迫动用自己的微博,为一个诞生不到10天的App打了广告,“每天我都发奖金,今晚9点就发10万”。对他而言,这天的微博并非生日宴会,而是战场。王思聪的一则微博开启了“全民竞答”类APP的爆红之路。
一时间,直播巨头们都跟上“王校长”的节奏,“冲顶大会”之外,映客旗下的“芝士超人”、今日头条旗下的“百万英雄”和花椒直播旗下的“百万作战”纷纷亮相,每天狂撒百万现金。
“冲顶大会”、“芝士超人”、“百万英雄”等知识竞答游戏火了,奖金数额也从最初的人民币5万、10万涨到了100万、101万。
为了能够全部答对12道题,平分数额如此庞大的奖金池,参赛者开始想方设法提高自己答题的正确率。
正如节目主持人介绍的一样,许多答题者开始寻找身边的朋友共同答题,以求覆盖到更多类型的知识点,提高通关的几率。
各种各样的微信、QQ答题群诞生,每个人都在群聊里分享自己认为正确的答案。
让你猜不到的是,答题游戏居然也有 * !
为了能够全部答对12道题,平分数额如此庞大的奖金池,参赛者开始想方设法提高自己答题的正确率。
已经有程序员设计了“辅助程序”,用于快速检索答案。
这个用Python程序可以修剪并识别图片中的文字内容(问题和选项),然后通过百度进行搜索关键字出现的次数,最后将统计的信息展示出来。这样一来,答题者就可以根据统计数据来选择相应的答案,极大提高了答题的正确率。
那么程序员到底应该如何玩呢?
首先用 WDA 来获取屏幕截图。WDA 本是 Facebook 开发的一套 iOS 测试框架,前几天看见大家都用来做微信“跳一跳”的 * ,便特意去了解了一下,发现也能用在冲顶大会上。
之后 crop 出题目所在的位置(可能需要适配手机屏幕),然后调用开放的 OCR 接口读取出文字文本,最后调用搜索引擎,就可以达到之前 gif 图的效果。这套环境是 iOS + Mac,如果是安卓应该有更方便的方法。
其实最初的想法是希望搜索+选择答案全部自动化完成的,思路是 OCR 题目和候选答案,组成三个组合扔到百度或谷歌里搜索,然后哪个组合的结果出现次数最多就选择哪个。试了几个问题后发现并不是这样,比如上面图片的“骆驼的驼峰是存储什么的?”,可能多数人都会认为是水,因此出现的次数最多,其实是错误答案。
最后还有两个痛点:
免费 OCR 接口调用次数有限,所以不能一直去截屏识别,只能等题目出现时运行程序。
官方也很套路,有的问题是没法搜索的。比如这种:
最后附上代码:
# 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)


猜你喜欢
- 感知哈希算法count < =5 匹配最相似count > 10 两张不同的图片var_dump(ImageHash::run(
- 网站内容的入口很大一部分都是依赖于导航系统,而网站的入口很大一部分依赖于搜索系统,这也在一定意义上证明了导航与搜索之间的重叠性。搜索系统可以
- 本文实例为大家分享了python实现移位加密和解密的具体代码,供大家参考,具体内容如下代码很简单,就不多做解释啦。主要思路是将字符串转为As
- 0、问题在用Tkinter进行编程时,需要在一个Frame下显示多个图片,但是不管怎么设置都是只显示最后一张,就像这样:代码for i in
- 本文旨在讲述 RPC 框架设计中的几个核心问题及其解决方法,并基于 Golang 反射技术,构建了一个简易的 RPC 框架。项目地址:Tin
- 案例故事:百度网盘非会员大量上传文件,会弹出:“上传文件数量超出500个现在,开通超级会员后可继续上传”,其实是限制拖入500张相片,并非限
- 我就废话不多说了,大家还是直接看代码吧!#先定义两个矩阵X=np.array([[1,2104,5,1,45],[1,1416,3,2,40
- 自定义数据库字段扩展默认的models.CharField和models.TextField使之成为支持多语言的字段。可以轻松实现复用,无需
- 目录快速开始通过 pip 安装运行注入代码运行前几天在一个开源项目里遇到好多用户反馈,不会安装依赖,或者执行 pip install -r
- Request Payload 和 Form Data 请求头上的参数差别在于:Content-TypeForm DataPost表单请求代
- 1)首先注册一个邮箱,这里以163邮箱为例2)注册之后登录,进行如下修改找到设置,设置一个授权码,授权码的目的仅仅是让你有权限发邮件,但是不
- 方法一:定义一个函数,参数为所要生成随机字符串的长度。通过random.randint(a, b)方法得到随机数字,具体函数如下:def g
- 本文实例讲述了python创建关联数组(字典)的方法。分享给大家供大家参考。具体分析如下:关联数组在python中叫字典,非常有用,下面是定
- 一、表示修饰符。可以在模块或者类的定义层内对函数进行修饰。出现在函数定义的前一行,不允许和函数定义在同一行。一个修饰符就是一个函数,它将被修
- 爬楼梯(Climbing-Stairs)题干:假设你正在爬楼梯。需要 n 阶你才能到达楼顶。每次你可以爬 1 或 2 个台阶。你有多少种不同
- #! -*- coding:utf-8 -*- import string s = 'Ye
- 简单版本学生信息管理系统,用python基础语法实现,基于python 3.6容错率很高的代码,做了很多异常处理功能,出错也不会丢失信息启动
- 问题最近,在用SSH框架完成一个实践项目时,碰到了一个莫名其妙的Bug困扰了我好久,最后终于解决,记录如下。问题:同学在测试系统的时候突然发
- 分享人:月漓作为交互设计师,你是否在一个项目中花费大量的时间来沟通、修改、明确需求?其实这些前期工作(设计原型前)是我们和PD、运营、开发之
- 如下:将html文件下载后,使用BeauifulSoup读取文件,并且使用html.parsertmp_soup.select里面的参数为: