热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

吃鸡python开发_python实现《吃鸡大法》加文字识别玩转百万英雄!

《百万英雄》比较火。最近我也在玩,把高中的知识都还给教员了。10秒的答题时辰让人根柢来不及去百度搜索。于是我建造了这个剧本,对问题问题停止文字识别&#x

《百万英雄》比较火。最近我也在玩,把高中的知识都还给教员了。10秒的答题时辰让人根柢来不及去百度搜索。于是我建造了这个剧本,对问题问题停止文字识别,主动翻开网页停止搜索。首先来看一下测试成效:

实现事理:

实现事理很是简单。安卓手机毗连电脑,经由过程adb调试实现敌手机答题页面的截屏,然后把持百度云AI停止文字识别,在前往成效中找到问题的文字,经由过程python库翻开阅读器停止阅读。

预备工作:

安卓手机毗连电脑,开启手机的调试形式。

电脑上必要有adb调试工具和python3安装

经由过程pip3 install baidu-aip安装百度的文字识别库

在百度ai上注册,并申请一个文字识别的应用,获得下面第二步必要的三个密码。

代码实现:

第一步:引入必要的库

上面有两个函数,我们一会再说。

第二步:实现上岸百度aip。这局部按照百度api文档写代码即可。

这局部代码百度文档上有,目的是连上百度ai。

第三步:截取屏幕

这局部是adb调试的语法。我们经由过程os.system()挪用

第四步:裁剪图片并发送图片到百度ai

这里用到了上面一起头的两个函数。在第三部获得问题图片后,我们对图片停止裁剪,裁剪出只需问题和选项的局部,如答应以大幅进步ai的反响速度。然后经由过程百度给出的函数get_file_content和client.basicGeneral获得数据。

第五步:获得问题上网搜索

这里面我为了应对,“下面的哪些不是。。。”如许的问题,给了两种搜索编制,一种是只在百度上搜索问题,另一种是连着谜底一起去百度搜索。小编还是要推荐自己建立的裙Python学习:五七七九零一二九四 这里有推荐的学习路线,基础视频学习资料和电子教程文档和Python安装工具及Python技术学习交流和分享.末了经由过程webbrowser翻开阅读器。

一、原理:

其实原理很简单:

1.手机投屏到电脑;

2.截取投屏画面的题目部分,进行识别,得到题目和三个答案;

3.将答案按照一定的算法,进行搜索,得出推荐答案;

4.添加了一些其他辅助功能,比如:浏览器搜索结果展示、关键字高亮、浏览器可点击等;

二、二营长,把我的意大利...............代码,呈上来,给友军看看

1.手机投屏:

方式很多,这里只列举几个比较常用、且自己感觉简单易用的:

A.IOS:局域网内,可以利用iTools里的苹果录屏大师(airplay),进行投屏;

B.安卓:利用连接线,可以用Totall Control,将安卓手机的画面投到电脑上;而且电脑上还能直接操作手机;

C.模拟器:一般都是安卓模拟器;可以自行下载并安装;

2.截取画面中的题目和答案

A.先设置要截图的区域。

我创建了一个窗体,专门用于设置截图区域,给它取名叫:frmCutter。

原理:在主窗体打开frmCutter时,就将frmCutter全拼显示。同时截取一张整个屏幕的图片,把它设置成frmCutter窗体的背景图片。

这样就能在frmCutter上自由地设置了。

主窗体打开frmCutter窗体时:

1 // 新建一个和屏幕大小相同的图片 2 Bitmap catchBmp = new Bitmap(Screen.AllScreens[0].Bounds.Width, Screen.AllScreens[0].Bounds.Height); 3 4 // 创建一个画板,让我们可以在画板上画图 5 // 这个画板也就是和屏幕大小一样大的图片 6 // 我们可以通过Graphics这个类在这个空白图片上画图 7 Graphics g = Graphics.FromImage(catchBmp); 8 9 // 把屏幕图片拷贝到我们创建的空白图片 catchBmp中10 g.CopyFromScreen(new Point(0, 0), new Point(0, 0), new Size(Screen.AllScreens[0].Bounds.Width, Screen.AllScreens[0].Bounds.Height));11 12 // 创建截图窗体13 frmCutter _frmCutter = new frmCutter();14 _frmCutter.Tag = this;15 16 // 指示窗体的背景图片为屏幕图片17 _frmCutter.BackgroundImage = catchBmp;18 19 _frmCutter.Width = Screen.AllScreens[0].Bounds.Width;20 _frmCutter.Height = Screen.AllScreens[0].Bounds.Height;21 DialogResult dr = _frmCutter.ShowDialog();

然后再frmCutter窗体中,写入几个事件:

1 //点击鼠标右键时,取消设置 2 private void frmCutter_MouseClick(object sender, MouseEventArgs e) 3 { 4 if (e.Button == MouseButtons.Right) 5 { 6 this.DialogResult = DialogResult.OK; 7 this.Close(); 8 } 9 } 10 11 //点击鼠标左键时,开始画区域图 12 private void frmCutter_MouseDown(object sender, MouseEventArgs e) 13 { 14 // 鼠标左键按下是开始画图,也就是截图 15 if (e.Button == MouseButtons.Left) 16 { 17 // 如果捕捉没有开始 18 if (!_catchStart && !_catchFinished) 19 { 20 _catchStart = true; 21 22 // 保存此时鼠标按下坐标 23 Point newPoint = new Point(e.X, e.Y); 24 25 _downPoint = newPoint; 26 27 Tools.StartPoint = newPoint; 28 } 29 } 30 } 31 32 //鼠标移动时,根据移动的鼠标和点击时的第一个点,绘制矩形 33 private void frmCutter_MouseMove(object sender, MouseEventArgs e) 34 { 35 #region 确保截图开始 36 if (_catchStart && !_catchFinished) 37 { 38 // 新建一个图片对象,让它与屏幕图片相同 39 Bitmap copyBmp = (Bitmap)Tools.ScreenShots.Clone(); 40 41 // 获取鼠标按下的坐标 42 Point newPoint = new Point(_downPoint.X, _downPoint.Y); 43 44 // 新建画板和画笔 45 Graphics g = Graphics.FromImage(copyBmp); 46 Pen p = new Pen(Color.Red, 1); 47 48 // 获取矩形的长宽 49 int width = Math.Abs(e.X - _downPoint.X); 50 int height = Math.Abs(e.Y - _downPoint.Y); 51 if (e.X

B.设置好截图区域后,每次题目出现时,变对该区域截图:

1 //截取设置的区域屏幕图片 2 Bitmap _screenShots = new Bitmap(Screen.AllScreens[0].Bounds.Width, Screen.AllScreens[0].Bounds.Height); 3 // 创建一个画板,让我们可以在画板上画图 4 // 这个画板也就是和屏幕大小一样大的图片 5 // 我们可以通过Graphics这个类在这个空白图片上画图 6 Graphics g_screenShots = Graphics.FromImage(_screenShots); 7 // 把屏幕图片拷贝到我们创建的空白图片 CatchBmp中 8 g_screenShots.CopyFromScreen(new Point(0, 0), new Point(0, 0), new Size(Screen.AllScreens[0].Bounds.Width, Screen.AllScreens[0].Bounds.Height)); 9 10 //剪切的图片11 _catchBmp = new Bitmap(Tools.CatchRectangleSize.Width, Tools.CatchRectangleSize.Height);12 Graphics g = Graphics.FromImage(_catchBmp);13 g.DrawImage(_screenShots, new Rectangle(0, 0, Tools.CatchRectangleSize.Width, Tools.CatchRectangleSize.Height), Tools.CatchRectangle, GraphicsUnit.Pixel);14 g.Dispose();15 g_screenShots.Dispose();16 17 //显示图像18 this.imgCut.BackgroundImage = (Image)_catchBmp;

C.将截到的问题和答案图片,用OCR识别

比如,我现在设置并截取到了这张图片:

识别图片中的文字,OCR软件和API也不少。以前我用的谷歌tesseract4.0,安装在本机的,没做词库,识别率一般。

后来发现百度OCR每天免费调用500次,果断转场!事实证明,正确率还是高很多。

D.得到识别结果,将识别结果处理后,进行百度搜索:

创建了一个试题实体,后面用起来就方便了:

1 /// 2 /// 试题类 3 /// 4 public class QuestionModel 5 { 6 /// 7 /// 问题 8 /// 9 public string Question { get; set; }10 11 /// 12 /// 答案113 /// 14 public string Answer1 { get; set; }15 16 /// 17 /// 答案218 /// 19 public string Answer2 { get; set; }20 21 /// 22 /// 答案323 /// 24 public string Answer3 { get; set; }25 }

E.百度搜索,并显示参考答案:

a).算法搜索:

1.用题目去百度搜索。在搜索的结果中,查询答案出现的次数。

2.用题目+答案去搜索。得到每个组合的百度结果个数。

然后将上述两种方法,根据权重权衡,用户可以自行决定偏向于哪种结果。

b).辅助搜索:

右边还放了一个浏览器,可以在得到识别结果的第一时间,呈现出根据题目搜索百度的结果;并且在里面高亮显示3个答案关键字。

三、坐等吃鸡!

自动截图、自动识别、自动搜索、自动给出参考答案、自动展现出搜索页面并高亮显示关键字……

多了一系列的辅助功能,想不吃鸡都难啊~



推荐阅读
  • 本文介绍了如何使用PHP向系统日历中添加事件的方法,通过使用PHP技术可以实现自动添加事件的功能,从而实现全局通知系统和迅速记录工具的自动化。同时还提到了系统exchange自带的日历具有同步感的特点,以及使用web技术实现自动添加事件的优势。 ... [详细]
  • 在Android开发中,使用Picasso库可以实现对网络图片的等比例缩放。本文介绍了使用Picasso库进行图片缩放的方法,并提供了具体的代码实现。通过获取图片的宽高,计算目标宽度和高度,并创建新图实现等比例缩放。 ... [详细]
  • CSS3选择器的使用方法详解,提高Web开发效率和精准度
    本文详细介绍了CSS3新增的选择器方法,包括属性选择器的使用。通过CSS3选择器,可以提高Web开发的效率和精准度,使得查找元素更加方便和快捷。同时,本文还对属性选择器的各种用法进行了详细解释,并给出了相应的代码示例。通过学习本文,读者可以更好地掌握CSS3选择器的使用方法,提升自己的Web开发能力。 ... [详细]
  • 本文介绍了闭包的定义和运转机制,重点解释了闭包如何能够接触外部函数的作用域中的变量。通过词法作用域的查找规则,闭包可以访问外部函数的作用域。同时还提到了闭包的作用和影响。 ... [详细]
  • 生成式对抗网络模型综述摘要生成式对抗网络模型(GAN)是基于深度学习的一种强大的生成模型,可以应用于计算机视觉、自然语言处理、半监督学习等重要领域。生成式对抗网络 ... [详细]
  • PHP图片截取方法及应用实例
    本文介绍了使用PHP动态切割JPEG图片的方法,并提供了应用实例,包括截取视频图、提取文章内容中的图片地址、裁切图片等问题。详细介绍了相关的PHP函数和参数的使用,以及图片切割的具体步骤。同时,还提供了一些注意事项和优化建议。通过本文的学习,读者可以掌握PHP图片截取的技巧,实现自己的需求。 ... [详细]
  • 本文介绍了设计师伊振华受邀参与沈阳市智慧城市运行管理中心项目的整体设计,并以数字赋能和创新驱动高质量发展的理念,建设了集成、智慧、高效的一体化城市综合管理平台,促进了城市的数字化转型。该中心被称为当代城市的智能心脏,为沈阳市的智慧城市建设做出了重要贡献。 ... [详细]
  • 开发笔记:加密&json&StringIO模块&BytesIO模块
    篇首语:本文由编程笔记#小编为大家整理,主要介绍了加密&json&StringIO模块&BytesIO模块相关的知识,希望对你有一定的参考价值。一、加密加密 ... [详细]
  • 本文介绍了C#中生成随机数的三种方法,并分析了其中存在的问题。首先介绍了使用Random类生成随机数的默认方法,但在高并发情况下可能会出现重复的情况。接着通过循环生成了一系列随机数,进一步突显了这个问题。文章指出,随机数生成在任何编程语言中都是必备的功能,但Random类生成的随机数并不可靠。最后,提出了需要寻找其他可靠的随机数生成方法的建议。 ... [详细]
  • 本文主要解析了Open judge C16H问题中涉及到的Magical Balls的快速幂和逆元算法,并给出了问题的解析和解决方法。详细介绍了问题的背景和规则,并给出了相应的算法解析和实现步骤。通过本文的解析,读者可以更好地理解和解决Open judge C16H问题中的Magical Balls部分。 ... [详细]
  • Android Studio Bumblebee | 2021.1.1(大黄蜂版本使用介绍)
    本文介绍了Android Studio Bumblebee | 2021.1.1(大黄蜂版本)的使用方法和相关知识,包括Gradle的介绍、设备管理器的配置、无线调试、新版本问题等内容。同时还提供了更新版本的下载地址和启动页面截图。 ... [详细]
  • 计算机存储系统的层次结构及其优势
    本文介绍了计算机存储系统的层次结构,包括高速缓存、主存储器和辅助存储器三个层次。通过分层存储数据可以提高程序的执行效率。计算机存储系统的层次结构将各种不同存储容量、存取速度和价格的存储器有机组合成整体,形成可寻址存储空间比主存储器空间大得多的存储整体。由于辅助存储器容量大、价格低,使得整体存储系统的平均价格降低。同时,高速缓存的存取速度可以和CPU的工作速度相匹配,进一步提高程序执行效率。 ... [详细]
  • 本文介绍了Web学习历程记录中关于Tomcat的基本概念和配置。首先解释了Web静态Web资源和动态Web资源的概念,以及C/S架构和B/S架构的区别。然后介绍了常见的Web服务器,包括Weblogic、WebSphere和Tomcat。接着详细讲解了Tomcat的虚拟主机、web应用和虚拟路径映射的概念和配置过程。最后简要介绍了http协议的作用。本文内容详实,适合初学者了解Tomcat的基础知识。 ... [详细]
  • CF:3D City Model(小思维)问题解析和代码实现
    本文通过解析CF:3D City Model问题,介绍了问题的背景和要求,并给出了相应的代码实现。该问题涉及到在一个矩形的网格上建造城市的情景,每个网格单元可以作为建筑的基础,建筑由多个立方体叠加而成。文章详细讲解了问题的解决思路,并给出了相应的代码实现供读者参考。 ... [详细]
  • 本文介绍了在使用Python中的aiohttp模块模拟服务器时出现的连接失败问题,并提供了相应的解决方法。文章中详细说明了出错的代码以及相关的软件版本和环境信息,同时也提到了相关的警告信息和函数的替代方案。通过阅读本文,读者可以了解到如何解决Python连接服务器失败的问题,并对aiohttp模块有更深入的了解。 ... [详细]
author-avatar
一枝红杏出墙来2001
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有