ms-vite-plugin 1.4.10 → 1.4.12
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/docs/api/appleocr.md +78 -0
- package/docs/api/global.md +49 -0
- package/docs/api/node.md +3 -0
- package/docs/api/paddleocr.md +63 -11
- package/docs/api/pip.md +191 -11
- package/docs/api/yolo.md +58 -18
- package/docs/api/yolocls.md +272 -0
- package/docs/apicn/appleocr.md +78 -0
- package/docs/apicn/global.md +49 -0
- package/docs/apicn/node.md +6 -0
- package/docs/apicn/paddleocr.md +59 -7
- package/docs/apicn/pip.md +191 -11
- package/docs/apicn/yolo.md +50 -9
- package/docs/apicn/yolocls.md +272 -0
- package/docs/apipython/appleocr.md +75 -0
- package/docs/apipython/g.md +53 -0
- package/docs/apipython/node.md +4 -1
- package/docs/apipython/overview.md +1 -1
- package/docs/apipython/paddleocr.md +54 -4
- package/docs/apipython/pip.md +203 -11
- package/docs/apipython/yolo.md +37 -7
- package/docs/apipython/yolocls.md +269 -0
- package/docs/httpapi/api.md +284 -1
- package/package.json +1 -1
- package/webview/assets/index-C8WE_Bef.js +2 -0
- package/webview/assets/rolldown-runtime-_TIqcEvS.js +1 -0
- package/webview/assets/vendor-modules-lYh5b13U.js +93553 -0
- package/webview/index.html +3 -2
- package/webview/assets/index-CFwoQXO_.js +0 -13
- package/webview/assets/vendor-modules-Oqi8dZEn.js +0 -42198
package/docs/apicn/pip.md
CHANGED
|
@@ -1,12 +1,14 @@
|
|
|
1
1
|
# 悬浮窗模块 ($悬浮窗)
|
|
2
2
|
|
|
3
|
-
|
|
3
|
+
悬浮窗模块提供 iOS 画中画(Picture in Picture)悬浮窗能力,可用于显示脚本日志、保活提示或脚本自定义文本。
|
|
4
4
|
|
|
5
5
|
## 功能特性
|
|
6
6
|
|
|
7
|
-
-
|
|
7
|
+
- **显示模式**:支持日志、保活和自定义三种显示模式
|
|
8
|
+
- **关闭控制**:支持主动关闭悬浮窗
|
|
8
9
|
- **状态查询**:判断悬浮窗是否正在显示
|
|
9
|
-
-
|
|
10
|
+
- **尺寸设置**:日志模式和自定义模式支持设置内容宽高,并按模式分别持久化
|
|
11
|
+
- **自定义文本**:自定义模式支持文本、换行、文字颜色、背景色和文字大小
|
|
10
12
|
|
|
11
13
|
## API 方法
|
|
12
14
|
|
|
@@ -39,7 +41,7 @@ if (是否显示) {
|
|
|
39
41
|
function 切换到日志模式(): 布尔值;
|
|
40
42
|
```
|
|
41
43
|
|
|
42
|
-
切换到日志模式并尝试显示悬浮窗日志窗口。首次显示悬浮窗时 App
|
|
44
|
+
切换到日志模式并尝试显示悬浮窗日志窗口。首次显示悬浮窗时 App 必须在前台。日志模式会恢复最近一次保存的日志窗口尺寸。
|
|
43
45
|
|
|
44
46
|
**返回值:**
|
|
45
47
|
|
|
@@ -60,7 +62,7 @@ const 是否成功 = $悬浮窗.切换到日志模式();
|
|
|
60
62
|
function 切换到保活模式(): 布尔值;
|
|
61
63
|
```
|
|
62
64
|
|
|
63
|
-
切换到保活模式并尝试显示极小高度悬浮窗。首次显示悬浮窗时 App
|
|
65
|
+
切换到保活模式并尝试显示极小高度悬浮窗。首次显示悬浮窗时 App 必须在前台。保活模式不接受脚本尺寸设置。
|
|
64
66
|
|
|
65
67
|
**返回值:**
|
|
66
68
|
|
|
@@ -75,13 +77,13 @@ $APP切入前台();
|
|
|
75
77
|
const 是否成功 = $悬浮窗.切换到保活模式();
|
|
76
78
|
```
|
|
77
79
|
|
|
78
|
-
###
|
|
80
|
+
### 切换到自定义模式
|
|
79
81
|
|
|
80
82
|
```typescript
|
|
81
|
-
function
|
|
83
|
+
function 切换到自定义模式(): 布尔值;
|
|
82
84
|
```
|
|
83
85
|
|
|
84
|
-
|
|
86
|
+
切换到自定义模式并显示脚本设置的自定义文本。首次显示悬浮窗时 App 必须在前台。自定义模式会恢复最近一次保存的自定义窗口尺寸。
|
|
85
87
|
|
|
86
88
|
**返回值:**
|
|
87
89
|
|
|
@@ -92,22 +94,195 @@ function 切换到关闭模式(): 布尔值;
|
|
|
92
94
|
**示例:**
|
|
93
95
|
|
|
94
96
|
```typescript
|
|
95
|
-
|
|
97
|
+
$APP切入前台();
|
|
98
|
+
$悬浮窗.切换到自定义模式();
|
|
99
|
+
$悬浮窗.设置自定义文本("运行中\n进度 1/3");
|
|
100
|
+
$悬浮窗.设置自定义文字颜色("#34c759");
|
|
101
|
+
$悬浮窗.设置自定义文字大小(18);
|
|
102
|
+
```
|
|
103
|
+
|
|
104
|
+
### 关闭悬浮窗
|
|
105
|
+
|
|
106
|
+
```typescript
|
|
107
|
+
function 关闭悬浮窗(): 布尔值;
|
|
108
|
+
```
|
|
109
|
+
|
|
110
|
+
关闭悬浮窗。
|
|
111
|
+
|
|
112
|
+
**返回值:**
|
|
113
|
+
|
|
114
|
+
| 类型 | 描述 |
|
|
115
|
+
| -------- | ---------------------- |
|
|
116
|
+
| `布尔值` | `true` 代表已提交请求 |
|
|
117
|
+
|
|
118
|
+
**示例:**
|
|
119
|
+
|
|
120
|
+
```typescript
|
|
121
|
+
const 是否成功 = $悬浮窗.关闭悬浮窗();
|
|
122
|
+
```
|
|
123
|
+
|
|
124
|
+
### 设置内容尺寸
|
|
125
|
+
|
|
126
|
+
```typescript
|
|
127
|
+
function 设置内容尺寸(宽度: 数字, 高度: 数字): 布尔值;
|
|
128
|
+
```
|
|
129
|
+
|
|
130
|
+
设置日志模式或自定义模式的悬浮窗内容尺寸。宽度和高度都必须传入有效数字。日志模式和自定义模式会分别保存尺寸;悬浮窗关闭状态和保活模式不会生效。
|
|
131
|
+
|
|
132
|
+
**参数:**
|
|
133
|
+
|
|
134
|
+
| 参数 | 类型 | 必填 | 描述 |
|
|
135
|
+
| ------ | ------------- | ---- | ---------------------------------------------- |
|
|
136
|
+
| `宽度` | `数字` | 是 | 目标内容宽度 |
|
|
137
|
+
| `高度` | `数字` | 是 | 目标内容高度 |
|
|
138
|
+
|
|
139
|
+
**返回值:**
|
|
140
|
+
|
|
141
|
+
| 类型 | 描述 |
|
|
142
|
+
| -------- | -------------------------------------------------------------------- |
|
|
143
|
+
| `布尔值` | `true` 代表尺寸已提交;`false` 代表当前模式不允许设置或宽高无效 |
|
|
144
|
+
|
|
145
|
+
**示例:**
|
|
146
|
+
|
|
147
|
+
```typescript
|
|
148
|
+
$悬浮窗.切换到日志模式();
|
|
149
|
+
$悬浮窗.设置内容尺寸(280, 120);
|
|
150
|
+
|
|
151
|
+
$悬浮窗.切换到自定义模式();
|
|
152
|
+
$悬浮窗.设置内容尺寸(120, 180);
|
|
153
|
+
```
|
|
154
|
+
|
|
155
|
+
### 设置自定义文本
|
|
156
|
+
|
|
157
|
+
```typescript
|
|
158
|
+
function 设置自定义文本(文本: 字符串): 布尔值;
|
|
159
|
+
```
|
|
160
|
+
|
|
161
|
+
设置自定义模式显示的纯文本内容。该方法只更新自定义文本数据,不会自动切换到自定义模式。
|
|
162
|
+
|
|
163
|
+
**参数:**
|
|
164
|
+
|
|
165
|
+
| 参数 | 类型 | 必填 | 描述 |
|
|
166
|
+
| ------ | -------- | ---- | ------------------------------------------- |
|
|
167
|
+
| `文本` | `字符串` | 是 | 要显示的文本,支持真实换行和字符串中的 `\n` |
|
|
168
|
+
|
|
169
|
+
**返回值:**
|
|
170
|
+
|
|
171
|
+
| 类型 | 描述 |
|
|
172
|
+
| -------- | ---------------------- |
|
|
173
|
+
| `布尔值` | `true` 代表文本已提交 |
|
|
174
|
+
|
|
175
|
+
**示例:**
|
|
176
|
+
|
|
177
|
+
```typescript
|
|
178
|
+
$悬浮窗.设置自定义文本("运行中\n进度 1/3");
|
|
179
|
+
$悬浮窗.切换到自定义模式();
|
|
180
|
+
```
|
|
181
|
+
|
|
182
|
+
### 设置自定义文字颜色
|
|
183
|
+
|
|
184
|
+
```typescript
|
|
185
|
+
function 设置自定义文字颜色(颜色: 字符串): 布尔值;
|
|
186
|
+
```
|
|
187
|
+
|
|
188
|
+
设置自定义模式显示文本的文字颜色。该方法只更新文字颜色数据,不会自动切换到自定义模式。
|
|
189
|
+
|
|
190
|
+
**参数:**
|
|
191
|
+
|
|
192
|
+
| 参数 | 类型 | 必填 | 描述 |
|
|
193
|
+
| ------ | -------- | ---- | ----------------------------------------------------------- |
|
|
194
|
+
| `颜色` | `字符串` | 是 | 文字颜色,支持 `RRGGBB`、`RRGGBBAA`,可带 `#` 前缀;末尾 AA 为透明度;无效值使用白色 |
|
|
195
|
+
|
|
196
|
+
**返回值:**
|
|
197
|
+
|
|
198
|
+
| 类型 | 描述 |
|
|
199
|
+
| -------- | -------------------------- |
|
|
200
|
+
| `布尔值` | `true` 代表文字颜色已提交 |
|
|
201
|
+
|
|
202
|
+
**示例:**
|
|
203
|
+
|
|
204
|
+
```typescript
|
|
205
|
+
$悬浮窗.设置自定义文字颜色("#34c759");
|
|
206
|
+
$悬浮窗.切换到自定义模式();
|
|
207
|
+
```
|
|
208
|
+
|
|
209
|
+
### 设置自定义文字大小
|
|
210
|
+
|
|
211
|
+
```typescript
|
|
212
|
+
function 设置自定义文字大小(字号: 数字): 布尔值;
|
|
213
|
+
```
|
|
214
|
+
|
|
215
|
+
设置自定义模式显示文本的文字大小。该方法只更新文字大小数据,不会自动切换到自定义模式。
|
|
216
|
+
|
|
217
|
+
**参数:**
|
|
218
|
+
|
|
219
|
+
| 参数 | 类型 | 必填 | 描述 |
|
|
220
|
+
| ------ | ------ | ---- | ------------------------ |
|
|
221
|
+
| `字号` | `数字` | 是 | 文字字号,必须是有效数字 |
|
|
222
|
+
|
|
223
|
+
**返回值:**
|
|
224
|
+
|
|
225
|
+
| 类型 | 描述 |
|
|
226
|
+
| -------- | ---------------------------------------------------- |
|
|
227
|
+
| `布尔值` | `true` 代表文字大小已提交;`false` 代表字号无效 |
|
|
228
|
+
|
|
229
|
+
**示例:**
|
|
230
|
+
|
|
231
|
+
```typescript
|
|
232
|
+
$悬浮窗.设置自定义文字大小(18);
|
|
233
|
+
$悬浮窗.切换到自定义模式();
|
|
234
|
+
```
|
|
235
|
+
|
|
236
|
+
### 设置自定义背景色
|
|
237
|
+
|
|
238
|
+
```typescript
|
|
239
|
+
function 设置自定义背景色(颜色: 字符串): 布尔值;
|
|
240
|
+
```
|
|
241
|
+
|
|
242
|
+
设置自定义模式显示区域的背景色。该方法只更新背景色数据,不会自动切换到自定义模式。
|
|
243
|
+
|
|
244
|
+
**参数:**
|
|
245
|
+
|
|
246
|
+
| 参数 | 类型 | 必填 | 描述 |
|
|
247
|
+
| ------ | -------- | ---- | ----------------------------------------------------------- |
|
|
248
|
+
| `颜色` | `字符串` | 是 | 背景颜色,支持 `RRGGBB`、`RRGGBBAA`,可带 `#` 前缀;末尾 AA 为透明度;无效值使用黑色 |
|
|
249
|
+
|
|
250
|
+
**返回值:**
|
|
251
|
+
|
|
252
|
+
| 类型 | 描述 |
|
|
253
|
+
| -------- | ------------------------ |
|
|
254
|
+
| `布尔值` | `true` 代表背景色已提交 |
|
|
255
|
+
|
|
256
|
+
**示例:**
|
|
257
|
+
|
|
258
|
+
```typescript
|
|
259
|
+
$悬浮窗.设置自定义背景色("#111111");
|
|
260
|
+
$悬浮窗.切换到自定义模式();
|
|
96
261
|
```
|
|
97
262
|
|
|
98
263
|
## 完整使用示例
|
|
99
264
|
|
|
100
265
|
```typescript
|
|
101
266
|
$APP切入前台();
|
|
267
|
+
|
|
102
268
|
$悬浮窗.切换到日志模式();
|
|
269
|
+
$悬浮窗.设置内容尺寸(280, 120);
|
|
270
|
+
|
|
271
|
+
$悬浮窗.设置自定义文本("任务运行中\n1/3");
|
|
272
|
+
$悬浮窗.设置自定义文字颜色("#34c759");
|
|
273
|
+
$悬浮窗.设置自定义文字大小(18);
|
|
274
|
+
$悬浮窗.设置自定义背景色("#111111");
|
|
275
|
+
$悬浮窗.切换到自定义模式();
|
|
276
|
+
$悬浮窗.设置内容尺寸(120, 180);
|
|
103
277
|
```
|
|
104
278
|
|
|
105
279
|
## 注意事项
|
|
106
280
|
|
|
107
|
-
1.
|
|
281
|
+
1. **前台限制**:首次切换到日志、保活或自定义显示模式并启动悬浮窗时,App 必须在前台;悬浮窗已启动后可以继续切换显示模式或关闭悬浮窗
|
|
108
282
|
2. **设备兼容性**:仅支持 iOS 15+ 且具备画中画功能的设备
|
|
109
283
|
3. **系统限制**:悬浮窗位置和实际显示尺寸由 iOS 管理
|
|
110
|
-
4.
|
|
284
|
+
4. **尺寸持久化**:日志模式和自定义模式分别保存尺寸,互不共用;保活模式不接受脚本尺寸
|
|
285
|
+
5. **竖向文本**:自定义窗口高度大于宽度时,文本会按逐字符换行方式竖向显示
|
|
111
286
|
|
|
112
287
|
## 故障排除
|
|
113
288
|
|
|
@@ -116,3 +291,8 @@ $悬浮窗.切换到日志模式();
|
|
|
116
291
|
- 确认设备支持悬浮窗功能
|
|
117
292
|
- 检查悬浮窗权限是否已开启
|
|
118
293
|
- 确认应用当前在前台
|
|
294
|
+
|
|
295
|
+
### 设置内容尺寸返回 false
|
|
296
|
+
|
|
297
|
+
- 确认当前模式是日志模式或自定义模式
|
|
298
|
+
- 确认宽度和高度都传入了有效数字
|
package/docs/apicn/yolo.md
CHANGED
|
@@ -67,8 +67,9 @@ interface Yolo检测结果 {
|
|
|
67
67
|
function 加载模型(
|
|
68
68
|
ncnn模型的param文件路径: 字符串,
|
|
69
69
|
ncnn模型的bin文件路径: 字符串,
|
|
70
|
-
|
|
71
|
-
模型版本?:
|
|
70
|
+
标签数量?: 数字,
|
|
71
|
+
模型版本?: 数字,
|
|
72
|
+
useGpu?: 布尔值
|
|
72
73
|
): 字符串 | null;
|
|
73
74
|
```
|
|
74
75
|
|
|
@@ -78,8 +79,9 @@ function 加载模型(
|
|
|
78
79
|
| ------------------------- | ------ | -------- | ------ | ------------------------------------------- |
|
|
79
80
|
| `ncnn模型的param文件路径` | 字符串 | 是 | | NCNN 模型的 param 文件绝对路径 |
|
|
80
81
|
| `ncnn模型的bin文件路径` | 字符串 | 是 | | NCNN 模型的 bin 文件绝对路径 |
|
|
81
|
-
| `标签数量` | 数字 |
|
|
82
|
+
| `标签数量` | 数字 | 否 | 0 | 模型的标签数量;传 `0` 或省略时根据模型输出自动推断,显式传入但不匹配时检测返回空数组 |
|
|
82
83
|
| `模型版本` | 数字 | 否 | 11 | YOLO 模型版本号(仅支持 8/11/26) |
|
|
84
|
+
| `useGpu` | 布尔值 | 否 | false | 是否启用 GPU 加速 |
|
|
83
85
|
|
|
84
86
|
**返回值:**
|
|
85
87
|
|
|
@@ -94,8 +96,9 @@ function 加载模型(
|
|
|
94
96
|
const 模型ID = $YOLO.加载模型(
|
|
95
97
|
"yolov8n_ncnn_model/model.ncnn.param",
|
|
96
98
|
"yolov8n_ncnn_model/model.ncnn.bin",
|
|
97
|
-
|
|
98
|
-
8
|
|
99
|
+
0,
|
|
100
|
+
8,
|
|
101
|
+
false
|
|
99
102
|
);
|
|
100
103
|
```
|
|
101
104
|
|
|
@@ -105,7 +108,8 @@ const 模型ID = $YOLO.加载模型(
|
|
|
105
108
|
function 加载YOLOv11模型(
|
|
106
109
|
ncnn模型的param文件路径: 字符串,
|
|
107
110
|
ncnn模型的bin文件路径: 字符串,
|
|
108
|
-
|
|
111
|
+
标签数量?: 数字,
|
|
112
|
+
useGpu?: 布尔值
|
|
109
113
|
): 字符串 | null;
|
|
110
114
|
```
|
|
111
115
|
|
|
@@ -115,7 +119,8 @@ function 加载YOLOv11模型(
|
|
|
115
119
|
| ------------------------- | ------ | -------- | ------ | ------------------------------------------- |
|
|
116
120
|
| `ncnn模型的param文件路径` | 字符串 | 是 | | NCNN 模型的 param 文件绝对路径 |
|
|
117
121
|
| `ncnn模型的bin文件路径` | 字符串 | 是 | | NCNN 模型的 bin 文件绝对路径 |
|
|
118
|
-
| `标签数量` | 数字 |
|
|
122
|
+
| `标签数量` | 数字 | 否 | 0 | 模型的标签数量;传 `0` 或省略时根据模型输出自动推断,显式传入但不匹配时检测返回空数组 |
|
|
123
|
+
| `useGpu` | 布尔值 | 否 | false | 是否启用 GPU 加速 |
|
|
119
124
|
|
|
120
125
|
**返回值:**
|
|
121
126
|
|
|
@@ -131,7 +136,8 @@ function 加载YOLOv11模型(
|
|
|
131
136
|
const 模型ID = $YOLO.加载YOLOv11模型(
|
|
132
137
|
"yolo11n_ncnn_model/model.ncnn.param",
|
|
133
138
|
"yolo11n_ncnn_model/model.ncnn.bin",
|
|
134
|
-
|
|
139
|
+
0, // 自动根据模型输出推断类别数量
|
|
140
|
+
false
|
|
135
141
|
);
|
|
136
142
|
|
|
137
143
|
if (模型ID) {
|
|
@@ -179,7 +185,7 @@ function 目标检测(
|
|
|
179
185
|
const 模型ID = $YOLO.加载YOLOv11模型(
|
|
180
186
|
"/yolo11n_ncnn_model/model.ncnn.param",
|
|
181
187
|
"/yolo11n_ncnn_model/model.ncnn.bin",
|
|
182
|
-
|
|
188
|
+
0
|
|
183
189
|
);
|
|
184
190
|
|
|
185
191
|
if (!模型ID) {
|
|
@@ -265,6 +271,41 @@ const fastResults = $YOLO.目标检测(
|
|
|
265
271
|
$打印信息日志(`快速检测结果: ${fastResults.length} 个物体`);
|
|
266
272
|
```
|
|
267
273
|
|
|
274
|
+
#### 目标检测绝对坐标 - 对指定区域执行目标检测,并将结果坐标映射为原图/全屏绝对坐标。
|
|
275
|
+
|
|
276
|
+
```typescript
|
|
277
|
+
function 目标检测绝对坐标(
|
|
278
|
+
模型ID: 字符串,
|
|
279
|
+
图片ID: 字符串,
|
|
280
|
+
裁剪区域左上角x坐标?: 数字,
|
|
281
|
+
裁剪区域左上角y坐标?: 数字,
|
|
282
|
+
裁剪区域右下角x坐标?: 数字,
|
|
283
|
+
裁剪区域右下角y坐标?: 数字,
|
|
284
|
+
目标检测输入大小?: 数字,
|
|
285
|
+
置信度?: 数字,
|
|
286
|
+
重叠阈值?: 数字
|
|
287
|
+
): 数组<Yolo检测结果>;
|
|
288
|
+
```
|
|
289
|
+
|
|
290
|
+
**示例:**
|
|
291
|
+
|
|
292
|
+
```javascript
|
|
293
|
+
const 绝对坐标结果 = $YOLO.目标检测绝对坐标(
|
|
294
|
+
模型ID,
|
|
295
|
+
"screen",
|
|
296
|
+
100,
|
|
297
|
+
100,
|
|
298
|
+
500,
|
|
299
|
+
400,
|
|
300
|
+
640,
|
|
301
|
+
0.4,
|
|
302
|
+
0.5
|
|
303
|
+
);
|
|
304
|
+
if (绝对坐标结果.length > 0) {
|
|
305
|
+
$点击(绝对坐标结果[0].centerX, 绝对坐标结果[0].centerY);
|
|
306
|
+
}
|
|
307
|
+
```
|
|
308
|
+
|
|
268
309
|
### 资源管理
|
|
269
310
|
|
|
270
311
|
#### 释放模型资源
|
|
@@ -0,0 +1,272 @@
|
|
|
1
|
+
# YOLO 图像分类模块 ($YOLO分类)
|
|
2
|
+
|
|
3
|
+
YOLO 图像分类模块基于 YOLOv8-cls / YOLO11-cls / YOLO26-cls 分类模型和 NCNN 框架,提供整图分类、区域分类和模型资源管理能力。
|
|
4
|
+
|
|
5
|
+
## 功能概览
|
|
6
|
+
|
|
7
|
+
- **模型管理**: 加载和释放 YOLOv8-cls / YOLO11-cls / YOLO26-cls NCNN 模型
|
|
8
|
+
- **图像分类**: 对屏幕截图、图片文件、HTTP 图片或图片 ID 执行整图分类
|
|
9
|
+
- **区域分类**: 先裁剪指定区域,再对裁剪结果执行分类
|
|
10
|
+
- **结果处理**: 返回 Ultralytics `Probs` 风格的完整概率、top1、top5 和对应置信度
|
|
11
|
+
- **资源控制**: 支持释放单个模型或释放全部已加载模型
|
|
12
|
+
|
|
13
|
+
## 适用场景
|
|
14
|
+
|
|
15
|
+
- 判断当前屏幕或图片属于哪个业务类别
|
|
16
|
+
- 对截图中的固定区域进行状态识别
|
|
17
|
+
- 对自定义 YOLO-cls 模型导出的 NCNN 模型执行端侧推理
|
|
18
|
+
|
|
19
|
+
## 数据结构
|
|
20
|
+
|
|
21
|
+
### Yolo分类概率结果
|
|
22
|
+
|
|
23
|
+
YOLO 分类概率结果,字段命名与 Ultralytics `Probs` 保持一致。
|
|
24
|
+
|
|
25
|
+
```typescript
|
|
26
|
+
interface Yolo分类概率结果 {
|
|
27
|
+
data: 数组<数字>; // 所有类别概率,下标即类别 ID
|
|
28
|
+
top1: 数字 | null; // 概率最高的类别 ID
|
|
29
|
+
top5: 数组<数字>; // 概率最高的 5 个类别 ID
|
|
30
|
+
top1conf: 数字 | null; // top1 对应的概率
|
|
31
|
+
top5conf: 数组<数字>; // top5 对应的概率
|
|
32
|
+
}
|
|
33
|
+
```
|
|
34
|
+
|
|
35
|
+
**字段说明:**
|
|
36
|
+
|
|
37
|
+
| 字段名 | 类型 | 描述 |
|
|
38
|
+
| ---------- | ---------------- | ---------------------------------------------------------- |
|
|
39
|
+
| `data` | `数组<数字>` | 所有类别概率数组,下标即类别 ID |
|
|
40
|
+
| `top1` | `数字 \| null` | 概率最高的类别 ID;分类失败时为 `null` |
|
|
41
|
+
| `top5` | `数组<数字>` | 概率最高的 5 个类别 ID,按概率从高到低排序 |
|
|
42
|
+
| `top1conf` | `数字 \| null` | `top1` 对应的概率;分类失败时为 `null` |
|
|
43
|
+
| `top5conf` | `数组<数字>` | `top5` 对应的概率,顺序与 `top5` 一致 |
|
|
44
|
+
|
|
45
|
+
**结果说明:**
|
|
46
|
+
|
|
47
|
+
- `top1` 等于 `top5[0]`,`top1conf` 等于 `data[top1]`。
|
|
48
|
+
- 当模型类别数少于 5 时,`top5` 和 `top5conf` 的长度会小于 5。
|
|
49
|
+
- 分类失败时返回空结果:`data`、`top5`、`top5conf` 为空数组,`top1` 和 `top1conf` 为 `null`。
|
|
50
|
+
|
|
51
|
+
## API 参考
|
|
52
|
+
|
|
53
|
+
### 模型管理
|
|
54
|
+
|
|
55
|
+
#### 加载模型 - 加载 YOLO 分类模型(支持 YOLOv8-cls / YOLO11-cls / YOLO26-cls)
|
|
56
|
+
|
|
57
|
+
加载模型是使用图像分类能力的前提。支持 Ultralytics 官方 YOLOv8-cls、YOLO11-cls、YOLO26-cls 导出的 NCNN 分类模型,常见模型名使用 `-cls` 后缀,例如 `yolov8n-cls`、`yolo11n-cls`、`yolo26n-cls`。
|
|
58
|
+
|
|
59
|
+
```typescript
|
|
60
|
+
function 加载模型(
|
|
61
|
+
ncnn模型的param文件路径: 字符串,
|
|
62
|
+
ncnn模型的bin文件路径: 字符串,
|
|
63
|
+
类别数量?: 数字,
|
|
64
|
+
useGpu?: 布尔值
|
|
65
|
+
): 字符串 | null;
|
|
66
|
+
```
|
|
67
|
+
|
|
68
|
+
**参数:**
|
|
69
|
+
|
|
70
|
+
| 参数名 | 类型 | 是否必填 | 默认值 | 描述 |
|
|
71
|
+
| ------------------------- | ------ | -------- | ------ | ----------------------------------------- |
|
|
72
|
+
| `ncnn模型的param文件路径` | 字符串 | 是 | | NCNN 模型的 param 文件路径 |
|
|
73
|
+
| `ncnn模型的bin文件路径` | 字符串 | 是 | | NCNN 模型的 bin 文件路径 |
|
|
74
|
+
| `类别数量` | 数字 | 否 | 0 | 模型类别数量;传 `0` 或省略时按模型输出自动推断,显式传入但不匹配时分类返回空结果 |
|
|
75
|
+
| `useGpu` | 布尔值 | 否 | false | 是否使用 GPU 推理 |
|
|
76
|
+
|
|
77
|
+
**返回值:**
|
|
78
|
+
|
|
79
|
+
| 类型 | 描述 |
|
|
80
|
+
| ---------------- | ----------------------------------------- |
|
|
81
|
+
| `字符串 \| null` | 加载成功返回模型 ID 字符串,失败返回 null |
|
|
82
|
+
|
|
83
|
+
**示例:**
|
|
84
|
+
|
|
85
|
+
```javascript
|
|
86
|
+
// 模型文件通常放在 res 目录
|
|
87
|
+
const 模型ID = $YOLO分类.加载模型(
|
|
88
|
+
"yolo11n_cls_ncnn_model/model.ncnn.param",
|
|
89
|
+
"yolo11n_cls_ncnn_model/model.ncnn.bin",
|
|
90
|
+
1000, // ImageNet 分类模型通常为 1000 类
|
|
91
|
+
false
|
|
92
|
+
);
|
|
93
|
+
|
|
94
|
+
if (模型ID) {
|
|
95
|
+
$打印信息日志(`YOLO 分类模型加载成功,ID: ${模型ID}`);
|
|
96
|
+
} else {
|
|
97
|
+
$打印信息日志("YOLO 分类模型加载失败,请检查模型文件路径和格式");
|
|
98
|
+
}
|
|
99
|
+
```
|
|
100
|
+
|
|
101
|
+
### 图像分类
|
|
102
|
+
|
|
103
|
+
#### 图像分类 - 对输入图像执行分类
|
|
104
|
+
|
|
105
|
+
对整张输入图像执行分类,返回完整概率数组和 top1/top5 结果。
|
|
106
|
+
|
|
107
|
+
```typescript
|
|
108
|
+
function 图像分类(
|
|
109
|
+
模型ID: 字符串,
|
|
110
|
+
图片ID: 字符串,
|
|
111
|
+
分类输入大小?: 数字
|
|
112
|
+
): Yolo分类概率结果;
|
|
113
|
+
```
|
|
114
|
+
|
|
115
|
+
**参数:**
|
|
116
|
+
|
|
117
|
+
| 参数名 | 类型 | 是否必填 | 默认值 | 描述 |
|
|
118
|
+
| -------------- | ------ | -------- | ------ | -------------------------------------------------------------------------------------------------------------------------------------------- |
|
|
119
|
+
| `模型ID` | 字符串 | 是 | | 模型 ID(通过 `加载模型` 获取) |
|
|
120
|
+
| `图片ID` | 字符串 | 是 | | 图像输入源:<br>- `"screen"` - 使用当前屏幕截图<br>- `字符串` - 图片文件路径或 HTTP 图片地址<br>- `imageId` - 图片 ID(通过 image 模块获取) |
|
|
121
|
+
| `分类输入大小` | 数字 | 否 | 224 | 分类输入大小,应与模型训练或导出时的输入尺寸一致 |
|
|
122
|
+
|
|
123
|
+
**返回值:**
|
|
124
|
+
|
|
125
|
+
| 类型 | 描述 |
|
|
126
|
+
| -------------------- | --------------------------------------------------- |
|
|
127
|
+
| `Yolo分类概率结果` | Ultralytics `Probs` 风格分类结果,包含 top1/top5 等 |
|
|
128
|
+
|
|
129
|
+
**示例:**
|
|
130
|
+
|
|
131
|
+
```javascript
|
|
132
|
+
const 模型ID = $YOLO分类.加载模型(
|
|
133
|
+
"yolo11n_cls_ncnn_model/model.ncnn.param",
|
|
134
|
+
"yolo11n_cls_ncnn_model/model.ncnn.bin",
|
|
135
|
+
1000,
|
|
136
|
+
false
|
|
137
|
+
);
|
|
138
|
+
|
|
139
|
+
if (!模型ID) {
|
|
140
|
+
$打印信息日志("模型加载失败");
|
|
141
|
+
return;
|
|
142
|
+
}
|
|
143
|
+
|
|
144
|
+
const 概率结果 = $YOLO分类.图像分类(
|
|
145
|
+
模型ID,
|
|
146
|
+
"screen", // 使用当前屏幕
|
|
147
|
+
224 // 分类模型常用输入尺寸
|
|
148
|
+
);
|
|
149
|
+
|
|
150
|
+
if (概率结果.top1 !== null) {
|
|
151
|
+
$打印信息日志(`top1 类别ID: ${概率结果.top1}`);
|
|
152
|
+
$打印信息日志(`top1 置信度: ${(概率结果.top1conf * 100).toFixed(2)}%`);
|
|
153
|
+
} else {
|
|
154
|
+
$打印信息日志("分类失败或无有效结果");
|
|
155
|
+
}
|
|
156
|
+
|
|
157
|
+
for (let i = 0; i < 概率结果.top5.length; i++) {
|
|
158
|
+
$打印信息日志(
|
|
159
|
+
`top${i + 1}: 类别ID=${概率结果.top5[i]}, 置信度=${概率结果.top5conf[i].toFixed(4)}`
|
|
160
|
+
);
|
|
161
|
+
}
|
|
162
|
+
|
|
163
|
+
// 如需读取某个类别的原始概率,可直接访问 data[classId]
|
|
164
|
+
const 类别ID = 0;
|
|
165
|
+
if (概率结果.data.length > 类别ID) {
|
|
166
|
+
$打印信息日志(`类别 ${类别ID} 概率: ${概率结果.data[类别ID].toFixed(4)}`);
|
|
167
|
+
}
|
|
168
|
+
|
|
169
|
+
$YOLO分类.释放模型资源(模型ID);
|
|
170
|
+
```
|
|
171
|
+
|
|
172
|
+
#### 区域分类 - 对指定区域执行分类
|
|
173
|
+
|
|
174
|
+
先从输入图像中裁剪指定区域,再对裁剪结果执行分类。适合只关心屏幕某个固定区域状态的场景。
|
|
175
|
+
|
|
176
|
+
```typescript
|
|
177
|
+
function 区域分类(
|
|
178
|
+
模型ID: 字符串,
|
|
179
|
+
图片ID: 字符串,
|
|
180
|
+
裁剪区域左上角x坐标?: 数字,
|
|
181
|
+
裁剪区域左上角y坐标?: 数字,
|
|
182
|
+
裁剪区域右下角x坐标?: 数字,
|
|
183
|
+
裁剪区域右下角y坐标?: 数字,
|
|
184
|
+
分类输入大小?: 数字
|
|
185
|
+
): Yolo分类概率结果;
|
|
186
|
+
```
|
|
187
|
+
|
|
188
|
+
**参数:**
|
|
189
|
+
|
|
190
|
+
| 参数名 | 类型 | 是否必填 | 默认值 | 描述 |
|
|
191
|
+
| ------------------------ | ------ | -------- | ------ | -------------------------------------------------------------------------------------------------------------------------------------------- |
|
|
192
|
+
| `模型ID` | 字符串 | 是 | | 模型 ID(通过 `加载模型` 获取) |
|
|
193
|
+
| `图片ID` | 字符串 | 是 | | 图像输入源:<br>- `"screen"` - 使用当前屏幕截图<br>- `字符串` - 图片文件路径或 HTTP 图片地址<br>- `imageId` - 图片 ID(通过 image 模块获取) |
|
|
194
|
+
| `裁剪区域左上角x坐标` | 数字 | 否 | 0 | 裁剪区域左上角 x 坐标 |
|
|
195
|
+
| `裁剪区域左上角y坐标` | 数字 | 否 | 0 | 裁剪区域左上角 y 坐标 |
|
|
196
|
+
| `裁剪区域右下角x坐标` | 数字 | 否 | 0 | 裁剪区域右下角 x 坐标 |
|
|
197
|
+
| `裁剪区域右下角y坐标` | 数字 | 否 | 0 | 裁剪区域右下角 y 坐标 |
|
|
198
|
+
| `分类输入大小` | 数字 | 否 | 224 | 分类输入大小,应与模型训练或导出时的输入尺寸一致 |
|
|
199
|
+
|
|
200
|
+
**返回值:**
|
|
201
|
+
|
|
202
|
+
| 类型 | 描述 |
|
|
203
|
+
| ------------------ | --------------------------------------------------- |
|
|
204
|
+
| `Yolo分类概率结果` | Ultralytics `Probs` 风格分类结果,包含 top1/top5 等 |
|
|
205
|
+
|
|
206
|
+
**示例:**
|
|
207
|
+
|
|
208
|
+
```javascript
|
|
209
|
+
const 区域概率结果 = $YOLO分类.区域分类(
|
|
210
|
+
模型ID,
|
|
211
|
+
"screen",
|
|
212
|
+
100,
|
|
213
|
+
100,
|
|
214
|
+
500,
|
|
215
|
+
400,
|
|
216
|
+
224
|
|
217
|
+
);
|
|
218
|
+
|
|
219
|
+
if (区域概率结果.top1 !== null) {
|
|
220
|
+
$打印信息日志(
|
|
221
|
+
`区域分类 top1=${区域概率结果.top1}, 置信度=${区域概率结果.top1conf.toFixed(4)}`
|
|
222
|
+
);
|
|
223
|
+
}
|
|
224
|
+
```
|
|
225
|
+
|
|
226
|
+
### 资源管理
|
|
227
|
+
|
|
228
|
+
#### 释放模型资源
|
|
229
|
+
|
|
230
|
+
释放指定分类模型占用的资源。
|
|
231
|
+
|
|
232
|
+
```typescript
|
|
233
|
+
function 释放模型资源(模型ID: 字符串): 无返回值;
|
|
234
|
+
```
|
|
235
|
+
|
|
236
|
+
**参数:**
|
|
237
|
+
|
|
238
|
+
| 参数名 | 类型 | 是否必填 | 默认值 | 描述 |
|
|
239
|
+
| -------- | ------ | -------- | ------ | --------------- |
|
|
240
|
+
| `模型ID` | 字符串 | 是 | | 要释放的模型 ID |
|
|
241
|
+
|
|
242
|
+
**示例:**
|
|
243
|
+
|
|
244
|
+
```javascript
|
|
245
|
+
if (模型ID) {
|
|
246
|
+
$YOLO分类.释放模型资源(模型ID);
|
|
247
|
+
$打印信息日志(`YOLO 分类模型 ${模型ID} 资源已释放`);
|
|
248
|
+
}
|
|
249
|
+
```
|
|
250
|
+
|
|
251
|
+
#### 释放所有模型资源
|
|
252
|
+
|
|
253
|
+
释放所有已加载的 YOLO 分类模型资源。
|
|
254
|
+
|
|
255
|
+
```typescript
|
|
256
|
+
function 释放所有模型资源(): 无返回值;
|
|
257
|
+
```
|
|
258
|
+
|
|
259
|
+
**示例:**
|
|
260
|
+
|
|
261
|
+
```javascript
|
|
262
|
+
$YOLO分类.释放所有模型资源();
|
|
263
|
+
$打印信息日志("所有 YOLO 分类模型资源已释放");
|
|
264
|
+
```
|
|
265
|
+
|
|
266
|
+
## 使用注意事项
|
|
267
|
+
|
|
268
|
+
- `分类输入大小` 默认值为 224,常见 YOLO-cls 模型使用该尺寸;自定义模型请填写训练或导出时使用的输入尺寸。
|
|
269
|
+
- `类别数量` 传 `0` 或省略时会根据模型输出自动推断;显式传入但和模型输出不匹配时返回空结果。
|
|
270
|
+
- `区域分类` 中四个裁剪坐标全部为 `0` 时表示不裁剪,直接对整张图分类。
|
|
271
|
+
- 裁剪区域必须位于图像范围内,并且右下角坐标必须大于左上角坐标。
|
|
272
|
+
- 分类结果中的类别 ID 需要结合训练时的类别列表解释;本模块只返回类别 ID 和概率。
|