Android无障碍服务可以操作元素,手势模拟,实现基本的控制。opencv可以进行图像识别。两者结合在一起即可实现支付宝能量自动收集。opencv用于识别能量,无障碍服务用于模拟手势,即点击能量。

当然这两者结合不单单只能实现这些,还能做很多自动化的程序,如芭芭农场自动施肥、蚂蚁庄园等等的自动化,甚至游戏的自动化也没问题。

下面简单介绍下核心的实现逻辑

核心步骤

  1. 准确识别多个能量球位置
  2. 准确点击能量球位置

opencv识别能量球

OpenCV是一个可用于开发实时的图像处理、计算机视觉以及模式识别可商用的开源库-opencv介绍

思路

使用opencv怎么识别能量球呢?

使用opencv的模板匹配。即,将能量球单独裁剪出来作为模板,再将其与屏幕图像进行匹配,筛选匹配分值最高的结果即获取能量球在屏幕中的位置。

实现

1. 项目集成opencv-android版
dependencies {
implementation 'org.opencv:opencv:4.9.0'
}

最新版本可查看官方集成教程

2. 截取能量球图像作为模板

3. 截取屏幕图像

4. 使用opencv模板匹配获取所有能量球位置

opencv模板匹配api

Imgproc.matchTemplate(image, templ, result, method, mask)

参数解释:

image屏幕图像,即步骤3中截取的屏幕图像

templ模板图像,即步骤2中截图的能量球图像

result匹配结果容器,用于存储匹配的结果

mask掩膜,用于指定模板中哪些位置需要匹配,哪些不需要匹配

其中参数mask掩膜是匹配准确度的关键点

掩膜图像是根据模板生成的一张黑白图像,其中黑色为不需要匹配的区域

模板图像与生成的掩膜图像对比

模板图像 掩模图像

其中文字也是我们不需要匹配的,因为里面的文字会变化,所以中间加了一块黑色矩形用于指定匹配忽略区域

对于掩膜的创建方法这里不介绍了,所有代码都已经开放在我的自动化开源库Assists里,想直接看代码这里:https://github.com/ven-coder/Assists

参数准备好就可以进行匹配了,下面是完整代码(kotlin代码)

    /**
* 模板匹配能量球
*/
fun match() {
try {
val path = System.getProperty("user.dir") + "\\lib\\x64\\opencv_java490.dll"
System.load(path)
val temp = System.getProperty("user.dir") + "\\images\\temp.jpg"
val image = System.getProperty("user.dir") + "\\images\\image.png"
//模板图像
val img = Imgcodecs.imread(image)
//屏幕图像
val templ = Imgcodecs.imread(temp)
//掩膜图像
val mask = createMask(templ)
// 创建结果矩阵
val resultCols: Int = img.cols() - templ.cols() + 1
val resultRows: Int = img.rows() - templ.rows() + 1
val result = Mat(resultRows, resultCols, CvType.CV_32FC1)
// 进行模板匹配
Imgproc.matchTemplate(img, templ, result, Imgproc.TM_CCORR_NORMED, mask)
// 遍历结果矩阵,找到所有匹配超过阈值的位置
val threshold = 0.98 // 阈值,根据实际情况调整
var count = 0
var countValue = 0
for (y in 0 until result.rows()) {
for (x in 0 until result.cols()) {
countValue++
val matchValue = result[y, x]
if (matchValue[0] >= threshold) {
count++
// 找到一个匹配位置
val matchLoc = Point(x.toDouble(), y.toDouble())
// 绘制矩形框
Imgproc.rectangle(img, matchLoc, Point(matchLoc.x + templ.cols(), matchLoc.y + templ.rows()), Scalar( 85.0, 85.0,205.0,), 2, Imgproc.LINE_AA, 0)
}
}
}
// 显示结果
Imgproc.resize(img, img, Size(img.cols() / 2.0, img.rows() / 2.0)) // 可选:调整显示大小
HighGui.imshow("Matched Result: $count", img)
HighGui.waitKey(0)
} catch (e: Throwable) {
e.printStackTrace()
}
} /**
* 创建掩膜
*/
fun createMask(source: Mat): Mat {
// 转换为 HSV 颜色空间
val hsvImage = Mat()
Imgproc.cvtColor(source, hsvImage, Imgproc.COLOR_BGR2HSV) // 定义绿色的颜色范围
val lowerGreen = Scalar(35.0, 100.0, 100.0)
val upperGreen = Scalar(85.0, 255.0, 255.0) // 创建掩膜
val mask = Mat()
Core.inRange(hsvImage, lowerGreen, upperGreen, mask) // 忽略“27g”文字
// 你可以使用形态学操作去掉文字部分,或者手动确定文字的位置并将其设置为黑色(0)。
// 假设文字位于圆形中心,可以手动遮盖这个区域
// Rect(中心位置x, 中心位置y, 宽度, 高度)
val width = 80
val height = 60
val textRect = Rect(source.width() / 2 - width / 2, source.height() / 2 - height / 2, width, height) // 假设的“27g”文字位置和大小
Imgproc.rectangle(mask, textRect, Scalar(0.0), -1)
Imgproc.rectangle(mask, Rect((source.width() / 2 - width / 2) + 10, (source.height() / 2 - height / 2) + height, 40, 25), Scalar(255.0), -1)
return mask
}

匹配结果

点击能量球

准确得到能量球位置之后就好办了,使用我的开源库Assists开启无障碍服务后调用gestureClick(x: Float, y: Float)点击能量球位置即可

//it.x + temp3.width() / 2,坐标加上模板大小的一半即点击中间位置
Assists.gestureClick((it.x + temp3.width() / 2).toFloat(), (it.y + temp3.height() / 2).toFloat())

最终效果

以上所有代码都在我的开源库Assists示例里了,需要的自取即可。

觉得有帮助顺便可以start一下,满足以下一下老夫虚荣心憋

Android无障碍自动化结合opencv实现支付宝能量自动收集的更多相关文章

  1. OpenCV4Android释疑: 透析Android以JNI调OpenCV的三种方式(让OpenCVManager永不困扰)

    OpenCV4Android释疑: 透析Android以JNI调OpenCV的三种方式(让OpenCVManager永不困扰) 前文曾详细探讨了关于OpenCV的使用,原本以为天下已太平.但不断有人反 ...

  2. Android控件GridView之仿支付宝钱包首页带有分割线的GridView九宫格的完美实现

    Android控件GridView之仿支付宝钱包首页带有分割线的GridView九宫格的完美实现 2015-03-10 22:38 28419人阅读 评论(17) 收藏 举报  分类: Android ...

  3. 在win和android上同时进行OpenCV程序设计

    基于qt进行Android图像处理项目设计的时候,初期可以首先在windows上进行调试,等到比较成熟后将代码转换到adnroid上. 这里仅以widget为例,如果使用qtquick是一样的.具体以 ...

  4. Android NDK开发及OpenCV初步学习笔记

    https://www.jianshu.com/p/c29bb20908da Android NDK开发及OpenCV初步学习笔记 Super_圣代 关注 2017.08.19 00:55* 字数 6 ...

  5. Android学习七---Hello OpenCV samples

    创建一个能够使用OpenCV JavaCameraView的应用程序来了解基于OpenCV java API 的应用程序的开发流程.有了Android的基础,在程序中需要修改的几个地方1.activi ...

  6. 在Android Studio上进行OpenCV 3.1开发环境配置

    开发环境: Windows 7 x 64 家庭版 Android Studio 1.5.1(Gradle版本2.8) JDK 1.8.0 Android 6.0(API 23) OpenCV 3.1. ...

  7. OpenCV - Android Studio 中集成Opencv环境(包含opencv_contrib部分)

    我在上一篇博客中说到了在Android中集成OpenCV,但是那个版本的OpenCV是没有SIFT和SURF算法的,因为这些算法是受专利保护的,所以并没有被包含在预编译库中,所以如果想要使用SIFT和 ...

  8. 懒人模式开启Android模块自动化Api之旅

    推荐阅读: 滴滴Booster移动App质量优化框架-学习之旅 一 Android 模块Api化演练 不一样视角的Glide剖析(一) 在将业务进行模块化时,避免不了模块页面路由和模块通信, 大多数我 ...

  9. Android APP压力测试(二)之Monkey信息自动收集脚本

      Android APP压力测试(二) 之Monkey信息自动收集脚本 前言: 上一篇Monkey介绍基本搬抄官方介绍,主要是为了自己查阅方便.本文重点介绍我在进行Monkey时如何自动收集相关信息 ...

  10. 三年Android开发快手、美团、支付宝连挂,怒刷1549页面试题字节上岸

    刚开始面试的时候我真的是处处碰壁,面一家挂一家,面完之后怀疑自我,是不是自己真的太菜了找不到工作.工作本身就是双向选择,一家不行再换一家,总有合适的,千万不要因为别人的一句话就全盘否定自己,一定要自信 ...

随机推荐

  1. 优秀的 RocketMQ 可视化管理工具 GUI 客户端

    优秀的 RocketMQ 可视化管理工具 GUI 客户端 官网地址:http://www.redisant.cn/rocketmq 快速查看所有 RocketMQ 集群,包括Brokers.Topic ...

  2. STLINK/V2下载器接线方法

    一.ST-LINK ST-LINK产品如下图所示: ST-LINK接口定义如下图所示 ST-LINK与stm32接线 使用SW接法只需要四根线: STM32 ST-LINK VCC(3.3V) TVC ...

  3. Competition Set - 模拟赛 I

    HNOI2017 Day2 2023-06-10 注:Day2T2换为BJOI2017Day2T1,以匹配学习进度 A.大佬 B.抛硬币 C.喷式水战改 A 大佬 你需要用 \(n\) 天挑战一名大佬 ...

  4. .Net 8.0 下的新RPC,IceRPC之试试的新玩法"打洞"

    作者引言 很高兴啊,我们来到了IceRPC之试试的新玩法"打洞",让防火墙哭去吧 试试RPCs的新玩法"打洞" 比较典型的玩法:RPC数据流从客户端流向服务端, ...

  5. 面向教师的OBS直播速成教程

    引言 本文是面向教师讲述的如何使用OBS软件进行课程直播的速成教程. 本文配套视频链接如下️ 面向教师的OBS直播教学速成教程_哔哩哔哩_bilibili 环境准备 1. 下载对应本机系统版本的并安装 ...

  6. docker 搭建LNMP环境

    php7 仓库地址 https://gitee.com/haima1004/docker-lnmp

  7. Python字符串方法:字符串查找、替换、分割

    字符串查找 Python 提供了内置的字符串查找方法find(),利用该方法可以在一个较长的字符串中查找子字符串.如果该字符串中,有一个或者多个子字符串,则该方法返回第一个子串所在位置的最左端索引,若 ...

  8. pageoffice6提取word指定位置(数据区域)的值

    在实际的开发过程中,经常会遇到提取Word文档中指定位置的数据保存到数据库中的需求,PageOffice客户端控件即支持在线保存Word文件,也支持Word文档中的指定位置的数据或所有的数据提交到服务 ...

  9. pageoffice6 实现在线模板套红

    在Web项目中处理Word文档,经常会用到Word模板,只不过这里的"模板"概念,都是指在Web项目中预先放置的doc.docx等扩展名的.真正的Word文档,对于Excel和PP ...

  10. 14个Flink SQL性能优化实践分享

    本文分享自华为云社区<Flink SQL性能优化实践> ,作者:超梦. 在大数据处理领域,Apache Flink以其流处理和批处理一体化的能力,成为许多企业的首选.然而,随着数据量的增长 ...