聊聊C#与冲顶大会
一、由跳一跳开始
2018年初,跳一跳小程序着实火了一把。一时间,各种攻略,甚至辅助工具也应运而生。作为.net阵营的一员,园友的这篇http://www.cnblogs.com/bqh10086/p/8253973.html跳一跳辅助程序文章,可以说是让人眼前一亮。实现思路大体如下:
1.下载adb工具;
2.打开手机usb调试模式;
3.通过命令行调用adb工具,向手机发送命令
3.1发送截图命令
3.2将截图从手机复制到磁盘
3.3将手机截图绘制到winform窗体的PixtureBox
3.4鼠标左键单击小人底部,右键单击目标点
3.5将小人底部的点,目标点之间的距离转换为屏幕按压时间
3.6发送屏幕按压命令
4.手动完成一次跳跃
二、偶遇冲顶大会
有意无意得总是遇见冲顶大会几个字,通过搜索后,发现是一款在线限时答题类app。每道题三个选项,10s内作答,共12道题目,去不答对以后与其他全答对的人均分奖金。奖金从50000-300000不等。
https://livc.io/blog/204?hmsr=toutiao.io&utm_medium=toutiao.io&utm_source=toutiao.io 这篇文章提供了一个答题辅助思路:
1.截取手机屏幕图片
2.识别截图中的题目
3.调用浏览器,搜索题目
不过,此思路是基于ios手机操作系统,采用 iOS + Mac+WDA+免费ocr识别来实现的。
三、跳一跳与冲顶大会
本着生命在于折腾的原则,想着在android手机操作系统+windows操作系统上也能实现一个答题辅助工具。借(剽)鉴(窃)上面的实现思路,说下,具体的实现过程。
1.发送获取屏幕截图命令 ”adb shell screencap -p /sdcard/xxx.png”
2.发送将手机截图复制到本地磁盘的命令 ”pull /sdcard/xxx.png"
3.获取题目所在区域
3.1 自己的手机屏幕分辨率为1080*1920,手机截图长度为16.5cm,题目开始出现的位置距离图片顶部为3cm,题目宽度大概为2cm(题目为2行文字),这一步,跳一跳辅助工具已经实现了。
3.2 调用算法,从手机截图中截取题目所在区域大小的图片 Bitmap map = GetPart(file, 0, 0, 1080, (int)(1920 * (5.5 - 3) / 16.5), 0, (int)(1920 * 3 / 16.5));
/// <summary>
/// 获取图片指定部分
/// </summary>
/// <param name="pPath">图片路径</param>
/// <param name="pPartStartPointX">目标图片开始绘制处的坐标X值(通常为0)</param>
/// <param name="pPartStartPointY">目标图片开始绘制处的坐标Y值(通常为0)</param>
/// <param name="pPartWidth">目标图片的宽度</param>
/// <param name="pPartHeight">目标图片的高度</param>
/// <param name="pOrigStartPointX">原始图片开始截取处的坐标X值</param>
/// <param name="pOrigStartPointY">原始图片开始截取处的坐标Y值</param>
private Bitmap GetPart(string pPath, int pPartStartPointX, int pPartStartPointY, int pPartWidth, int pPartHeight, int pOrigStartPointX, int pOrigStartPointY)
{
Image originalImg = Image.FromFile(pPath); Bitmap partImg = new Bitmap(pPartWidth, pPartHeight);
Graphics graphics = Graphics.FromImage(partImg);
Rectangle destRect = new Rectangle(new Point(pPartStartPointX, pPartStartPointY),
new Size(pPartWidth, pPartHeight));//目标位置
Rectangle origRect = new Rectangle(new Point(pOrigStartPointX, pOrigStartPointY),
new Size(pPartWidth, pPartHeight));//原图位置(默认从原图中截取的图片大小等于目标图片的大小) graphics.DrawImage(originalImg, destRect, origRect, GraphicsUnit.Pixel); return partImg;
}
GetPartPicture
3.3 使用开源ocr识别库Tesseract,识别上一步截图map中的题目
public static string GetOcrText(string startPath,string fileName)
{
var result = string.Empty; if (string.IsNullOrEmpty(fileName))
{
return string.Empty;
} try
{ using (var engine = new TesseractEngine(startPath + @"/tessdata", "chi_sim", EngineMode.Default))
{
using (var img = Pix.LoadFromFile(fileName))
{
using (var page = engine.Process(img))
{
result = page.GetText();
}
}
}
}
catch (Exception ex)
{
} return result;
}
GetOcrText
3.4 去除题目中的换行,处理特殊字符。
3.5调用浏览器,搜索题目
private void Search(string searchContent)
{ //s就是你的默认浏览器,不过后面带了参数,把它截去,不过需要注意的是:不同的浏览器后面的参数不一样!
//"D:\Program Files (x86)\Google\Chrome\Application\chrome.exe" -- "%1"
Process.Start(browserPath, string.Format("http://www.baidu.com/s?wd={0}", searchContent));
}
Search
四、问题
1.问题1:题目所在区域的获取,题目有时为一行,有时为两行,图片大小不太固定
2.问题2:从获取发送截图命令,将截图复制到本地磁盘,截取题目所在区域大小图片,识别图片中题目内容,调用浏览器搜索,呈现搜索结果共耗时6s左右,答题时间仅有10s,有点不太够用
五、总结
虽然,到头来结果不是太理想,但这个举一反三的探索过程却是有收获的。从一开始ocr识别不支持中文,到Tesseract库项目编译失败,再到搜索Tesseract支持的中文识别依赖文件chi_sim.traineddata,是解决问题能力的锻炼,也是涨姿势的过程。总的来说还不错。欢迎交流,欢迎点赞。
项目地址:https://github.com/LightSmileMu/JumpToTop
聊聊C#与冲顶大会的更多相关文章
- 冲顶大会APP技术选型及架构设计
我在1月4日看到虎嗅推送"王思聪撒币"的消息,然后开始推敲背后技术.其中涉及直播流.实时弹幕.OAuth2.0开放授权.SMS api.Push网关.支付接口等业务,其技术实现并不 ...
- C#实现冲顶大会辅助工具 (截图+图像识别+搜索)
前两天在博客园看到 .NET开发一个微信跳一跳辅助程序, 原来可以通过C#连接手机操作.正好朋友圈有人分享"冲顶大会".冲顶大会是一个在线答题APP.每次12道题,每道题有10秒钟 ...
- C#实现冲顶大会辅助工具(截图+图像识别+搜索)
前两天在博客园看到 .NET开发一个微信跳一跳辅助程序, 原来可以通过C#连接手机操作.正好朋友圈有人分享“冲顶大会”.冲顶大会是一个在线答题APP.每次12道题,每道题有10秒钟的答题时间,全对者瓜 ...
- 【程序员的吃鸡大法】利用OCR文字识别+百度算法搜索,玩转冲顶大会、百万英雄、芝士超人等答题赢奖金游戏
[先上一张效果图]: 一.原理: 其实原理很简单: 1.手机投屏到电脑: 2.截取投屏画面的题目部分,进行识别,得到题目和三个答案: 3.将答案按照一定的算法,进行搜索,得出推荐答案: 4.添加了一些 ...
- 利用OCR文字识别+百度算法搜索,玩转冲顶大会、百万英雄、芝士超人等答题赢奖金游戏
[先上一张效果图]: 一.原理: 其实原理很简单: 1.手机投屏到电脑: 2.截取投屏画面的题目部分,进行识别,得到题目和三个答案: 3.将答案按照一定的算法,进行搜索,得出推荐答案: 4.添加了一些 ...
- 文字太多?控件太小?试试 TextView 的新特性 Autosizeing 吧!
Hi,大家好,我是承香墨影! Android 8.0 已经发布了有一阵子了,如果你有在关注它,你应该会知道它新增了一个对于 TextView 字体大小变动的新特性:Autosizing. 本身这个新特 ...
- Python爱好者社区历史文章列表(每周append更新一次)
2月22日更新: 0.Python从零开始系列连载: Python从零开始系列连载(1)——安装环境 Python从零开始系列连载(2)——jupyter的常用操作 Python从零开始系列连载( ...
- Ocr答题辅助神器 OcrAnswerer4.x,通过百度OCR识别手机文字,支持屏幕窗口截图和ADB安卓截图,支持四十个直播App,可保存题库
http://www.cnblogs.com/Charltsing/p/OcrAnswerer.html 联系qq:564955427 最新版为v4.1版,开放一定概率的八窗口体验功能,请截图体验(多 ...
- python答题辅助
最近直播答题app很热门,由于之前看过跳一跳的python脚本(非常棒),于是也想写一个答题的脚本. https://github.com/huanmsf/cai 思路: 1.截图 2.文字识别,提取 ...
随机推荐
- MFC学习之CWinApp类
CWinApp是一个基类,你通过它来继承Windows应用程序对象.应用程序对象为你提供了初始化应用程序(以及它的每一个实例 和运行应用程序所需的成员函数.它实现主事件循环并把事件分发给MFC中其他类 ...
- java 正则学习
前言 在网上找了许多关于正则解析 URL,结果不是很满意,所以自己学习正则: java url 那么解析 url 的代码如下: import java.util.regex.Matcher; impo ...
- Javascript中的Microtask和Macrotask——从一道很少有人能答对的题目说起
首先我们来看一道题目,如下javascript代码,执行后会在控制台打印出什么内容? async function async1() { console.log('async1 start'); aw ...
- 图片验证码(Struts2中使用)
写在前面: 最近在项目中做了一个登录页面,用到了图片验证码的功能,所以记录一下.方便之后再有用到,直接拿来用即可.其实图片验证码的生成都是有固定步骤的,网上也有很多的例子,有的时候,如果不想深究,都是 ...
- 小程序代码包压缩 策略&方案
微信小程序自推出以来,逐渐发展,目前正受到越来越多的青睐.其中很重要的一点得益于小程序的轻量级特性,每个小程序最多不超过2MB,招之即来挥之即去,相比于几十上百兆的APP,用户进入小程序,或者说,小程 ...
- MySQL数据库常见操作
数据库连接与关闭:mysql -h 服务器主机地址 -u 用户名 -p 用户密码 创建新用户并授权:grant 权限 on 数据库.数据表 to 用户名@登录主机 identified by &quo ...
- iOS 模拟器安装应用
iOS模拟器是苹果Xcode IDE的一部分,主要用来为Mac,iPhone和iPad创建应用程序,为了给iOS模拟器打包应用程序,利用–package 在命令行上执行ADT并使用–target来指定 ...
- 小白的Python之路 day4 生成器
一.列表生成式 看下面例子: 列表生成式的作用:主要是让代码更简洁(还有装X的效果) 二.生成器 通过列表生成式,我们可以直接创建一个列表.但是,受到内存限制,列表容量肯定是有限的.而且,创建一个包 ...
- 第四节:dingo/API 最新版 V2.0 之 Responses (连载)
因为某些某些原因,不能按时更新,唉.我会尽力,加快速度.(这句话不是翻译的哈) 原文地址--> https://github.com/dingo/api/wiki/Responses A fun ...
- web调用客户端程序
背景 最近做一个集成需求,我们是B/S架构的,对方是C/S架构的,对方直接扔过来一个EXE连OCX都没有,让我们调用,也就是说,我们需要通过js程序去调用他们的客户端程序并传入多个参数,当时内心是崩溃 ...