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


Posted in Python onJanuary 17, 2018

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 相关文章推荐
跨平台python异步回调机制实现和使用方法
Nov 26 Python
Python psutil模块简单使用实例
Apr 28 Python
利用Python中SocketServer 实现客户端与服务器间非阻塞通信
Dec 15 Python
Python和C/C++交互的几种方法总结
May 11 Python
Python2.7编程中SQLite3基本操作方法示例
Aug 09 Python
Python采集代理ip并判断是否可用和定时更新的方法
May 07 Python
Python requests发送post请求的一些疑点
May 20 Python
利用python打开摄像头及颜色检测方法
Aug 03 Python
Python一句代码实现找出所有水仙花数的方法
Nov 13 Python
详解python项目实战:模拟登陆CSDN
Apr 04 Python
python 实现Requests发送带cookies的请求
Feb 08 Python
Keras多线程机制与flask多线程冲突的解决方案
May 28 Python
Python建立Map写Excel表实例解析
Jan 17 #Python
Python冲顶大会 快来答题!
Jan 17 #Python
urllib和BeautifulSoup爬取维基百科的词条简单实例
Jan 17 #Python
python thrift搭建服务端和客户端测试程序
Jan 17 #Python
Python元字符的用法实例解析
Jan 17 #Python
Python工程师面试必备25条知识点
Jan 17 #Python
python根据unicode判断语言类型实例代码
Jan 17 #Python
You might like
很好用的PHP数据库类
2009/05/27 PHP
使用PHP生成二维码的方法汇总
2015/07/22 PHP
使用js获取QueryString的方法小结
2010/02/28 Javascript
深入理解JavaScript系列(15) 函数(Functions)
2012/04/12 Javascript
IE中jquery.form中ajax提交没反应解决方法分享
2012/09/11 Javascript
jQuery.clean使用方法及思路分析
2013/01/07 Javascript
一个简单的JS鼠标悬停特效具体方法
2013/06/17 Javascript
javascript关于继承的用法汇总
2014/12/20 Javascript
jQuery实现当前页面标签高亮显示的方法
2015/03/10 Javascript
JavaScript中用toString()方法返回时间为字符串
2015/06/12 Javascript
纯javascript实现的小游戏《Flappy Pig》实例
2015/07/27 Javascript
SpringMVC框架下JQuery传递并解析Json格式的数据是如何实现的
2015/12/10 Javascript
AngularJS中的$watch(),$digest()和$apply()区分
2016/04/04 Javascript
纯JS实现可拖拽表单的简单实例
2016/09/02 Javascript
js事件源window.event.srcElement兼容性写法(详解)
2016/11/25 Javascript
JavaScript学习笔记--常用的互动方法
2016/12/07 Javascript
js仿淘宝评价评分功能
2017/02/28 Javascript
JS去掉字符串前后空格或去掉所有空格的用法
2017/03/25 Javascript
vue-hook-form使用详解
2017/04/07 Javascript
vue-cli 自定义指令directive 添加验证滑块示例
2017/10/19 Javascript
JS滚轮控制图片缩放大小和拖动的实例代码
2018/11/20 Javascript
微信小程序 搜索框组件代码实例
2019/09/06 Javascript
js实现图片跟随鼠标移动效果
2019/10/16 Javascript
vue倒计时刷新页面不会从头开始的解决方法
2020/03/03 Javascript
详解Python中的Cookie模块使用
2015/07/06 Python
python使用邻接矩阵构造图代码示例
2017/11/10 Python
浅谈python 里面的单下划线与双下划线的区别
2017/12/01 Python
python实现关键词提取的示例讲解
2018/04/28 Python
Python3标准库总结
2019/02/19 Python
pyqt5 实现在别的窗口弹出进度条
2019/06/18 Python
python导入库的具体方法
2020/06/18 Python
纯CSS3实现的8种Loading动画效果
2014/07/05 HTML / CSS
使用iframe+postMessage实现页面跨域通信的示例代码
2020/01/14 HTML / CSS
护理助产毕业生的求职信
2014/03/02 职场文书
我爱家乡演讲稿
2014/09/12 职场文书
Python并发编程实例教程之线程的玩法
2021/06/20 Python