|
|
 | |  |  | 安卓脚本示例实时截图判断页面变化
- // 实时截图判断页面变化示例
- // 技术交流QQ群711841924群一,苹果内测群,528816639
- // 采用全屏高采样率像素对比,间隔5秒检测
- /**
- * 截取当前屏幕并保存为Mat对象
- * @returns {Object} Mat对象,失败返回null
- */
- function captureScreen() {
- try {
- // 获取屏幕尺寸
- var screenWidth = 1080;
- var screenHeight = 1920;
-
- if (typeof screen !== 'undefined') {
- if (typeof screen.getScreenWidth === 'function') {
- screenWidth = screen.getScreenWidth();
- screenHeight = screen.getScreenHeight();
- }
- }
-
- printl("截取屏幕: " + screenWidth + "x" + screenHeight);
- var screenshot = screen.screenShot(screenWidth, screenHeight, 100);
- return screenshot.getMat();
- } catch (e) {
- printl("截图失败: " + String(e));
- return null;
- }
- }
- /**
- * 比较两个Mat对象的相似度(通过像素点采样)
- * @param {Object} mat1 - 第一个Mat对象
- * @param {Object} mat2 - 第二个Mat对象
- * @param {number} sampleRate - 采样率(0-1),默认0.2表示采样20%的像素
- * @returns {number} 相似度(0-1),1表示完全相同
- */
- function compareMats(mat1, mat2, sampleRate) {
- if (!mat1 || !mat2) {
- printl("ERR: Mat对象为空,无法比较");
- return 0;
- }
-
- try {
- sampleRate = sampleRate || 0.2; // 提高默认采样率到20%
-
- var width1 = mat1.width();
- var height1 = mat1.height();
- var width2 = mat2.width();
- var height2 = mat2.height();
-
- printl("图片1尺寸: " + width1 + "x" + height1);
- printl("图片2尺寸: " + width2 + "x" + height2);
-
- // 尺寸不同直接认为不同
- if (width1 !== width2 || height1 !== height2) {
- printl("⚠️ 图片尺寸不同,判定为页面已变化");
- return 0;
- }
-
- // 计算采样步长
- var stepX = Math.floor(1 / sampleRate);
- var stepY = Math.floor(1 / sampleRate);
-
- var totalPixels = 0;
- var samePixels = 0;
- var changedPixels = 0;
-
- // 采样比较像素点
- for (var y = 0; y < height1; y += stepY) {
- for (var x = 0; x < width1; x += stepX) {
- try {
- var pixel1 = mat1.get(y, x);
- var pixel2 = mat2.get(y, x);
-
- if (pixel1 && pixel2) {
- totalPixels++;
-
- // 比较RGB值(降低容差,提高灵敏度)
- var diff = Math.abs(pixel1[0] - pixel2[0]) +
- Math.abs(pixel1[1] - pixel2[1]) +
- Math.abs(pixel1[2] - pixel2[2]);
-
- // 降低阈值从30到10,更灵敏
- if (diff < 10) {
- samePixels++;
- } else {
- changedPixels++;
- }
- }
- } catch (e) {
- // 忽略单个像素读取错误
- }
- }
- }
-
- if (totalPixels === 0) {
- printl("ERR: 没有可比较的像素点");
- return 0;
- }
-
- var similarity = samePixels / totalPixels;
- var changeRate = changedPixels / totalPixels;
-
- printl("采样像素总数: " + totalPixels);
- printl("相似像素数: " + samePixels);
- printl("变化像素数: " + changedPixels);
- printl("变化率: " + (changeRate * 100).toFixed(2) + "%");
- printl("相似度: " + (similarity * 100).toFixed(2) + "%");
-
- return similarity;
- } catch (e) {
- printl("ERR: 比较Mat对象错误: " + String(e));
- return 0;
- }
- }
- /**
- * 基础页面变化检测 - 通过两次截图对比
- * @param {number} interval - 两次截图间隔时间(秒)
- * @param {number} threshold - 相似度阈值(0-1),低于此值认为页面变化,默认0.90(更敏感)
- * @returns {boolean} 页面是否发生变化(true=变化,false=未变化)
- */
- function isPageChangedByScreenshot(interval, threshold) {
- printl("=== 开始截图对比页面变化检测 ===");
- printl("截图间隔: " + interval + "秒");
- printl("相似度阈值: " + (threshold * 100).toFixed(1) + "%");
- printl("💡 提示: 请在" + interval + "秒内切换页面或滚动屏幕");
-
- try {
- // 第一次截图
- printl("\n📸 进行第1次截图...");
- var mat1 = captureScreen();
- if (!mat1) {
- printl("ERR: 第1次截图失败");
- return false;
- }
- printl("✅ 第1次截图成功");
-
- // 等待指定时间
- printl("\n⏰ 等待 " + interval + " 秒...");
- printl("👉 请在此期间切换页面、滚动屏幕或改变界面内容");
- sleep.second(interval);
-
- // 第二次截图
- printl("\n📸 进行第2次截图...");
- var mat2 = captureScreen();
- if (!mat2) {
- printl("ERR: 第2次截图失败");
- mat1 = null; // 释放资源
- return false;
- }
- printl("✅ 第2次截图成功");
-
- // 比较两次截图
- printl("\n🔍 开始比较两次截图...");
- var similarity = compareMats(mat1, mat2, 0.2); // 提高采样率到20%
-
- // 释放Mat资源
- mat1 = null;
- mat2 = null;
-
- // 判断是否变化(降低阈值到0.90,更敏感)
- threshold = threshold || 0.90;
- var changed = (similarity < threshold);
-
- printl("\n=== 检测结果 ===");
- printl("相似度: " + (similarity * 100).toFixed(2) + "%");
- printl("阈值: " + (threshold * 100).toFixed(1) + "%");
-
- if (changed) {
- printl("✅✅✅ 结论: 页面已变化!检测到 " + ((1 - similarity) * 100).toFixed(2) + "% 的差异");
- } else {
- printl("⭕ 结论: 页面未变化(差异太小,可能需要更大改动)");
- }
-
- return changed;
- } catch (e) {
- printl("ERR: 截图对比页面变化检测错误: " + String(e));
- return false;
- }
- }
- /**
- * 演示页面变化检测方法
- */
- function demonstratePageChangeDetection() {
- printl("=== AIWROK 实时截图页面变化检测(最准确版)===");
-
- // 安全获取APP版本
- try {
- if (typeof app !== 'undefined' && app && typeof app.version !== 'undefined') {
- printl("APP版本: " + app.version);
- } else {
- printl("APP版本: 未知");
- }
- } catch (e) {
- printl("获取APP版本失败: " + String(e));
- }
-
- // 获取屏幕尺寸
- var screenWidth = 1080;
- var screenHeight = 1920;
-
- try {
- if (typeof screen !== 'undefined' && screen) {
- if (typeof screen.getScreenWidth === 'function') {
- screenWidth = screen.getScreenWidth();
- screenHeight = screen.getScreenHeight();
- }
- }
- } catch (e) {
- printl("获取屏幕尺寸失败,使用默认值: " + String(e));
- }
-
- printl("设备分辨率: " + screenWidth + "x" + screenHeight);
- printl("\n📌 检测方法: 全屏高采样率像素对比");
- printl("📌 检测间隔: 5秒");
- printl("📌 灵敏度: 高(采样率25%,颜色阈值10,相似度阈值90%)");
-
- // 执行页面变化检测
- printl("\n=== 开始页面变化检测 ===");
- printl("⚠️⚠️⚠️ 重要提示 ⚠️⚠️⚠️");
- printl("在接下来的5秒内,请务必:");
- printl(" 1. 切换到另一个页面/应用");
- printl(" 2. 或者大幅滚动当前页面");
- printl(" 3. 或者弹出对话框/菜单");
- printl("否则将检测不到变化!");
-
- var changed = isPageChangedByScreenshot(5, 0.90);
-
- printl("\n=== 最终检测结果 ===");
- if (changed) {
- printl("✅✅✅ 页面已变化!检测成功!");
- } else {
- printl("⭕ 页面未变化");
- printl("💡 如果确实有变化但未检测到,请检查:");
- printl(" 1. 是否在5秒内进行了明显的页面切换");
- printl(" 2. 变化幅度是否足够大");
- printl(" 3. 可以尝试降低阈值,如: isPageChangedByScreenshot(5, 0.85)");
- }
-
- printl("\n=== 检测完成 ===");
- }
- /**
- * 运行页面变化检测示例
- */
- function runPageChangeDetectionExample() {
- printl("开始执行实时截图页面变化检测示例");
- printl("⚠️ 本示例完全基于实时截图,不需要任何CV文件");
- printl("⚠️ 采用最准确的全屏高采样率对比方法");
- printl("⚠️ 检测间隔: 5秒\n");
-
- // 演示页面变化检测
- demonstratePageChangeDetection();
-
- printl("\n页面变化检测示例执行完毕");
- }
- // 运行示例
- runPageChangeDetectionExample();
复制代码
| |  | |  |
|
unto苹果脚本7种不同的OCR识别nextnocontent
|