数独X——Android openCV识别数独并自动解决,以填充APP开发过程
APP开发
浏览:1071 次

作者:AchillesL
如果文章被转载,请注明文章来源
第一个订单
这是一款起源于18世纪瑞士的数学游戏。这是一种用纸和笔进行的计算。玩家需要遵循9×9对于磁盘上的已知数字,推导所有剩余的空白数字,并确保每行、每列和粗行(3*3)中的数字包含1-9,不重复。
数独
最近,我经常做数独谜题,思考是否可以编写一个APP,自动解决数独问题,并最终将结果填入APP。
钓鱼的发展过程,这里省略了10N条钓线
最后,编写一个APP:数独X。对于作者常用的数独APP(本文的实现基于此APP),我们可以识别、求解并自动填写答案。平均专家水平在1秒内完成解决方案(包括图像编号提取和识别过程),所有操作在8秒内完成。
本文将简要介绍相关功能的实现。这篇文章有点长。如果您需要童鞋,可以使用浏览器的页面搜索功能。数独X的使用效果如下:
渲染,加载会有点慢
2下载链接
数独APP链接:
数独X APP链接:
数独X源代码链接:
[注意]数独X需要Android 7.0或更高版本的手机。
3内容
实施思路简介
项目结构介绍
如何创建浮动窗口
如何在第三方App中获取控制信息
如何在没有root的情况下实现跨App截图

如何提取数独九宫中的数字
如何实现数字识别
如何编写求解数独的代码
如何实现模拟屏幕点击
后记
参考文献
4实施思路介绍
第一步:我们需要在数独APP中获取九宫格。由于数独App是第三方App,因此无法直接获取数独信息。作者的想法是在打开数独界面后调用屏幕截图,然后通过图像处理提取九宫格的人物。同时,为了避免在屏幕捕获过程中阻塞App,数独X的工作窗口应该是浮动窗口的形式。
第二步:截屏后,我们需要进一步捕获数独面板图像以进行数字提取。我们可以写死面板坐标、宽度和高度来提取屏幕截图中的面板。当然,这里有一种更好的方法可以通过辅助功能AccessibilityService获得数独App的数独面板坐标信息。
步骤3:获得数独面板的图像后,使用openCV框架提取数字的轮廓,生成数字图像,然后调用TessTwo框架将图像转换为数字,生成原始二维数独数组。
第四步:数独解,生成答案,生成要填写的数字序列。
步骤5:最后,通过辅助功能AccessabilityService类的相关方法点击模拟屏幕,输入数字以填写数独。
流程图
5项目结构简介
本项目主要包括以下文件:
项目主要文件
类名称
作用
文件存储帮助程序
此类封装了将资产目录复制到SD卡的方法
位置文本信息

此类型记录数独网格的行和列编号以及相应的编号
主要活动
此类实现了App启动窗口,主要用于申请权限、屏幕截图和其他操作
屏幕快照助手
这个类是一个屏幕截图助手类,它封装了一些获取屏幕截图的方法
SP实用程序
此类封装了SharedPreferences的一些操作
数独辅助功能
此类继承了AccessibilityService,以实现第三方App的控制获取和屏幕模拟点击
数独分析
此类用于数独解决方案。输入原始二维数独数组并返回求解的二维数独阵列
数独XOrc
此类用于数独识别。输入数独图像Bitmap并返回原始二维数独数组
数独X服务
该类用于实现浮动窗口、App的工作窗口和数独X的主逻辑
数独XUtils
此类存储恒定信息,如广播操作和屏幕大小
TessTwo助手
此类封装了TessBaseApi的相关方法以实现字符识别
顺序图
6如何创建悬浮窗口

Android的界面渲染是通过WindowManger的serv实现的