全自动苹果手机试玩


QQ 282397369
把脚本模块做得有点样子,总得拿什么来练下,看下效果。
趁未复工宅家之际,结合经验与需求,折腾下苹果手机试玩,目标肯定是要做全自动的效果。
花了整整20天,初步达到预期效果。

初步需求

上网查了一下,苹果手机试玩业务有点效益,东刷刷西刷刷,每天可以刷20-30元。但把人耗在上面,每个月1000元收益,确实不划算。
不过在家里放一两部手机,网络与账号都是现成的,每月有个千把元的额外收入也还是不错。
所以,开干。搞来两部二手机【非越狱机】,装上电话卡…【这里省略维修装机准备工作1000字】

思路

今天先简单说下思路,后续再详细说实现。思路说起来应该很简单:取得手机图像,然后图像分析,然后各个试玩平台配一个脚本,它说咋干就咋干。
对IOS不熟,那就在PC里编程序实现。原来工资不高的原因在这里,只会PC编程。

获取手机图像

方法很多,直接用手机的镜像功能。在同一局域网内,PC中开个镜像服务,什么iTools、大师、AirServer、AirPlay…,都可以。
在这里插入图片描述
图像到了计算机里,就象砧板上的肉,想捏圆就圆,想方就方。直接取过来,为我所用。
在这里插入图片描述

平台脚本

初看了一下,好象有上百个平台,那就一天实现一个平台脚本,看心情。
平台脚本主要任务是识别图像,算是页面识别吧,先定义几个页面类型。因业务发展,随时可补充扩展

	pptFlash = 0           		-- Flash页面
	pptHome = 1           		-- 起始页面
	pptList_ToGet = 2   	   	-- 待抢单任务列表页面
	pptList_Gotten = 3			-- 已接单任务列表页面
	pptDetail_ToDownload = 4   	-- 待下载任务详情页面
	pptDetail_ToRun = 5     	-- 待运行任务详情页面
	pptDetail_ToAward = 6    	-- 待领奖任务详情页面
	pptDetail_Awarded = 7    	-- 领奖完毕任务详情页面
	pptDetail_ToDownload2 = 8	-- 待下载任务详情页面2
	pptPlatform_Unknown = 9		-- 本平台内未知页面
	pptMainScreen = 10			-- 主屏幕
	pptAppStore = 11			-- AppStore页面
	pptUnknown = -1

页面识别

识别不外乎图像识别、文字识别两种。稍微整理一下,实现两个API函数供脚本用:
IsVisible、IsVisibleMat,分别判断目标文字与图片是否存在。
LUA确实不错,居然可以返回多个值。所以,如果存在,就顺便把目标的中心位置也返回。
在C++端,把各种条件均考虑一下,最主要是为了使用方便。文字可加上位置限制,而图像还可以加上背景处理方式。

UnicodeString subMatContent = THelper::GetLuaParamAt(params, paramIndex++);
TPoint resultPos(-1, -1);
if(subMatContent.Pos(L"<<")) {
	TPositionOption option;
	option.ReadFromString(subMatContent);
	CvRects allRects;
	if(option.Color.x < 0) {
		cv::Mat mat = srcMat.clone();
		if(mat.channels() != 1) {
			mat = CvHelper::ToMat_GRAY(srcMat);
			threshold(mat, mat, 0x7F, 0xFF, cv::THRESH_BINARY);
		}
		allRects = CvHelper::GetAllDomain(mat, option);
	}
	else
		allRects = CvHelper::UIParse_GetEdit(srcMat, option);
	int size = allRects.size();
	UnicodeString indexText = THelper::GetLuaParamAt(params, paramIndex++, L"0").Trim().LowerCase();
	int index = indexText.ToInt();
	if(index < 0)
		index += size;
	if(IS_IN_RANGE(index, 0, size - 1)) {
		CvRect r = allRects[index];
		resultPos = TPoint(r.x + r.width / 2, r.y + r.height / 2);
	}
} else if(THelper::String::IsStartWith(subMatContent.LowerCase(), L"icon")) {
	UnicodeString iconName = THelper::String::GetStringAt(subMatContent, L"=", 1).Trim();
	cv::Mat iconMat = lua->ParseMat(iconName);
	cv::Mat whiteBkMat = GetWhiteBackgroundMat(srcMat);
	cv::Mat maskMat = CvHelper::BuildTransMaskMat(whiteBkMat, clWhite, 5);
	bitwise_not(maskMat, maskMat);
	CvRects rects = GetIconRects(maskMat, iconMat.cols, iconMat.rows);
	CBW_ITERATOR(CvRects, rects) {
		cv::Mat dstMat = CvHelper::CopySubMat(whiteBkMat, *it);
		if(CvHelper::IsSameIcons(dstMat, iconMat, false, true, 0.90, false, 3, false, false)) {
			resultPos = TPoint(it->x + it->width / 2, it->y + it->height / 2);
			break;
		}
	}
} else {
	UnicodeString fileName = lua->ParseFileName(subMatContent, !FILE_MUST_EXISTED);
	cv::Mat subMat;
	if(FileExists(fileName))
		subMat = CvHelper::MatFromFile(fileName);
	else
		subMat = lua->ParseMat(subMatContent);
	if(!subMat.empty())
		resultPos = CvHelper::GetSubMatPos(srcMat, subMat);
}
lua->AddReturnValue(resultPos, L"目标位置");

这样在写LUA脚本的时候,调用方式简单粗暴:

if    (ios:IsVisible("早起打卡")) then return ios:SetPage(pptHome)																					
elseif(ios:IsVisibleMat("Color << 0x9BE000, 5", "width << 640, 10 << height << 100, 10") and 
	   ios:IsVisible("收徒赚钱", "y << 160, 20")) then return ios:SetPage(pptHome_Invite)														
elseif(ios:IsVisible("试玩任务", "xCenter << 20 << y << 155, 20") and
       ios:IsVisible("当前试玩", "x << 30, 20")) then return ios:SetPage(pptList_ToGet)	
end														

一句话就可以识别一种页面。
在这里插入图片描述

操作处理

既然有两种识别方式,对应也就再提供两种操作方式:
Click, ClickMat,分别点击目标文字与目标图像,类似于

if    (currentPageType == pptHome) then ios:ClickMat("Color, 0x58C6FF, 10", "width << 325, 10 << height << 220, 10")	
elseif(currentPageType == pptDetail_Awarded) then ios:Click("我知道了")	
elseif(currentPageType == pptDetail_ToAward) then ios:Click("领取", "xCenter << 10 << Color << 0x0065FF, 30") 
elseif(currentPageType == pptDetail_ToRun) then ios:Click("打开应用", "xCenter << 10 << Color << 0x0065FF, 30") 
end

这样,就把业务逻辑剥离了出来,随便最终平台界面如何变化,均可以脚本应对之。

结果报告

结合之前的工作,可以把这块形成图片报告,直接发到QQ里,这样即使在外面,收到这样一条QQ消息也是小爽的。
在这里插入图片描述
在这里插入图片描述

后记

别的环节自动化,比起脚本自动化来,都要简单一些,不外乎各个功能的整合。在此不再赘述
通过这么一个小需求,发现【图像识别+脚本】组合起来,能解决的问题确实很多。
做这样一件小事,结果把自用的通用工具也做出了初样,各种基本的图像分析处理效果可以直观展现。当然,最值得的还是把LUA集成开发环境给考验了一把。所以,还是比较值得的。并且感觉【图像识别+脚本】成为自己的一个方向。以后没钱了,也可以搞点兼职什么的。
苹果先练手,后续再做做安卓、PC之类的脚本,看看还能蹦出什么火花。

另:本文纯属自娱自乐。如果有【图像识别+脚本】方面的需求,欢迎来撩。

发布了9 篇原创文章 · 获赞 2 · 访问量 545

猜你喜欢

转载自blog.csdn.net/drgraph/article/details/104953105
今日推荐