From 92f1b7e2c0cb4fed4d06748af95a9bb95ac8c06f Mon Sep 17 00:00:00 2001 From: mno <718135749@qq.com> Date: Fri, 15 Aug 2025 17:00:45 +0800 Subject: [PATCH] =?UTF-8?q?js=EF=BC=9A=E6=80=A7=E8=83=BD=E6=B5=8B=E8=AF=95?= =?UTF-8?q?1.1=20(#1596)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * js:性能测试1.1 从截图、模板匹配、ocr三个角度评价电脑性能 结果仅作为参考,只能在一定程度上反映当前环境下bgi的运行状态 建议启动bgi后不要执行其他任务就进行测试(如果截图评分低于50,可能bgi没睡醒,建议稍等后再测一次) * js:锄地一条龙1.4.4 ### 1.4.4(2025.08.15) 1.微调了拾取的参数,尝试减少误拾取与遗漏 * js:性能测试1.2 单独测试时得分修正 --- repo/js/AutoHoeingOneDragon/README.md | 2 + repo/js/AutoHoeingOneDragon/main.js | 12 +-- repo/js/AutoHoeingOneDragon/manifest.json | 2 +- repo/js/ComputerBlower/main.js | 102 +++++++++++++++------- repo/js/ComputerBlower/manifest.json | 2 +- repo/js/ComputerBlower/readme.md | 6 +- repo/js/ComputerBlower/settings.json | 3 +- 7 files changed, 87 insertions(+), 42 deletions(-) diff --git a/repo/js/AutoHoeingOneDragon/README.md b/repo/js/AutoHoeingOneDragon/README.md index e34dcb27a..349c80e29 100644 --- a/repo/js/AutoHoeingOneDragon/README.md +++ b/repo/js/AutoHoeingOneDragon/README.md @@ -78,6 +78,8 @@ --- ### 更新日志 +### 1.4.4(2025.08.15) +1.微调了拾取的参数,尝试减少误拾取与遗漏 ### 1.4.3(2025.08.13) 1.研究方法进入[沙暴]区域 ### 1.4.2(2025.08.13) diff --git a/repo/js/AutoHoeingOneDragon/main.js b/repo/js/AutoHoeingOneDragon/main.js index 0cbdb9090..8890db3b6 100644 --- a/repo/js/AutoHoeingOneDragon/main.js +++ b/repo/js/AutoHoeingOneDragon/main.js @@ -1,4 +1,4 @@ -//当前js版本 1.4.3 +//当前js版本 1.4.2 //拾取时上下滑动的时间 let timeMoveUp = 500; @@ -590,7 +590,7 @@ async function runPath(pathFilePath, map_name, whitelistKeywords, blacklistKeywo } // 定义一个函数用于执行OCR识别和交互 - async function recoginzeAndInteract(imagePath, whitelistKeywords, textxRange, texttolerance) { + async function recognizeAndInteract(imagePath, whitelistKeywords, textxRange, texttolerance) { async function performOcr(whitelistKeywords, xRange, yRange) { try { // 在捕获的区域内进行OCR识别 @@ -706,7 +706,7 @@ async function runPath(pathFilePath, map_name, whitelistKeywords, blacklistKeywo let centerYTargetText = ocrResult.y + ocrResult.height / 2; if (Math.abs(centerYTargetText - centerYF) <= texttolerance) { keyPress("F"); // 执行交互操作 - await sleep(2 * trigger); // 操作后暂停 2*trigger 毫秒 + await sleep(250); // 操作后暂停 250 毫秒 foundTarget = true; if ((new Date() - lastPickupTime) > 1000 || ocrResult.text != lastPickupItem) { log.info(`交互或拾取:"${ocrResult.text}"`); @@ -724,7 +724,7 @@ async function runPath(pathFilePath, map_name, whitelistKeywords, blacklistKeywo if (itemName) { keyPress("F"); // 执行交互操作 log.info(`交互或拾取:"${itemName}"`); - await sleep(2 * trigger + 100); // 操作后暂停 2*trigger+100 毫秒 + await sleep(250); // 操作后暂停250 毫秒 foundTarget = true; } @@ -752,7 +752,7 @@ async function runPath(pathFilePath, map_name, whitelistKeywords, blacklistKeywo await keyMouseScript.runFile(`assets/滚轮上翻.json`); } if (pickupMode === "模板匹配拾取,默认只拾取狗粮") { - await sleep(Math.round(trigger / 5)); + await sleep(Math.round(trigger / 3)); } else { await sleep(Math.round(trigger)); } @@ -879,7 +879,7 @@ async function runPath(pathFilePath, map_name, whitelistKeywords, blacklistKeywo // 根据条件决定是否启动 OCR 检测和交互任务 let ocrTask = null; if (pickupMode === "ocr拾取,默认只拾取狗粮和晶蝶" || pickupMode === "模板匹配拾取,默认只拾取狗粮") { - ocrTask = recoginzeAndInteract(imagePath, whitelistKeywords, textxRange, texttolerance); + ocrTask = recognizeAndInteract(imagePath, whitelistKeywords, textxRange, texttolerance); } // 启动泥头车 diff --git a/repo/js/AutoHoeingOneDragon/manifest.json b/repo/js/AutoHoeingOneDragon/manifest.json index 0dd310968..b614c861c 100644 --- a/repo/js/AutoHoeingOneDragon/manifest.json +++ b/repo/js/AutoHoeingOneDragon/manifest.json @@ -1,7 +1,7 @@ { "manifest_version": 1, "name": "锄地一条龙", - "version": "1.4.3", + "version": "1.4.4", "description": "一站式解决自动化锄地,支持只拾取狗粮,请仔细阅读README.md后使用", "authors": [ { diff --git a/repo/js/ComputerBlower/main.js b/repo/js/ComputerBlower/main.js index 81c79c746..05ac6cf2d 100644 --- a/repo/js/ComputerBlower/main.js +++ b/repo/js/ComputerBlower/main.js @@ -1,59 +1,85 @@ // 主函数 (async function () { operationMode = settings.operationMode || "截图"; - const xRange = parseInt(+settings.xRange || 1920, 10); - const yRange = parseInt(+settings.yRange || 1920, 10); - let startTime = Date.now(); - const interval = +settings.interval || 1000; - const timeout = +settings.timeout || 60; - let lastCheck = startTime; - let ocrcount = 0; - let loopCount = 0; + let xRange = parseInt(+settings.xRange || 1920, 10); + let yRange = parseInt(+settings.yRange || 1080, 10); + let interval = +settings.interval || 1000; + let timeout = +settings.timeout || 60; + let dispose = settings.dispose; + + const imagePath = "assets/流放.png"; let template = file.ReadImageMatSync(imagePath); - if (operationMode === "截图") { - while (Date.now() - startTime < timeout * 1000) { + let captureRegionScore = 0; + let tempalteMatchScore = 0; + let ocrScore = 0; + await genshin.tpToStatueOfTheSeven(); + + if (operationMode === "综合测试") { + log.info("开始综合测试,预计用时约30秒"); + dispose = true; + timeout = 11; + xRange = 1920; + yRange = 1080; + interval = 1000; + } + + if (operationMode === "截图" || operationMode === "综合测试") { + let startTime = Date.now(); + let count = 0; + let loopCount = 0; + while (Date.now() - startTime <= timeout * 1000) { try { let GameRegion = captureGameRegion(); - if (settings.dispose) GameRegion.dispose(); - ocrcount++; - if (Date.now() - lastCheck >= interval) { + if (dispose) GameRegion.dispose(); + count++; + if (Date.now() - startTime >= interval * (loopCount + 1)) { loopCount++; await sleep(1); - lastCheck = Date.now(); - log.info(`在第${loopCount}个${interval}毫秒内执行了${ocrcount}次截图`); - ocrcount = 0; + log.info(`在第${loopCount}个${interval}毫秒内执行了${count}次截图`); + captureRegionScore += count; + count = 0; } } catch (error) { log.error(`运行时发生异常: ${error.message}`); break; } } + captureRegionScore = Math.round(((captureRegionScore * 10 / loopCount) / 33.3) * 100) / 100; + log.info(`截图测试完成,得分${captureRegionScore.toFixed(2)}`); } - if (operationMode === "模板匹配") { + if (operationMode === "模板匹配" || operationMode === "综合测试") { + let startTime = Date.now(); + let count = 0; + let loopCount = 0; let GameRegion = captureGameRegion(); - while (Date.now() - startTime < timeout * 1000) { + while (Date.now() - startTime <= timeout * 1000) { try { - let recognitionObject = RecognitionObject.TemplateMatch(template, 0, 0, xRange, yRange); let result = GameRegion.find(recognitionObject); - ocrcount++; - if (Date.now() - lastCheck >= interval) { + count++; + if (Date.now() - startTime >= interval * (loopCount + 1)) { loopCount++; await sleep(1); - lastCheck = Date.now(); - log.info(`在第${loopCount}个${interval}毫秒内执行了${ocrcount}次模板匹配`); - ocrcount = 0; + log.info(`在第${loopCount}个${interval}毫秒内执行了${count}次模板匹配`); + tempalteMatchScore += count; + count = 0; } } catch (error) { log.error(`运行时发生异常: ${error.message}`); break; } } - if (settings.dispose) GameRegion.dispose(); + if (dispose) GameRegion.dispose(); + tempalteMatchScore = Math.round(((tempalteMatchScore * 10 / loopCount) / 3.5) * 100) / 100; + log.info(`模板匹配测试完成,得分${tempalteMatchScore.toFixed(2)}`); } - if (operationMode === "ocr") { + + if (operationMode === "ocr" || operationMode === "综合测试") { + let startTime = Date.now(); + let count = 0; + let loopCount = 0; let GameRegion = captureGameRegion(); while (Date.now() - startTime < timeout * 1000) { try { @@ -61,19 +87,31 @@ 0, 0, xRange, yRange )); - ocrcount++; + count++; } catch (error) { log.error(`运行时发生异常: ${error.message}`); break; } - if (Date.now() - lastCheck >= interval) { + if (Date.now() - startTime >= interval * (loopCount + 1)) { loopCount++; - lastCheck = Date.now(); await sleep(1); - log.info(`在第${loopCount}个${interval}毫秒内执行了${ocrcount}次OCR`); - ocrcount = 0; + log.info(`在第${loopCount}个${interval}毫秒内执行了${count}次OCR`); + ocrScore += count; + count = 0; } } - if (settings.dispose) GameRegion.dispose(); + if (dispose) GameRegion.dispose(); + ocrScore = ocrScore; + ocrScore = Math.round((ocrScore * 2 * 10 / loopCount) * 100) / 100; + log.info(`ocr测试完成,得分${ocrScore.toFixed(2)}`); + } + + if (operationMode === "综合测试") { + log.info("综合测试结束"); + finalScore = (captureRegionScore + tempalteMatchScore + ocrScore) / 3; + log.info(`截图评分为${captureRegionScore.toFixed(2)}`); + log.info(`模板匹配评分为${tempalteMatchScore.toFixed(2)}`); + log.info(`ocr评分为${ocrScore.toFixed(2)}`); + log.info(`综合评分为${finalScore.toFixed(2)}`) } })(); diff --git a/repo/js/ComputerBlower/manifest.json b/repo/js/ComputerBlower/manifest.json index 04df2649e..4293b3ab3 100644 --- a/repo/js/ComputerBlower/manifest.json +++ b/repo/js/ComputerBlower/manifest.json @@ -1,7 +1,7 @@ { "manifest_version": 1, "name": "性能测试", - "version": "1.0", + "version": "1.2", "tags": [], "bgi_version": "0.46.0", "description": "测测你的", diff --git a/repo/js/ComputerBlower/readme.md b/repo/js/ComputerBlower/readme.md index e87fd70d8..2593703e2 100644 --- a/repo/js/ComputerBlower/readme.md +++ b/repo/js/ComputerBlower/readme.md @@ -1,2 +1,6 @@ -运行后将会尝试满负荷循环截图,并在日志输出截图次数,可在自定义配置选择是否dispose +从截图、模板匹配、ocr三个角度评价电脑性能 + +结果仅作为参考,只能在一定程度上反映当前环境下bgi的运行状态 + +建议启动bgi后不要执行其他任务就进行测试(如果截图评分低于50,可能bgi没睡醒,建议稍等后再测一次) diff --git a/repo/js/ComputerBlower/settings.json b/repo/js/ComputerBlower/settings.json index ab5545ccc..d31fabfa3 100644 --- a/repo/js/ComputerBlower/settings.json +++ b/repo/js/ComputerBlower/settings.json @@ -4,11 +4,12 @@ "type": "select", "label": "测试项目", "options": [ + "综合测试", "截图", "模板匹配", "ocr" ], - "default": "只截图" + "default": "综合测试" }, { "name": "dispose",