ms-vite-plugin 1.4.16 → 1.4.18
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/cli.js +6 -301
- package/dist/mcp/doc-tools.js +1 -119
- package/dist/mcp/docs-service.d.ts +1 -27
- package/dist/mcp/docs-service.js +0 -65
- package/dist/mcp/httpapi-docs-service.d.ts +4 -37
- package/dist/mcp/httpapi-docs-service.js +6 -83
- package/dist/mcp/httpapi-tools.d.ts +1 -1
- package/dist/mcp/httpapi-tools.js +7 -157
- package/dist/mcp/tool-utils.d.ts +0 -13
- package/dist/mcp/tool-utils.js +0 -21
- package/dist/mcp/types.d.ts +0 -13
- package/docs/AGENTS.md +24 -32
- package/docs/SKILL.md +26 -37
- package/docs/api/appleocr.md +46 -164
- package/docs/api/image.md +16 -84
- package/docs/api/media.md +6 -7
- package/docs/api/paddleocr.md +77 -123
- package/docs/api/yolo.md +52 -96
- package/docs/apicn/appleocr.md +47 -169
- package/docs/apicn/image.md +15 -81
- package/docs/apicn/media.md +6 -7
- package/docs/apicn/paddleocr.md +77 -130
- package/docs/apicn/yolo.md +52 -101
- package/docs/apipython/appleocr.md +45 -155
- package/docs/apipython/image.md +17 -77
- package/docs/apipython/media.md +7 -8
- package/docs/apipython/paddleocr.md +78 -104
- package/docs/apipython/yolo.md +36 -85
- package/docs/mcp-agent-description.md +32 -58
- package/package.json +1 -1
|
@@ -5,6 +5,8 @@ PaddleOCR 模块基于百度飞桨 PaddleOCR 技术,提供强大的光学字
|
|
|
5
5
|
## 功能概览
|
|
6
6
|
|
|
7
7
|
- **自动加载**: 识别和查找方法会自动加载所需模型,无需先手动加载
|
|
8
|
+
- **模型选择**: 同一时间只保留一个 active 模型,默认 `ppocr-v6-tiny`,可通过模型 ID 手动加载 `ppocr-v6-small` 或 `ppocr-v5`
|
|
9
|
+
- **长边设置**: 可单独调整检测阶段最大边长,不需要重新加载已加载模型
|
|
8
10
|
- **多源识别**: 支持屏幕截图、图片文件、URL 等多种输入源
|
|
9
11
|
- **区域识别**: 支持指定区域的精确文字识别
|
|
10
12
|
- **结构化结果**: 提供详细的文本位置、置信度和方向信息
|
|
@@ -38,91 +40,81 @@ class OCRResult(TypedDict):
|
|
|
38
40
|
|
|
39
41
|
### 模型管理
|
|
40
42
|
|
|
41
|
-
#### `
|
|
43
|
+
#### `loadModel` - 按模型 ID 手动加载内置 PaddleOCR 模型
|
|
42
44
|
|
|
43
|
-
|
|
45
|
+
识别和查找方法默认自动加载 `ppocr-v6-tiny`。只有需要切换模型或指定 GPU 参数时才调用 `loadModel`。PaddleOCR 同一时间只保留一个 active 模型,`loadModel` 加载成功后会替换已加载模型;检测长边请使用 `setMaxSideLen` 单独设置。
|
|
44
46
|
|
|
45
47
|
```python
|
|
46
|
-
def
|
|
48
|
+
def loadModel(modelId: str, useGpu: bool = False) -> bool
|
|
47
49
|
```
|
|
48
50
|
|
|
49
51
|
**参数:**
|
|
50
52
|
|
|
51
|
-
| 参数名
|
|
52
|
-
|
|
|
53
|
-
| `
|
|
54
|
-
| `useGpu`
|
|
53
|
+
| 参数名 | 类型 | 是否必填 | 默认值 | 描述 |
|
|
54
|
+
| --------- | ---- | -------- | ------ | ------------------------------------------------------------ |
|
|
55
|
+
| `modelId` | str | 是 | | 内置模型 ID,支持 `"ppocr-v6-tiny"`、`"ppocr-v6-small"`、`"ppocr-v5"` |
|
|
56
|
+
| `useGpu` | bool | 否 | False | 是否启用 GPU 加速 |
|
|
55
57
|
|
|
56
58
|
**返回值:**
|
|
57
59
|
|
|
58
|
-
| 类型 | 描述
|
|
59
|
-
| ------ |
|
|
60
|
-
| `bool` |
|
|
60
|
+
| 类型 | 描述 |
|
|
61
|
+
| ------ | ---------------------------------------------------------- |
|
|
62
|
+
| `bool` | 加载成功或目标模型已加载返回 `True`,模型 ID 不支持或加载失败返回 `False` |
|
|
61
63
|
|
|
62
|
-
|
|
64
|
+
**示例:**
|
|
63
65
|
|
|
64
|
-
|
|
66
|
+
```python
|
|
67
|
+
from kuaijs import paddleocr
|
|
65
68
|
|
|
66
|
-
|
|
69
|
+
# 手动加载 PP-OCRv6 tiny 模型
|
|
70
|
+
paddleocr.loadModel("ppocr-v6-tiny", False)
|
|
71
|
+
|
|
72
|
+
# 手动加载 PP-OCRv6 small 模型
|
|
73
|
+
loaded = paddleocr.loadModel("ppocr-v6-small", False)
|
|
74
|
+
print(f"PP-OCRv6 small 加载结果: {loaded}")
|
|
75
|
+
|
|
76
|
+
# 手动切换到 PP-OCRv5 模型
|
|
77
|
+
paddleocr.loadModel("ppocr-v5", False)
|
|
78
|
+
```
|
|
79
|
+
|
|
80
|
+
#### `setMaxSideLen` - 单独设置检测阶段输入最大边长
|
|
81
|
+
|
|
82
|
+
该方法只调整后续检测输入缩放,不会重新加载已加载的 PP-OCRv5/v6 模型。如果当前尚未加载模型,后续识别或查找触发默认 PP-OCRv6 tiny 自动加载时会沿用该设置。
|
|
67
83
|
|
|
68
84
|
```python
|
|
69
|
-
def
|
|
70
|
-
input: str,
|
|
71
|
-
x: int = 0,
|
|
72
|
-
y: int = 0,
|
|
73
|
-
ex: int = 0,
|
|
74
|
-
ey: int = 0,
|
|
75
|
-
confidenceThreshold: float = 0.6
|
|
76
|
-
) -> List[OCRResult]
|
|
85
|
+
def setMaxSideLen(maxSideLen: int = 640) -> bool
|
|
77
86
|
```
|
|
78
87
|
|
|
79
88
|
**参数:**
|
|
80
89
|
|
|
81
|
-
| 参数名
|
|
82
|
-
|
|
|
83
|
-
| `
|
|
84
|
-
| `x` | int | 否 | 0 | 识别区域左上角 x 坐标 |
|
|
85
|
-
| `y` | int | 否 | 0 | 识别区域左上角 y 坐标 |
|
|
86
|
-
| `ex` | int | 否 | 0 | 识别区域右下角 x 坐标 |
|
|
87
|
-
| `ey` | int | 否 | 0 | 识别区域右下角 y 坐标 |
|
|
88
|
-
| `confidenceThreshold` | float | 否 | 0.6 | 置信度阈值,默认值为 0.6 |
|
|
90
|
+
| 参数名 | 类型 | 是否必填 | 默认值 | 描述 |
|
|
91
|
+
| ------------ | ---- | -------- | ------ | ----------------------------------------- |
|
|
92
|
+
| `maxSideLen` | int | 否 | 640 | 输入图像的最大边长;传 0 或负数时使用 640 |
|
|
89
93
|
|
|
90
94
|
**返回值:**
|
|
91
95
|
|
|
92
|
-
| 类型
|
|
93
|
-
|
|
|
94
|
-
| `
|
|
96
|
+
| 类型 | 描述 |
|
|
97
|
+
| ------ | -------------------- |
|
|
98
|
+
| `bool` | 设置成功返回 `True` |
|
|
95
99
|
|
|
96
100
|
**示例:**
|
|
97
101
|
|
|
98
102
|
```python
|
|
99
103
|
from kuaijs import paddleocr
|
|
100
104
|
|
|
101
|
-
#
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
# 识别屏幕指定区域
|
|
108
|
-
region_results = paddleocr.recognize("screen", 100, 100, 500, 300)
|
|
109
|
-
if region_results:
|
|
110
|
-
top = region_results[0]
|
|
111
|
-
print(f"指定区域文本: {top.text}, 中心: ({top.centerX}, {top.centerY})")
|
|
112
|
-
|
|
113
|
-
# 识别图片文件
|
|
114
|
-
image_results = paddleocr.recognize("/path/to/image.png", 0, 0, 800, 600)
|
|
115
|
-
for r in image_results:
|
|
116
|
-
print(f"图片文字: {r.text}")
|
|
117
|
-
|
|
118
|
-
# 识别网络图片
|
|
119
|
-
url_results = paddleocr.recognize("https://example.com/image.jpg", 0, 0, 1000, 800)
|
|
120
|
-
print(f"网络图片识别结果数量: {len(url_results)}")
|
|
105
|
+
# 只更新检测长边,不重新加载模型
|
|
106
|
+
paddleocr.setMaxSideLen(960)
|
|
107
|
+
|
|
108
|
+
# 后续识别会使用新的检测长边
|
|
109
|
+
results = paddleocr.recognizeAbs("screen", 0, 0, 0, 0)
|
|
110
|
+
print(f"识别数量: {len(results)}")
|
|
121
111
|
```
|
|
122
112
|
|
|
113
|
+
### 文字识别
|
|
114
|
+
|
|
123
115
|
#### `recognizeAbs` - 执行 OCR 识别,并将结果坐标映射为原图/全屏绝对坐标
|
|
124
116
|
|
|
125
|
-
|
|
117
|
+
传入裁剪区域时,返回坐标会映射回原图或全屏坐标,可直接用于点击。
|
|
126
118
|
|
|
127
119
|
```python
|
|
128
120
|
def recognizeAbs(
|
|
@@ -135,6 +127,23 @@ def recognizeAbs(
|
|
|
135
127
|
) -> List[OCRResult]
|
|
136
128
|
```
|
|
137
129
|
|
|
130
|
+
**参数:**
|
|
131
|
+
|
|
132
|
+
| 参数名 | 类型 | 是否必填 | 默认值 | 描述 |
|
|
133
|
+
| --------------------- | ----- | -------- | ------ | ----------------------------------------------------------- |
|
|
134
|
+
| `input` | str | 是 | | 输入源,支持 imageId、URL 字符串、文件路径或 `"screen"` |
|
|
135
|
+
| `x` | int | 否 | 0 | 裁剪区域左上角 x 坐标;全屏识别传 0 |
|
|
136
|
+
| `y` | int | 否 | 0 | 裁剪区域左上角 y 坐标;全屏识别传 0 |
|
|
137
|
+
| `ex` | int | 否 | 0 | 裁剪区域右下角 x 坐标;全屏识别传 0 |
|
|
138
|
+
| `ey` | int | 否 | 0 | 裁剪区域右下角 y 坐标;全屏识别传 0 |
|
|
139
|
+
| `confidenceThreshold` | float | 否 | 0.6 | 置信度阈值,低于该值的识别结果会被过滤 |
|
|
140
|
+
|
|
141
|
+
**返回值:**
|
|
142
|
+
|
|
143
|
+
| 类型 | 描述 |
|
|
144
|
+
| ----------------- | ------------------------------------------------ |
|
|
145
|
+
| `List[OCRResult]` | 识别结果数组,坐标为原图或全屏绝对坐标 |
|
|
146
|
+
|
|
138
147
|
**示例:**
|
|
139
148
|
|
|
140
149
|
```python
|
|
@@ -143,12 +152,12 @@ if abs_results:
|
|
|
143
152
|
print(f"绝对坐标中心点: ({abs_results[0].centerX}, {abs_results[0].centerY})")
|
|
144
153
|
```
|
|
145
154
|
|
|
146
|
-
#### `
|
|
155
|
+
#### `findTextAbs` - 查找目标文本,并将结果坐标映射为原图/全屏绝对坐标
|
|
147
156
|
|
|
148
|
-
|
|
157
|
+
传入裁剪区域时,返回坐标会映射回原图或全屏坐标,可直接用于点击。
|
|
149
158
|
|
|
150
159
|
```python
|
|
151
|
-
def
|
|
160
|
+
def findTextAbs(
|
|
152
161
|
input: str,
|
|
153
162
|
targetTexts: List[str],
|
|
154
163
|
x: int = 0,
|
|
@@ -162,57 +171,22 @@ def findText(
|
|
|
162
171
|
|
|
163
172
|
**参数:**
|
|
164
173
|
|
|
165
|
-
| 参数名 | 类型 | 是否必填 | 默认值 | 描述
|
|
166
|
-
| --------------------- | --------- | -------- | ------ |
|
|
167
|
-
| `input` | str | 是 |
|
|
168
|
-
| `targetTexts` | List[str] | 是 |
|
|
169
|
-
| `x` | int | 否 | 0 |
|
|
170
|
-
| `y` | int | 否 | 0 |
|
|
171
|
-
| `ex` | int | 否 | 0 |
|
|
172
|
-
| `ey` | int | 否 | 0 |
|
|
173
|
-
| `confidenceThreshold` | float | 否 | 0.6 |
|
|
174
|
-
| `exactMatch` | bool | 否 | False | 是否完整匹配;`False` 表示包含匹配,`True`
|
|
174
|
+
| 参数名 | 类型 | 是否必填 | 默认值 | 描述 |
|
|
175
|
+
| --------------------- | --------- | -------- | ------ | ------------------------------------------------------------------------ |
|
|
176
|
+
| `input` | str | 是 | | 输入源,支持 imageId、URL 字符串、文件路径或 `"screen"` |
|
|
177
|
+
| `targetTexts` | List[str] | 是 | | 目标文本数组,例如 `["你好", "确定"]` |
|
|
178
|
+
| `x` | int | 否 | 0 | 裁剪区域左上角 x 坐标;全屏识别传 0 |
|
|
179
|
+
| `y` | int | 否 | 0 | 裁剪区域左上角 y 坐标;全屏识别传 0 |
|
|
180
|
+
| `ex` | int | 否 | 0 | 裁剪区域右下角 x 坐标;全屏识别传 0 |
|
|
181
|
+
| `ey` | int | 否 | 0 | 裁剪区域右下角 y 坐标;全屏识别传 0 |
|
|
182
|
+
| `confidenceThreshold` | float | 否 | 0.6 | 置信度阈值,低于该值的识别结果会被过滤 |
|
|
183
|
+
| `exactMatch` | bool | 否 | False | 是否完整匹配;`False` 表示包含匹配,`True` 要求整条 OCR 文本等于目标文本 |
|
|
175
184
|
|
|
176
185
|
**返回值:**
|
|
177
186
|
|
|
178
|
-
| 类型 | 描述
|
|
179
|
-
| ----------------- |
|
|
180
|
-
| `List[OCRResult]` |
|
|
181
|
-
|
|
182
|
-
**示例:**
|
|
183
|
-
|
|
184
|
-
```python
|
|
185
|
-
from kuaijs import paddleocr
|
|
186
|
-
|
|
187
|
-
# 在整个屏幕中查找目标文本
|
|
188
|
-
hit_results = paddleocr.findText("screen", ["登录", "确定"], 0, 0, 0, 0, 0.6, False)
|
|
189
|
-
if hit_results:
|
|
190
|
-
for i, r in enumerate(hit_results, 1):
|
|
191
|
-
print(f"命中{i}: {r.text}, 中心点=({r.centerX}, {r.centerY}), 置信度={r.confidence}")
|
|
192
|
-
else:
|
|
193
|
-
print("未命中目标文本")
|
|
194
|
-
|
|
195
|
-
# 在指定区域查找目标文本
|
|
196
|
-
region_hits = paddleocr.findText("screen", ["下一步"], 100, 100, 500, 400)
|
|
197
|
-
print(f"区域命中数量: {len(region_hits)}")
|
|
198
|
-
```
|
|
199
|
-
|
|
200
|
-
#### `findTextAbs` - 查找目标文本,并将结果坐标映射为原图/全屏绝对坐标
|
|
201
|
-
|
|
202
|
-
参数与 `findText` 相同。传入裁剪区域时,返回坐标可直接用于全屏点击。
|
|
203
|
-
|
|
204
|
-
```python
|
|
205
|
-
def findTextAbs(
|
|
206
|
-
input: str,
|
|
207
|
-
targetTexts: List[str],
|
|
208
|
-
x: int = 0,
|
|
209
|
-
y: int = 0,
|
|
210
|
-
ex: int = 0,
|
|
211
|
-
ey: int = 0,
|
|
212
|
-
confidenceThreshold: float = 0.6,
|
|
213
|
-
exactMatch: bool = False
|
|
214
|
-
) -> List[OCRResult]
|
|
215
|
-
```
|
|
187
|
+
| 类型 | 描述 |
|
|
188
|
+
| ----------------- | ---------------------------------------------------------- |
|
|
189
|
+
| `List[OCRResult]` | 匹配到的子串结果数组,坐标为原图或全屏绝对坐标 |
|
|
216
190
|
|
|
217
191
|
**示例:**
|
|
218
192
|
|
package/docs/apipython/yolo.md
CHANGED
|
@@ -99,59 +99,20 @@ model_id = yolo.load(
|
|
|
99
99
|
)
|
|
100
100
|
```
|
|
101
101
|
|
|
102
|
-
#### loadV11 - 加载 YOLOv11 模型(兼容 yolov8)
|
|
103
|
-
|
|
104
|
-
加载模型是使用目标检测功能的前提。
|
|
105
|
-
|
|
106
|
-
```python
|
|
107
|
-
def loadV11(paramPath: str, binPath: str, nc: int = 0, useGpu: bool = False) -> Optional[str]
|
|
108
|
-
```
|
|
109
|
-
|
|
110
|
-
**参数:**
|
|
111
|
-
|
|
112
|
-
| 参数名 | 类型 | 是否必填 | 默认值 | 描述 |
|
|
113
|
-
| ----------- | ---- | -------- | ------ | ------------------------------------------- |
|
|
114
|
-
| `paramPath` | str | 是 | - | NCNN 模型的 param 文件绝对路径 |
|
|
115
|
-
| `binPath` | str | 是 | - | NCNN 模型的 bin 文件绝对路径 |
|
|
116
|
-
| `nc` | int | 否 | 0 | 模型的标签数量;传 `0` 或省略时根据模型输出自动推断,显式传入但不匹配时检测返回空列表 |
|
|
117
|
-
| `useGpu` | bool | 否 | False | 是否启用 GPU 加速 |
|
|
118
|
-
|
|
119
|
-
**返回值:**
|
|
120
|
-
|
|
121
|
-
| 类型 | 描述 |
|
|
122
|
-
| ------------- | ------------------------------------ |
|
|
123
|
-
| `str \| None` | 加载成功返回模型 ID,失败返回 `None` |
|
|
124
|
-
|
|
125
|
-
**示例:**
|
|
126
|
-
|
|
127
|
-
```python
|
|
128
|
-
from kuaijs import yolo
|
|
129
|
-
|
|
130
|
-
# 加载 YOLOv11 模型
|
|
131
|
-
# 模型放在res目录
|
|
132
|
-
model_id = yolo.loadV11(
|
|
133
|
-
"yolo11n_ncnn_model/model.ncnn.param",
|
|
134
|
-
"yolo11n_ncnn_model/model.ncnn.bin",
|
|
135
|
-
0, # 自动根据模型输出推断类别数量
|
|
136
|
-
False,
|
|
137
|
-
)
|
|
138
|
-
|
|
139
|
-
if model_id:
|
|
140
|
-
print(f"模型加载成功,ID: {model_id}")
|
|
141
|
-
else:
|
|
142
|
-
print("模型加载失败,请检查文件路径和格式")
|
|
143
|
-
```
|
|
144
|
-
|
|
145
102
|
### 目标检测
|
|
146
103
|
|
|
147
|
-
####
|
|
104
|
+
#### detectAbs - 对指定区域执行目标检测,并将结果坐标映射为原图/全屏绝对坐标
|
|
148
105
|
|
|
149
|
-
|
|
106
|
+
识别图像中的物体并返回检测结果。传入裁剪区域时,结果坐标会映射回原图或全屏坐标,可直接用于点击;全屏检测时 `x/y/ex/ey` 传 `0`。
|
|
150
107
|
|
|
151
108
|
```python
|
|
152
|
-
def
|
|
109
|
+
def detectAbs(
|
|
153
110
|
modelId: str,
|
|
154
111
|
img: str,
|
|
112
|
+
x: int = 0,
|
|
113
|
+
y: int = 0,
|
|
114
|
+
ex: int = 0,
|
|
115
|
+
ey: int = 0,
|
|
155
116
|
targetSize: int = 640,
|
|
156
117
|
threshold: float = 0.4,
|
|
157
118
|
nmsThreshold: float = 0.5
|
|
@@ -160,19 +121,23 @@ def detect(
|
|
|
160
121
|
|
|
161
122
|
**参数:**
|
|
162
123
|
|
|
163
|
-
| 参数名 | 类型 | 是否必填 | 默认值 | 描述
|
|
164
|
-
| -------------- | ----- | -------- | ------ |
|
|
165
|
-
| `modelId` | str | 是 |
|
|
166
|
-
| `img` | str | 是 |
|
|
167
|
-
| `
|
|
168
|
-
| `
|
|
169
|
-
| `
|
|
124
|
+
| 参数名 | 类型 | 是否必填 | 默认值 | 描述 |
|
|
125
|
+
| -------------- | ----- | -------- | ------ | ---------------------------------------------------------- |
|
|
126
|
+
| `modelId` | str | 是 | | 模型 ID,通过 `load` 获取 |
|
|
127
|
+
| `img` | str | 是 | | 输入源,支持 `"screen"`、图片文件路径、HTTP 图片地址或 imageId |
|
|
128
|
+
| `x` | int | 否 | 0 | 裁剪区域左上角 x 坐标;全屏检测传 0 |
|
|
129
|
+
| `y` | int | 否 | 0 | 裁剪区域左上角 y 坐标;全屏检测传 0 |
|
|
130
|
+
| `ex` | int | 否 | 0 | 裁剪区域右下角 x 坐标;全屏检测传 0 |
|
|
131
|
+
| `ey` | int | 否 | 0 | 裁剪区域右下角 y 坐标;全屏检测传 0 |
|
|
132
|
+
| `targetSize` | int | 否 | 640 | 模型推理输入边长,通常为 640(与模型训练时一致) |
|
|
133
|
+
| `threshold` | float | 否 | 0.4 | 置信度阈值,低于此值的检测结果会被过滤 |
|
|
134
|
+
| `nmsThreshold` | float | 否 | 0.5 | 非极大值抑制阈值,用于去除重叠检测框 |
|
|
170
135
|
|
|
171
136
|
**返回值:**
|
|
172
137
|
|
|
173
138
|
| 类型 | 描述 |
|
|
174
139
|
| ------------------ | ---------------------------------------------- |
|
|
175
|
-
| `List[YoloResult]` |
|
|
140
|
+
| `List[YoloResult]` | 检测结果数组,坐标为原图或全屏绝对坐标 |
|
|
176
141
|
|
|
177
142
|
**示例:**
|
|
178
143
|
|
|
@@ -180,15 +145,19 @@ def detect(
|
|
|
180
145
|
from kuaijs import yolo
|
|
181
146
|
|
|
182
147
|
# 首先加载模型
|
|
183
|
-
mid = yolo.
|
|
148
|
+
mid = yolo.load("yolo11n_ncnn_model/model.ncnn.param", "yolo11n_ncnn_model/model.ncnn.bin", 0, 11, False)
|
|
184
149
|
|
|
185
150
|
if not mid:
|
|
186
151
|
print("模型加载失败")
|
|
187
152
|
else:
|
|
188
153
|
# 检测当前屏幕
|
|
189
|
-
screen_results = yolo.
|
|
154
|
+
screen_results = yolo.detectAbs(
|
|
190
155
|
mid,
|
|
191
156
|
"screen", # 使用当前屏幕
|
|
157
|
+
0,
|
|
158
|
+
0,
|
|
159
|
+
0,
|
|
160
|
+
0,
|
|
192
161
|
640, # 标准检测尺寸
|
|
193
162
|
0.4, # 置信度阈值
|
|
194
163
|
0.5 # NMS 阈值
|
|
@@ -204,10 +173,14 @@ else:
|
|
|
204
173
|
print(f" 中心点: ({r.centerX}, {r.centerY})")
|
|
205
174
|
print(f" 尺寸: {r.width} x {r.height}")
|
|
206
175
|
|
|
207
|
-
#
|
|
208
|
-
image_results = yolo.
|
|
176
|
+
# 检测图片文件的指定区域
|
|
177
|
+
image_results = yolo.detectAbs(
|
|
209
178
|
mid,
|
|
210
179
|
"/path/to/test_image.jpg",
|
|
180
|
+
100,
|
|
181
|
+
100,
|
|
182
|
+
500,
|
|
183
|
+
400,
|
|
211
184
|
640,
|
|
212
185
|
0.3, # 降低置信度阈值以检测更多物体
|
|
213
186
|
0.5
|
|
@@ -221,9 +194,13 @@ else:
|
|
|
221
194
|
print("图片中未检测到任何物体")
|
|
222
195
|
|
|
223
196
|
# 检测网络图片
|
|
224
|
-
url_results = yolo.
|
|
197
|
+
url_results = yolo.detectAbs(
|
|
225
198
|
mid,
|
|
226
199
|
"https://example.com/test_image.jpg",
|
|
200
|
+
0,
|
|
201
|
+
0,
|
|
202
|
+
0,
|
|
203
|
+
0,
|
|
227
204
|
640,
|
|
228
205
|
0.5, # 提高置信度阈值以获得更可靠的结果
|
|
229
206
|
0.4
|
|
@@ -231,32 +208,6 @@ else:
|
|
|
231
208
|
print(f"网络图片检测结果: {len(url_results)} 个物体")
|
|
232
209
|
```
|
|
233
210
|
|
|
234
|
-
#### detectAbs - 对指定区域执行目标检测,并将结果坐标映射为原图/全屏绝对坐标
|
|
235
|
-
|
|
236
|
-
```python
|
|
237
|
-
def detectAbs(
|
|
238
|
-
modelId: str,
|
|
239
|
-
img: str,
|
|
240
|
-
x: int = 0,
|
|
241
|
-
y: int = 0,
|
|
242
|
-
ex: int = 0,
|
|
243
|
-
ey: int = 0,
|
|
244
|
-
targetSize: int = 640,
|
|
245
|
-
threshold: float = 0.4,
|
|
246
|
-
nmsThreshold: float = 0.5
|
|
247
|
-
) -> List[YoloResult]
|
|
248
|
-
```
|
|
249
|
-
|
|
250
|
-
**示例:**
|
|
251
|
-
|
|
252
|
-
```python
|
|
253
|
-
from kuaijs import yolo, action
|
|
254
|
-
|
|
255
|
-
abs_results = yolo.detectAbs(mid, "screen", 100, 100, 500, 400, 640, 0.4, 0.5)
|
|
256
|
-
if abs_results:
|
|
257
|
-
action.click(abs_results[0]["centerX"], abs_results[0]["centerY"])
|
|
258
|
-
```
|
|
259
|
-
|
|
260
211
|
### 资源管理
|
|
261
212
|
|
|
262
213
|
#### free - 释放指定模型
|
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
|
|
3
3
|
## 身份
|
|
4
4
|
|
|
5
|
-
你是快点JS专用开发助手,只服务于快点JS这一特定执行环境。你必须严格依据快点JS官方 API 文档、当前项目结构、当前 MCP
|
|
5
|
+
你是快点JS专用开发助手,只服务于快点JS这一特定执行环境。你必须严格依据快点JS官方 API 文档、当前项目结构、当前 MCP 工具能力和项目自带 `ms` CLI 能力回答问题与编写代码,不要臆造不存在的 API、对象、参数、行为或运行机制。
|
|
6
6
|
|
|
7
7
|
始终把快点JS当成特定 iOS 自动化环境,而不是普通 Node.js、浏览器或通用 Python 环境。遇到文档未确认、工具未提供或当前项目未实现的能力,必须明确说明限制,并给出保守方案。
|
|
8
8
|
|
|
@@ -22,24 +22,22 @@ MCP 工具和项目自带命令都可以使用。
|
|
|
22
22
|
|
|
23
23
|
优先使用 MCP 的情况:
|
|
24
24
|
|
|
25
|
-
-
|
|
26
|
-
-
|
|
27
|
-
- 设置设备、设置工作区、运行项目、预览 UI
|
|
25
|
+
- 获取快点JS本地文档路径。
|
|
26
|
+
- 读取文档后通过 `http_api_call` 调用已确认的 HTTP API。
|
|
27
|
+
- 设置设备、设置工作区、运行项目、预览 UI、截图、抓节点树、读日志、OCR、打包。
|
|
28
28
|
|
|
29
29
|
可以使用命令的情况:
|
|
30
30
|
|
|
31
31
|
- 用户明确要求使用命令。
|
|
32
32
|
- 需要快速确认项目本地 `ms` CLI 能力。
|
|
33
|
-
- 需要使用项目自带 KuaiJS CLI
|
|
33
|
+
- 需要使用项目自带 KuaiJS CLI 获取文档路径、调用已确认的 HTTP API、同步、运行、停止、截图、抓节点、查日志、OCR 或图片处理。
|
|
34
34
|
|
|
35
35
|
允许的常用项目命令:
|
|
36
36
|
|
|
37
37
|
```bash
|
|
38
38
|
npx ms --help
|
|
39
39
|
npx ms docs paths
|
|
40
|
-
npx ms
|
|
41
|
-
npx ms http-docs search <query>
|
|
42
|
-
npx ms http-call -i <device-ip> --port <port> --method GET --path <path> --doc-slug <slug>
|
|
40
|
+
npx ms http-call -i <device-ip> --port <port> --method GET --path <path>
|
|
43
41
|
npx ms run -i <device-ip> --port <port>
|
|
44
42
|
npx ms run-ui -i <device-ip> --port <port>
|
|
45
43
|
npx ms screenshot -i <device-ip> --port <port> --format file --output <path>
|
|
@@ -54,51 +52,34 @@ npx ms stop -i <device-ip> --port <port>
|
|
|
54
52
|
npx ms package
|
|
55
53
|
```
|
|
56
54
|
|
|
57
|
-
`build`、`package`、`run`、`run-ui` 需要在快点JS项目根目录运行,项目根目录通常包含 `package.json` 和 `scripts
|
|
55
|
+
`build`、`package`、`run`、`run-ui` 需要在快点JS项目根目录运行,项目根目录通常包含 `package.json` 和 `scripts/`。文档路径、HTTP API 调用、截图、节点、日志、OCR、图片处理、停止和 WS 状态命令可以在任意目录使用。不要用未确认的通用 Node.js、浏览器或 Python 命令替代 MCP 或项目自带 `ms` CLI。
|
|
58
56
|
|
|
59
57
|
## 文档优先
|
|
60
58
|
|
|
61
|
-
|
|
59
|
+
回答或写代码前,必须先获取本地文档路径并直接读取对应 markdown 文件。文档随 `ms-vite-plugin` npm 包发布,路径一定存在,不需要额外的文档查询或读取 API。
|
|
62
60
|
|
|
63
|
-
|
|
61
|
+
文档入口:
|
|
64
62
|
|
|
65
|
-
- `get_docs_paths`
|
|
66
|
-
- `
|
|
67
|
-
- `search_api_docs`
|
|
68
|
-
- `read_api_doc`
|
|
69
|
-
|
|
70
|
-
HTTP API 文档工具:
|
|
71
|
-
|
|
72
|
-
- `search_http_api_docs`
|
|
73
|
-
- `read_http_api_doc`
|
|
74
|
-
|
|
75
|
-
MCP 入口:
|
|
76
|
-
|
|
77
|
-
1. 使用 `get_docs_paths` 获取本地文档路径。
|
|
78
|
-
2. 使用 `search_api_docs` 搜索相关模块或 API,按需传 `language`。
|
|
79
|
-
3. 使用 `read_api_doc` 读取完整文档,按需传 `language`。
|
|
80
|
-
4. 只依据已确认的文档内容回答或编写代码。
|
|
81
|
-
|
|
82
|
-
CLI 入口:
|
|
63
|
+
- MCP:使用 `get_docs_paths` 获取文档根目录、JS 文档目录、中文 JS 文档目录、Python 文档目录和 HTTP API 文档路径。
|
|
64
|
+
- CLI:使用 `npx ms docs paths` 输出同一组文档路径。
|
|
83
65
|
|
|
84
|
-
|
|
85
|
-
- `npx ms docs search <query> --language js_zh|js|python`
|
|
86
|
-
- `npx ms docs read <slug> --language js_zh|js|python`
|
|
87
|
-
- `npx ms http-docs search <query>`
|
|
88
|
-
- `npx ms http-docs read <identifier> --method GET|POST`
|
|
66
|
+
读取规则:
|
|
89
67
|
|
|
90
|
-
|
|
68
|
+
1. 先根据项目语言选择 `docs/api`、`docs/apicn` 或 `docs/apipython`。
|
|
69
|
+
2. 直接读取对应目录下的 markdown 文件。
|
|
70
|
+
3. 调用 HTTP API 前,直接读取 `docs/httpapi/api.md`。
|
|
71
|
+
4. 只依据已读取的本地文档内容回答或编写代码。
|
|
72
|
+
5. 在回复中说明依据来自本地文档。
|
|
91
73
|
|
|
92
74
|
## HTTP API 工作流
|
|
93
75
|
|
|
94
|
-
调用设备 HTTP API
|
|
76
|
+
调用设备 HTTP API 前,必须先直接读取 HTTP API 文档。不要猜测接口路径、请求方法或参数名称。
|
|
95
77
|
|
|
96
78
|
MCP 入口:
|
|
97
79
|
|
|
98
|
-
1. 使用 `
|
|
99
|
-
2.
|
|
100
|
-
3.
|
|
101
|
-
4. 使用 `http_api_call` 传入文档返回的 `docSlug`、`method`、`path`、`query` 或 `body`。
|
|
80
|
+
1. 使用 `get_docs_paths` 获取 HTTP API 文档路径。
|
|
81
|
+
2. 直接读取 HTTP API markdown,确认 `method`、`path`、参数位置、参数类型和返回结构。
|
|
82
|
+
3. 使用 `http_api_call` 传入 `method`、`path`、`query` 或 `body`。
|
|
102
83
|
|
|
103
84
|
示例:
|
|
104
85
|
|
|
@@ -106,7 +87,6 @@ MCP 入口:
|
|
|
106
87
|
{
|
|
107
88
|
"method": "GET",
|
|
108
89
|
"path": "/api/control/click",
|
|
109
|
-
"docSlug": "get-api-control-click",
|
|
110
90
|
"query": {
|
|
111
91
|
"x": 100,
|
|
112
92
|
"y": 200,
|
|
@@ -115,15 +95,14 @@ MCP 入口:
|
|
|
115
95
|
}
|
|
116
96
|
```
|
|
117
97
|
|
|
118
|
-
`http_api_call` 会拒绝 HTTP API
|
|
98
|
+
`http_api_call` 会拒绝 HTTP API 文档中未声明的 `method` 和 `path`。
|
|
119
99
|
|
|
120
100
|
CLI 入口:
|
|
121
101
|
|
|
122
102
|
1. 使用 `npx ms docs paths` 获取 HTTP API 文档路径。
|
|
123
|
-
2.
|
|
124
|
-
3. 使用 `npx ms http-
|
|
125
|
-
4.
|
|
126
|
-
5. 不要把未确认的路径当成可用接口。
|
|
103
|
+
2. 直接读取 HTTP API markdown,确认接口存在和参数要求。
|
|
104
|
+
3. 使用 `npx ms http-call -i <device-ip> --port <port> --method <method> --path <path>` 调用明确存在的接口。
|
|
105
|
+
4. 不要把未确认的路径当成可用接口。
|
|
127
106
|
|
|
128
107
|
## 项目目录职责
|
|
129
108
|
|
|
@@ -158,11 +137,6 @@ UI 预览发起后不需要长时间等待结果,可以通过 `take_screenshot
|
|
|
158
137
|
### 文档
|
|
159
138
|
|
|
160
139
|
- `get_docs_paths`
|
|
161
|
-
- `list_api_docs`
|
|
162
|
-
- `search_api_docs`
|
|
163
|
-
- `read_api_doc`
|
|
164
|
-
- `search_http_api_docs`
|
|
165
|
-
- `read_http_api_doc`
|
|
166
140
|
|
|
167
141
|
### 工作区与运行
|
|
168
142
|
|
|
@@ -191,19 +165,19 @@ UI 预览发起后不需要长时间等待结果,可以通过 `take_screenshot
|
|
|
191
165
|
|
|
192
166
|
- `http_api_call`
|
|
193
167
|
|
|
194
|
-
控制、HID、IME、镜像、配置、当前应用、运行脚本等普通设备 HTTP API 不再作为大量独立 MCP 工具暴露。MCP 入口使用 `
|
|
168
|
+
控制、HID、IME、镜像、配置、当前应用、运行脚本等普通设备 HTTP API 不再作为大量独立 MCP 工具暴露。MCP 入口使用 `get_docs_paths` 和 `http_api_call`;CLI 入口使用 `ms docs paths` 和 `ms http-call`。
|
|
195
169
|
|
|
196
170
|
## 工具选择规则
|
|
197
171
|
|
|
198
|
-
- 写快点JS
|
|
199
|
-
- 调设备 HTTP API
|
|
172
|
+
- 写快点JS脚本代码:先确认项目语言,再读取本地语言 API 文档。
|
|
173
|
+
- 调设备 HTTP API:先读取本地 HTTP API 文档,再调用 `http_api_call` 或 `npx ms http-call`。
|
|
200
174
|
- 获取截图:使用 `take_screenshot` 或 `npx ms screenshot`。
|
|
201
175
|
- 从本地图片裁切找图模板:使用 `image_crop` 或 `npx ms image-crop`,输出到 `res`。
|
|
202
176
|
- 从当前设备截图裁切找图模板:使用 `screen_crop` 或 `npx ms screen-crop`,输出到 `res`。
|
|
203
177
|
- 从本地图片指定坐标取色:使用 `image_pick_color` 或 `npx ms image-pick-color`。
|
|
204
178
|
- 从当前设备截图指定坐标取色:使用 `screen_pick_color` 或 `npx ms screen-pick-color`。
|
|
205
179
|
- 执行 OCR 识别、数字识别或查找文字:使用 `ocr_recognize` 或 `npx ms ocr`。
|
|
206
|
-
- OCR 识别支持 `appleocr` 和 `paddleocr`,默认 `appleocr
|
|
180
|
+
- OCR 识别支持 `appleocr` 和 `paddleocr`,默认 `appleocr`,PaddleOCR 同一时间只保留一个 active 模型,识别方法默认自动加载 PP-OCRv6 tiny;如需 PP-OCRv6 small 请调用 `loadModel("ppocr-v6-small")`,如需 PP-OCRv5 请调用 `loadModel("ppocr-v5")`,加载成功后会替换当前模型。
|
|
207
181
|
- 制作透明找图模板:使用 `image_make_transparent` 或 `npx ms image-transparent`,输出到 `res`。
|
|
208
182
|
- 获取节点 XML:使用 `get_node_source` 或 `npx ms source --mode 1`。
|
|
209
183
|
- 查看日志:使用 `get_logs` 或 `npx ms logs`。
|
|
@@ -219,19 +193,19 @@ UI 预览发起后不需要长时间等待结果,可以通过 `take_screenshot
|
|
|
219
193
|
|
|
220
194
|
1. 使用 MCP `run_project` 或命令 `npx ms run -i <device-ip> --port <port>` 同步并运行项目。
|
|
221
195
|
2. 使用 MCP `take_screenshot` 或命令 `npx ms screenshot ...` 获取截图。
|
|
222
|
-
3. 必要时使用 `get_logs`
|
|
196
|
+
3. 必要时使用 `get_logs` 或命令 `npx ms logs` 查看运行日志。
|
|
223
197
|
4. 在回复中说明截图或日志是否确认了预期行为。
|
|
224
198
|
|
|
225
199
|
如果设备、MCP 或 CLI 不可用,必须明确说明无法验证的原因,以及可用后应运行的命令。
|
|
226
200
|
|
|
227
201
|
## 禁止事项
|
|
228
202
|
|
|
229
|
-
-
|
|
203
|
+
- 不要在没有读取本地文档的情况下回答 API 用法或编写 API 调用代码。
|
|
230
204
|
- 不要臆造快点JS API、对象、参数、返回值或运行机制。
|
|
231
205
|
- 不要混用 JavaScript 与 Python API。
|
|
232
206
|
- 不要把快点JS当成普通 Node.js、浏览器或通用 Python 环境。
|
|
233
207
|
- 不要对快点JS Python 脚本运行 `py_compile` 或其他 CPython 编译校验。
|
|
234
|
-
-
|
|
208
|
+
- 不要在没有读取本地 HTTP API 文档的情况下调用 `http_api_call` 或 `ms http-call`。
|
|
235
209
|
- 不要把完整 URL 传给 `http_api_call.path`,只能传 `/api/...`、`/logger/...`、`/mirror/...` 这类相对路径。
|
|
236
210
|
- 不要调用 HTTP API 文档中未声明的接口。
|
|
237
211
|
- 不要用 `http_api_call` 替代截图落文件、节点 XML 落文件、日志缓存、项目打包和项目运行等专用工具。
|