From c13454802039d407b3cc30a9067b1e79b188a499 Mon Sep 17 00:00:00 2001
From: DarkFlameMaster <1004452714@qq.com>
Date: Fri, 8 May 2026 00:09:47 +0800
Subject: [PATCH] =?UTF-8?q?=E4=BF=AE=E6=AD=A3OpenCV=E5=91=BD=E5=90=8D?=
=?UTF-8?q?=E7=A9=BA=E9=97=B4=E5=BC=95=E7=94=A8=E9=94=99=E8=AF=AF=EF=BC=8C?=
=?UTF-8?q?Bv=E7=B1=BB=E7=A7=BB=E9=99=A4=E5=86=97=E4=BD=99=E5=86=85?=
=?UTF-8?q?=E5=AE=B9=EF=BC=8C=E4=BC=98=E5=8C=96=E7=A4=BA=E4=BE=8B=E4=BB=A3?=
=?UTF-8?q?=E7=A0=81?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
src/dev/js/BvLocator.md | 314 ++++++++++++++++++++++--------------
src/dev/js/BvPage.md | 348 +++++++++-------------------------------
src/dev/js/rec.md | 8 +-
3 files changed, 278 insertions(+), 392 deletions(-)
diff --git a/src/dev/js/BvLocator.md b/src/dev/js/BvLocator.md
index 89016af..f2ce73d 100644
--- a/src/dev/js/BvLocator.md
+++ b/src/dev/js/BvLocator.md
@@ -7,7 +7,7 @@ date: 2026-02-24
# BvLocator 类 API 文档
-# 类概述
+## 类概述
`BvLocator` 主要用于元素定位,基于 Region 体系进行包装,提供了的元素定位、等待和交互方法。该类支持模板匹配和 OCR 两种识别方式,可用于游戏界面元素的自动识别和操作。
@@ -15,44 +15,51 @@ date: 2026-02-24
### 构造函数
-
-查看C#实现
+**参数说明**
-```csharp
-public BvLocator(RecognitionObject recognitionObject, CancellationToken cancellationToken)
-{
- RecognitionObject = recognitionObject.Clone();
- _cancellationToken = cancellationToken;
-}
-```
+| 参数 | 类型 | 必填 | 描述 |
+|------|------|------|------|
+| recognitionObject | RecognitionObject | 是 | 识别对象,包含识别类型、模板图像或文本等信息 |
+| cancellationToken | CancellationToken | 是 | 取消令牌,用于取消长时间运行的操作 |
-
+**返回值**
+- 返回 `BvLocator` 实例
**JavaScript 调用示例**
-- 也可以使用BvPage创建实例
+
```javascript
+// 1.初始化方法
const token = new CancellationTokenSource().Token;
const ro = RecognitionObject.TemplateMatch(
file.ReadImageMatSync("assets/paimon_menu.png")
);
-
-// 创建 BvLocator 实例
const locator = new BvLocator(ro, token);
+
+// 2.推荐通过 BvPage 初始化
+const page = new BvPage();
+const locator = page.Locator(
+ RecognitionObject.TemplateMatch(
+ file.ReadImageMatSync("assets/paimon_menu.png")
+ )
+);
+
// 现在可以使用 locator 进行元素定位和操作
-const exists = await locator.IsExist();
+const exists = await locator.isExist();
```
-**参数说明**
-
-| 参数 | 类型 | 必填 | 描述 |
-|------|------|------|------|
-| recognitionObject | RecognitionObject | 是 | 识别对象,包含识别类型、模板图像或文本等信息 |
-| cancellationToken | CancellationToken | 是 | 取消令牌,用于取消长时间运行的操作 |
+
+查看C#实现
-**返回值**
-- 返回 `BvLocator` 实例
+```csharp
+public BvLocator(RecognitionObject recognitionObject, CancellationToken cancellationToken)
+{
+ RecognitionObject = recognitionObject.Clone();
+ _cancellationToken = cancellationToken;
+}
+```
+
## 属性
@@ -63,7 +70,6 @@ const exists = await locator.IsExist();
| DefaultTimeout | int | 默认超时时间,单位为毫秒,默认值为 10000 |
| DefaultRetryInterval | int | 默认重试间隔,单位为毫秒,默认值为 250 |
-
## 基础方法
### FindAll
@@ -75,19 +81,30 @@ const exists = await locator.IsExist();
- 类型:`List`
- 可能取值:
- 空列表:未找到元素
- - 包含一个或多个 `Region` 对象的列表:找到的元素
+ - 包含一个 `Region` 对象的列表:找到的元素(模板匹配)
+ - 包含多个 `Region` 对象的列表:找到的所有元素(OCR)
**使用场景**
- 直接查找屏幕上的元素,不进行等待
- 作为其他方法的基础,被内部调用
-- 不建议外部直接调用,应使用更高层次的方法
+- 建议使用更高层次的方法(如 `waitFor`、`click` 等)
**JavaScript 调用示例**
```javascript
-const regions = await bvLocator.FindAll();
-if (regions.count > 0) {
- log.info('找到元素:{0}个', regions.count);
+// 通过 BvPage 创建定位器
+const page = new BvPage();
+const locator = page.Locator(
+ RecognitionObject.TemplateMatch(
+ file.ReadImageMatSync("assets/paimon_menu.png")
+ )
+);
+
+const regions = locator.findAll();
+if (regions.Count > 0) {
+ log.info('找到元素:{0}个', regions.Count);
+ // 可以点击找到的元素
+ regions.first().click();
} else {
log.info('未找到元素');
}
@@ -143,12 +160,21 @@ public List FindAll()
**使用场景**
- 快速检查元素是否存在,不需要获取具体位置信息
+- 用于条件判断,根据元素是否存在决定后续操作
**JavaScript 调用示例**
```javascript
+// 通过 BvPage 创建定位器
+const page = new BvPage();
+const locator = page.Locator(
+ RecognitionObject.TemplateMatch(
+ file.ReadImageMatSync("assets/paimon_menu.png")
+ )
+);
+
// 检查元素是否存在
-const exists = await bvLocator.IsExist();
+const exists = locator.isExist();
if (exists) {
log.info('元素存在');
} else {
@@ -168,9 +194,9 @@ public bool IsExist()
-## 等待方法
+## 等待元素出现或消失
-### WaitFor
+### WaitFor - 等待元素出现
**参数说明**
| 参数 | 类型 | 必填 | 描述 |
@@ -184,18 +210,22 @@ public bool IsExist()
- 抛出 `TimeoutException`:超时未找到元素
**使用场景**
-- 需要等待界面元素加载完成后再进行操作
+- 需要等待元素加载完成
**JavaScript 调用示例**
```javascript
-// 等待元素出现,最多等待5秒
-try {
- const regions = await bvLocator.WaitFor(5000);
- log.info('元素已出现:{0}个', regions.count);
-} catch (error) {
- log.error('等待超时:{0}', error.message);
-}
+// 通过 BvPage 创建定位器
+const page = new BvPage();
+const locator = page.Locator(
+ RecognitionObject.TemplateMatch(
+ file.ReadImageMatSync("assets/paimon_menu.png")
+ )
+);
+
+const regions = await locator.waitFor(5000);
+log.info('元素已出现:{0}个', regions.Count);
+
```
@@ -229,7 +259,7 @@ public async Task> WaitFor(int? timeout = null)
-### TryWaitFor
+### TryWaitFor - 等待元素出现,不抛出异常
**参数说明**
| 参数 | 类型 | 必填 | 描述 |
@@ -249,10 +279,19 @@ public async Task> WaitFor(int? timeout = null)
**JavaScript 调用示例**
```javascript
-// 尝试等待元素出现,最多等待3秒
-const regions = await bvLocator.TryWaitFor(3000);
-if (regions.count > 0) {
- log.info('元素已出现:{0}个', regions.count);
+// 通过 BvPage 创建定位器
+const page = new BvPage();
+const locator = page.Locator(
+ RecognitionObject.TemplateMatch(
+ file.ReadImageMatSync("assets/paimon_menu.png")
+ )
+);
+
+// 尝试等待元素出现,最多等待 3 秒
+const regions = await locator.tryWaitFor(3000);
+if (regions.Count > 0) {
+ log.info('元素已出现:{0}个', regions.Count);
+ regions.first().click();
} else {
log.info('元素未出现,但没有抛出异常');
}
@@ -277,7 +316,7 @@ public async Task> TryWaitFor(int? timeout = null)
-### WaitForDisappear
+### WaitForDisappear - 等待元素消失
**参数说明**
| 参数 | 类型 | 必填 | 描述 |
@@ -292,17 +331,28 @@ public async Task> TryWaitFor(int? timeout = null)
**使用场景**
- 需要等待界面元素消失后再进行操作
-- 适用于异步操作场景
+- 适用于关闭弹窗、等待加载界面消失等场景
**JavaScript 调用示例**
```javascript
-// 等待元素消失,最多等待5秒
+// 通过 BvPage 创建定位器
+const page = new BvPage();
+const locator = page.Locator(
+ RecognitionObject.TemplateMatch(
+ file.ReadImageMatSync("assets/loading_screen.png")
+ )
+);
+
+// 注意:此方法在超时会抛出 TimeoutException 异常,请使用 try-catch 捕获
+// 等待加载界面消失,最多等待 10 秒
try {
- await bvLocator.WaitForDisappear(5000);
- log.info('元素已消失');
+ await locator.waitForDisappear(10000);
+ log.info('加载界面已消失,可以继续操作');
+ // 继续执行后续操作
} catch (error) {
- log.error('等待超时:{0}', error.message);
+ log.error('等待超时:{0}', error.Message);
+ // 超时后的处理
}
```
@@ -336,7 +386,7 @@ public async Task WaitForDisappear(int? timeout = null)
-### TryWaitForDisappear
+### TryWaitForDisappear - 等待元素消失,不抛出异常
**参数说明**
| 参数 | 类型 | 必填 | 描述 |
@@ -354,9 +404,19 @@ public async Task WaitForDisappear(int? timeout = null)
**JavaScript 调用示例**
```javascript
-// 尝试等待元素消失,最多等待3秒
-await bvLocator.TryWaitForDisappear(3000);
-log.info('尝试等待元素消失完成');
+// 通过 BvPage 创建定位器
+const page = new BvPage();
+const locator = page.Locator(
+ RecognitionObject.TemplateMatch(
+ file.ReadImageMatSync("assets/popup.png")
+ )
+);
+
+// 尝试等待弹窗消失,最多等待 3 秒
+await locator.tryWaitForDisappear(3000);
+log.info('尝试等待弹窗消失完成');
+// 无论弹窗是否消失,都继续执行后续操作
+await page.getByText("确认").click();
```
@@ -378,9 +438,9 @@ public async Task TryWaitForDisappear(int? timeout = null)
-## 交互方法
+## 以元素出现或消失为条件的点击
-### Click
+### Click - 等待元素出现并点击
**参数说明**
| 参数 | 类型 | 必填 | 描述 |
@@ -400,12 +460,23 @@ public async Task TryWaitForDisappear(int? timeout = null)
**JavaScript 调用示例**
```javascript
-// 等待元素出现并点击,最多等待5秒
+// 通过 BvPage 创建定位器
+const page = new BvPage();
+const locator = page.Locator(
+ RecognitionObject.TemplateMatch(
+ file.ReadImageMatSync("assets/confirm_button.png")
+ )
+);
+
+// 等待元素出现并点击,最多等待 5 秒
try {
- const region = await bvLocator.Click(5000);
+ const region = await locator.click(5000);
log.info('点击成功:{0}', region);
+ // 等待点击后的响应,如等待新界面出现
+ await page.wait(500);
} catch (error) {
- log.error('操作失败:{0}', error.message);
+ log.error('操作失败:{0}', error.Message);
+ // 错误处理
}
```
@@ -421,7 +492,7 @@ public async Task Click(int? timeout = null)
-### ClickUntilDisappears
+### ClickUntilDisappears - 元素存在时持续点击,直到元素消失
**参数说明**
| 参数 | 类型 | 必填 | 描述 |
@@ -436,17 +507,28 @@ public async Task Click(int? timeout = null)
**使用场景**
- 需要点击元素并确认操作生效(元素消失)的场景
-- 适用于需要确认操作结果的场景
+- 适用于关闭弹窗、提交操作等需要确认结果的操作
**JavaScript 调用示例**
```javascript
+// 通过 BvPage 创建定位器
+const page = new BvPage();
+const locator = page.Locator(
+ RecognitionObject.TemplateMatch(
+ file.ReadImageMatSync("assets/close_button.png")
+ )
+);
+
// 等待元素出现并点击,直到元素消失
try {
- const region = await bvLocator.ClickUntilDisappears(10000);
+ const region = await locator.clickUntilDisappears(10000);
log.info('点击成功并确认元素消失:{0}', region);
+ // 继续执行后续操作
+ await page.wait(500);
} catch (error) {
- log.error('操作失败:{0}', error.message);
+ log.error('操作失败:{0}', error.Message);
+ // 错误处理,可能需要重试
}
```
@@ -465,7 +547,7 @@ public async Task ClickUntilDisappears(int? timeout = null)
-### DoubleClick
+### DoubleClick - 等待元素出现并双击
**参数说明**
| 参数 | 类型 | 必填 | 描述 |
@@ -485,12 +567,23 @@ public async Task ClickUntilDisappears(int? timeout = null)
**JavaScript 调用示例**
```javascript
-// 等待元素出现并双击,最多等待5秒
+// 通过 BvPage 创建定位器
+const page = new BvPage();
+const locator = page.Locator(
+ RecognitionObject.TemplateMatch(
+ file.ReadImageMatSync("assets/item_icon.png")
+ )
+);
+
+// 等待元素出现并双击,最多等待 5 秒
try {
- const region = await bvLocator.DoubleClick(5000);
+ const region = await locator.doubleClick(5000);
log.info('双击成功:{0}', region);
+ // 等待双击后的响应
+ await page.wait(1000);
} catch (error) {
- log.error('操作失败:{0}', error.message);
+ log.error('操作失败:{0}', error.Message);
+ // 错误处理
}
```
@@ -509,7 +602,7 @@ public async Task DoubleClick(int? timeout = null)
## 配置方法
-### WithRoi
+### WithRoi - 重设感兴趣区域 (ROI)
**参数说明**
| 参数 | 类型 | 必填 | 描述 |
@@ -523,65 +616,34 @@ public async Task DoubleClick(int? timeout = null)
**使用场景**
- 已知元素大致位置,需要缩小搜索范围
- 提高识别速度和准确性
+- 避免误识别其他区域的相似元素
**JavaScript 调用示例**
```javascript
-// 设置感兴趣区域 (ROI)
-const rect = new OpenCvSharp.OpenCvSharp.Rect(0,0,1920,1080);
-const updatedLocator = bvLocator.WithRoi(rect);
-// 现在可以使用 updatedLocator 进行定位
-const regions = await updatedLocator.FindAll();
-```
-
-
-查看C#实现
+// 通过 BvPage 创建定位器
+const page = new BvPage();
+const locator = page.Locator(
+ RecognitionObject.TemplateMatch(
+ file.ReadImageMatSync("assets/menu_button.png")
+ )
+);
-```csharp
-public BvLocator WithRoi(Rect rect)
-{
- RecognitionObject.RegionOfInterest = rect;
- return this;
+// 设置感兴趣区域 (ROI),在屏幕右下角搜索
+const rect = new OpenCvSharp.OpenCvSharp.Rect(1400, 800, 500, 280);
+const regions = locator.withRoi(rect).waitFor(5000);
+if (regions.Count > 0) {
+ log.info('在指定区域找到元素');
+ regions.first().click();
}
```
-
-
-### WithRoi (函数版本)
-
-**参数说明**
-| 参数 | 类型 | 必填 | 描述 |
-|------|------|------|------|
-| deltaFunc | Func | 是 | 基于基础矩形计算 ROI 的函数 |
-
-**返回值**
-- 类型:`BvLocator`
-- 返回当前 `BvLocator` 实例,支持链式调用
-
-**使用场景**
-- 需要动态计算 ROI
-
-**JavaScript 调用示例**
-
-```javascript
-// 使用函数设置感兴趣区域
-const updatedLocator = bvLocator.WithRoi(baseRect => {
- // 仅作为演示,四边向内缩10像素
- baseRect.Inflate(-10, -10);
- return baseRect
-});
-// 现在可以使用 updatedLocator 进行定位
-const regions = await updatedLocator.FindAll();
-```
-
查看C#实现
```csharp
-public BvLocator WithRoi(Func deltaFunc)
+public BvLocator WithRoi(Rect rect)
{
- var captureAreaRect = TaskContext.Instance().SystemInfo.ScaleMax1080PCaptureRect;
- var rect = deltaFunc(captureAreaRect);
RecognitionObject.RegionOfInterest = rect;
return this;
}
@@ -589,7 +651,7 @@ public BvLocator WithRoi(Func deltaFunc)
-### WithRetryAction
+### WithRetryAction - 重试时的操作
**参数说明**
| 参数 | 类型 | 必填 | 描述 |
@@ -603,17 +665,29 @@ public BvLocator WithRoi(Func deltaFunc)
**使用场景**
- 需要在重试过程中执行额外操作,如滚动屏幕、刷新界面等
- 提高元素定位的成功率
+- 记录重试过程中的日志信息
**JavaScript 调用示例**
```javascript
-// 设置重试操作
-const updatedLocator = bvLocator.WithRetryAction(regions => {
- log.info('重试中,当前找到元素数:{0}', regions.count);
+// 通过 BvPage 创建定位器
+const page = new BvPage();
+const locator = page.Locator(
+ RecognitionObject.TemplateMatch(
+ file.ReadImageMatSync("assets/list_item.png")
+ )
+);
+
+// 设置重试操作,在每次重试时记录日志
+const updatedLocator = locator.withRetryAction(regions => {
+ log.info('重试中,当前找到元素数:{0}', regions.Count);
// 可以在这里执行额外的操作,如滚动屏幕等
});
// 现在使用 updatedLocator 进行等待
-const regions = await updatedLocator.WaitFor(5000);
+const regions = await updatedLocator.waitFor(5000);
+if (regions.Count > 0) {
+ log.info('找到元素');
+}
```
diff --git a/src/dev/js/BvPage.md b/src/dev/js/BvPage.md
index 548d7c8..591967b 100644
--- a/src/dev/js/BvPage.md
+++ b/src/dev/js/BvPage.md
@@ -7,36 +7,10 @@ date: 2026-02-24
# BvPage 类 API 文档
-# 类概述
-
-`BvPage` 基于 BvLocator 进行了更高层次的封装,提供了截图、等待、元素定位、OCR识别和鼠标点击等功能。
## 初始化方法
-### 构造函数
-
-查看C#实现
-
-```csharp
-public BvPage(CancellationToken cancellationToken = default)
-{
- _cancellationToken = cancellationToken;
-}
-```
-
-
-
-**JavaScript 调用示例**
-- 直接通过构造函数创建实例
-```javascript
-// 直接创建 BvPage 实例
-const page = new BvPage();
-
-// 现在可以使用 page 进行页面操作
-const regions = await page.GetByText("确认").FindAll();
-
-```
**参数说明**
@@ -47,20 +21,31 @@ const regions = await page.GetByText("确认").FindAll();
**返回值**
- 返回 `BvPage` 实例
+**JavaScript 调用示例**
-## 属性
+```javascript
+// 直接创建 BvPage 实例(使用默认取消令牌)
+const page = new BvPage();
+
+// 后续操作
+const regions = await page.getByText("确认").findAll();
+```
+
+
+查看C#实现
-| 属性 | 类型 | 描述 |
-|------|------|------|
-| Keyboard | IKeyboardSimulator | 键盘模拟器,用于键盘操作 |
-| Mouse | IMouseSimulator | 鼠标模拟器,用于鼠标操作 |
-| DefaultTimeout | int | 默认超时时间,单位为毫秒,默认值为 10000 |
-| DefaultRetryInterval | int | 默认重试间隔,单位为毫秒,默认值为 1000 |
+```csharp
+public BvPage(CancellationToken cancellationToken = default)
+{
+ _cancellationToken = cancellationToken;
+}
+```
+
## 基础方法
-### Screenshot
+### Screenshot - 截屏
**参数说明**
- 无参数
@@ -76,10 +61,21 @@ const regions = await page.GetByText("确认").FindAll();
**JavaScript 调用示例**
```javascript
-// 截图
-const screen = page.Screenshot();
-// screen 是一个 ImageRegion 对象,可以进行进一步处理
-log.info('截图成功');
+// 获取截图
+const screen = page.screenshot();
+
+// 可以在截图上进行识别操作,一般不这么用
+const ro = RecognitionObject.TemplateMatch(
+ file.ReadImageMatSync("assets/button.png")
+);
+const region = screen.Find(ro);
+
+if (region.IsExist()) {
+ log.info('在截图中找到元素');
+ region.click();
+}
+
+log.info('截图完成');
```
@@ -94,7 +90,7 @@ public ImageRegion Screenshot()
-### Wait
+### Wait - 等待
**参数说明**
| 参数 | 类型 | 必填 | 描述 |
@@ -107,7 +103,7 @@ public ImageRegion Screenshot()
**使用场景**
- 等待一段时间后继续执行
-- 用于需要延迟的场景
+- 用于需要延迟的场景,如等待界面加载
**JavaScript 调用示例**
@@ -131,9 +127,9 @@ public async Task Wait(int milliseconds)
-## 定位方法
+## 初始化 BvLocator 方法
-### Locator (RecognitionObject)
+### Locator - 识别对象版
**参数说明**
| 参数 | 类型 | 必填 | 描述 |
@@ -158,6 +154,13 @@ const ro = RecognitionObject.TemplateMatch(
// 通过 RecognitionObject 创建定位器
const locator = page.Locator(ro);
+
+// 使用定位器进行操作
+const regions = await locator.waitFor(5000);
+if (regions.Count > 0) {
+ log.info('找到元素');
+ regions.first().click();
+}
```
@@ -172,6 +175,9 @@ public BvLocator Locator(RecognitionObject ro)
+### Locator - OCR 版
+ - 与 `GetByText(string text, Rect rect)` 等价
+
### GetByText
**参数说明**
@@ -191,9 +197,23 @@ public BvLocator Locator(RecognitionObject ro)
**JavaScript 调用示例**
```javascript
-// 通过文本创建定位器(简写方式)
-const locator = page.GetByText("确认");
-const regions = await locator.FindAll();
+// 通过文本创建定位器
+const locator = page.getByText("确认");
+
+// 查找并点击
+const regions = await locator.waitFor(5000);
+if (regions.Count > 0) {
+ log.info('找到文字:确认');
+ regions.first().click();
+}
+
+// 链式调用:一行代码完成查找和点击
+await page.getByText("确认").click(5000);
+
+// 指定区域查找
+const rect = new OpenCvSharp.OpenCvSharp.Rect(0, 800, 1920, 280);
+const bottomTexts = page.getByText("开始", rect);
+const bottomRegions = await bottomTexts.tryWaitFor(3000);
```
@@ -220,54 +240,10 @@ public BvLocator Locator(string text, Rect rect = default)
-
-
-### GetByImage
-**BvImage 类目前不太适合JS使用, 建议使用 `Locator(RecognitionObject ro)` 方法**
-
-**参数说明**
-| 参数 | 类型 | 必填 | 描述 |
-|------|------|------|------|
-| image | BvImage | 是 | 要定位的图像对象 |
-
-**返回值**
-- 类型:`BvLocator`
-- 返回定位器实例,用于后续操作
-
-**使用场景**
-- 通过图像进行元素定位的简写方式
-- 与 `Locator(BvImage image)` 等价
-
-
-**JavaScript 调用示例**
-
-```javascript
-// 通过图像创建定位器(简写方式)
-const locator = page.GetByImage(BvImage.FromName("confirm_button"));
-const exists = await locator.IsExist();
-```
-
-
-查看C#实现
-
-```csharp
-public BvLocator GetByImage(BvImage image)
-{
- return Locator(image);
-}
-```
- - `GetByImage`是`Locator(BvImage image)`方法的语义化包装
-
-```csharp
-public BvLocator Locator(BvImage image)
-{
- return new BvLocator(image.ToRecognitionObject(), _cancellationToken);
-}
-```
-## OCR 方法
+## 其他
### Ocr
@@ -288,11 +264,19 @@ public BvLocator Locator(BvImage image)
```javascript
// 对整个屏幕进行 OCR 识别
-const regions = page.Ocr();
-log.info('识别到文本数:', regions.count);
+const regions = page.ocr();
+log.info('识别到文本数:{0}', regions.Count);
+
+// 遍历识别结果
+for (let i = 0; i < regions.Count; i++) {
+ const region = regions[i];
+ log.info('文本:{0}, 位置:({1}, {2})', region.Text, region.X, region.Y);
+}
// 对指定区域进行 OCR 识别
-const regions2 = page.Ocr(new OpenCvSharp.OpenCvSharp.Rect(0, 0, 500, 500));
+const rect = new OpenCvSharp.OpenCvSharp.Rect(0, 0, 500, 500);
+const topLeftRegions = page.ocr(rect);
+log.info('左上角识别到文本数:{0}', topLeftRegions.Count);
```
@@ -307,126 +291,14 @@ public List Ocr(Rect rect = default)
-### OcrMatch
-
-**参数说明**
-| 参数 | 类型 | 必填 | 描述 |
-|------|------|------|------|
-| target | string | 是 | 目标字符串 |
-| rect | Rect | 否 | 感兴趣区域,默认为全屏 |
-| threshold | double? | 否 | 匹配阈值 (0~1),null 使用配置中的默认阈值 |
-
-**返回值**
-- 类型:`bool`
-- 可能取值:
- - `true`:匹配成功
- - `false`:匹配失败
-
-**使用场景**
-- 判断截图中是否包含目标文字
-- 使用模糊匹配进行文本识别
-
-**JavaScript 调用示例**
-
-```javascript
-// 判断屏幕上是否包含"确认"文字
-const matched = page.OcrMatch("确认");
-log.info('匹配结果:', matched);
-
-// 指定区域和阈值
-const matched2 = page.OcrMatch("确认", new OpenCvSharp.OpenCvSharp.Rect(0, 0, 500, 500), 0.8);
-```
-
-
-查看C#实现
-
-```csharp
-public bool OcrMatch(string target, Rect rect = default, double? threshold = null)
-{
- var matchService = OcrFactory.PaddleMatch;
- var actualThreshold = threshold
- ?? TaskContext.Instance().Config.OtherConfig.OcrConfig.OcrMatchDefaultThreshold;
-
- var screen = TaskControl.CaptureToRectArea();
- try
- {
- var roi = rect == default ? null : screen.DeriveCrop(rect);
- try
- {
- var score = matchService.OcrMatch((roi ?? screen).SrcMat, target);
- return score >= actualThreshold;
- }
- finally
- {
- roi?.Dispose();
- }
- }
- finally
- {
- screen.Dispose();
- }
-}
-```
-
-
-
-### WaitForOcrMatch
-
-**参数说明**
-| 参数 | 类型 | 必填 | 描述 |
-|------|------|------|------|
-| target | string | 是 | 目标字符串 |
-| rect | Rect | 否 | 感兴趣区域,默认为全屏 |
-| threshold | double? | 否 | 匹配阈值 (0~1),null 使用配置中的默认阈值 |
-| timeout | int? | 否 | 超时时间(毫秒),null 使用 DefaultTimeout |
-
-**返回值**
-- 类型:`Task`
-- 可能取值:
- - `true`:在超时前匹配成功
- - `false`:超时未匹配
-
-**使用场景**
-- 等待目标文字出现
-- 重复截图并使用模糊匹配
-
-**JavaScript 调用示例**
-
-```javascript
-// 等待"确认"文字出现,最多等待10秒
-const matched = await page.WaitForOcrMatch("确认", default, default, 10000);
-log.info('等待结果:', matched);
-
-// 简化调用
-const matched2 = await page.WaitForOcrMatch("确认");
-```
-
-
-查看C#实现
-
-```csharp
-public async Task WaitForOcrMatch(string target, Rect rect = default, double? threshold = null, int? timeout = null)
-{
- var actualTimeout = timeout ?? DefaultTimeout;
- var retryCount = DefaultRetryInterval > 0 ? actualTimeout / DefaultRetryInterval : 1;
-
- return await NewRetry.WaitForAction(() => OcrMatch(target, rect, threshold),
- _cancellationToken, retryCount, DefaultRetryInterval);
-}
-```
-
-
-
-
-## 交互方法
### Click
**参数说明**
| 参数 | 类型 | 必填 | 描述 |
|------|------|------|------|
-| x | double | 是 | 1080P分辨率下的X坐标 |
-| y | double | 是 | 1080P分辨率下的Y坐标 |
+| x | double | 是 | 1080P 分辨率下的 X 坐标 |
+| y | double | 是 | 1080P 分辨率下的 Y 坐标 |
**返回值**
- 类型:`void`
@@ -440,7 +312,7 @@ public async Task WaitForOcrMatch(string target, Rect rect = default, doub
```javascript
// 点击坐标 (100, 200)
-page.Click(100, 200);
+page.click(100, 200);
log.info('点击完成');
```
@@ -455,63 +327,3 @@ public void Click(double x, double y)
```
-
-
-## 键盘鼠标操作
-
-### Keyboard
-
-**属性说明**
-- 类型:`IKeyboardSimulator`
-- 提供键盘模拟功能
-
-**使用场景**
-- 输入文本
-- 按下/释放按键
-- 组合键操作
-
-**JavaScript 调用示例**
-
-```javascript
-// 输入文本
-page.Keyboard.TextEntry("Hello World");
-
-// 按下单个按键
-page.Keyboard.KeyDown(65); // ASCII 码,A键
-page.Keyboard.KeyUp(65);
-
-// 组合键示例
-page.Keyboard.ModifiedKeyStroke(17, 65); // Ctrl+A
-```
-
-### Mouse
-
-**属性说明**
-- 类型:`IMouseSimulator`
-- 提供鼠标模拟功能
-
-**使用场景**
-- 鼠标移动
-- 鼠标点击
-- 鼠标拖拽
-
-**JavaScript 调用示例**
-
-```javascript
-// 移动鼠标
-page.Mouse.MoveMouseTo(100, 200);
-
-// 左键点击
-page.Mouse.LeftButtonClick();
-
-// 左键双击
-page.Mouse.LeftButtonDoubleClick();
-
-// 右键点击
-page.Mouse.RightButtonClick();
-
-// 拖拽
-page.Mouse.LeftButtonDown();
-page.Mouse.MoveMouseBy(0, 100);
-page.Mouse.LeftButtonUp();
-```
diff --git a/src/dev/js/rec.md b/src/dev/js/rec.md
index c57ccb5..654b620 100644
--- a/src/dev/js/rec.md
+++ b/src/dev/js/rec.md
@@ -441,8 +441,8 @@ OpenCV Mat 矩阵对象,用于图像处理。
const captureRegion = captureGameRegion();
// 进行图像处理
- const grayMat = captureRegion.SrcMat.CvtColor(OpenCvSharp.ColorConversionCodes.BGR2GRAY);
- const threshold = grayMat.Threshold(127, 255, OpenCvSharp.ThresholdTypes.Binary);
+ const grayMat = captureRegion.SrcMat.CvtColor(OpenCvSharp.OpenCvSharp.ColorConversionCodes.BGR2GRAY);
+ const threshold = grayMat.Threshold(127, 255, OpenCvSharp.OpenCvSharp.ThresholdTypes.Binary);
// 获取坐标
const position = genshin.getPositionFromMap();
@@ -495,8 +495,8 @@ OpenCV 图像处理库的 JavaScript 接口。
const captureRegion = captureGameRegion();
// 进行图像处理
- const grayMat = captureRegion.SrcMat.CvtColor(OpenCvSharp.ColorConversionCodes.BGR2GRAY);
- const threshold = grayMat.Threshold(127, 255, OpenCvSharp.ThresholdTypes.Binary);
+ const grayMat = captureRegion.SrcMat.CvtColor(OpenCvSharp.OpenCvSharp.ColorConversionCodes.BGR2GRAY);
+ const threshold = grayMat.Threshold(127, 255, OpenCvSharp.OpenCvSharp.ThresholdTypes.Binary);
// 模板匹配
const template = file.readImageMatSync("assets/template.png");