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/api/appleocr.md
CHANGED
|
@@ -131,6 +131,32 @@ const screenResults = appleOcr.recognize("screen", 0, 0, 1920, 1080);
|
|
|
131
131
|
logi(`屏幕识别结果: ${JSON.stringify(screenResults)}`);
|
|
132
132
|
```
|
|
133
133
|
|
|
134
|
+
#### recognizeAbs
|
|
135
|
+
|
|
136
|
+
执行 OCR 识别,并将结果坐标映射为原图/全屏绝对坐标。
|
|
137
|
+
|
|
138
|
+
参数与 `recognize` 相同。传入裁剪区域时,返回坐标可直接用于全屏点击。
|
|
139
|
+
|
|
140
|
+
```typescript
|
|
141
|
+
function recognizeAbs(
|
|
142
|
+
input: string,
|
|
143
|
+
x?: number,
|
|
144
|
+
y?: number,
|
|
145
|
+
ex?: number,
|
|
146
|
+
ey?: number,
|
|
147
|
+
languages?: string[],
|
|
148
|
+
): OCRResult[];
|
|
149
|
+
```
|
|
150
|
+
|
|
151
|
+
**示例:**
|
|
152
|
+
|
|
153
|
+
```javascript
|
|
154
|
+
const absResults = appleOcr.recognizeAbs("screen", 100, 100, 500, 300);
|
|
155
|
+
if (absResults.length > 0) {
|
|
156
|
+
action.click(absResults[0].centerX, absResults[0].centerY);
|
|
157
|
+
}
|
|
158
|
+
```
|
|
159
|
+
|
|
134
160
|
### 数字识别
|
|
135
161
|
|
|
136
162
|
#### recognizeNumbers
|
|
@@ -179,6 +205,31 @@ numberResults.forEach((result, index) => {
|
|
|
179
205
|
});
|
|
180
206
|
```
|
|
181
207
|
|
|
208
|
+
#### recognizeNumbersAbs
|
|
209
|
+
|
|
210
|
+
执行数字 OCR 识别,并将结果坐标映射为原图/全屏绝对坐标。
|
|
211
|
+
|
|
212
|
+
参数与 `recognizeNumbers` 相同。传入裁剪区域时,返回坐标可直接用于全屏点击。
|
|
213
|
+
|
|
214
|
+
```typescript
|
|
215
|
+
function recognizeNumbersAbs(
|
|
216
|
+
input: string,
|
|
217
|
+
x?: number,
|
|
218
|
+
y?: number,
|
|
219
|
+
ex?: number,
|
|
220
|
+
ey?: number,
|
|
221
|
+
): OCRResult[];
|
|
222
|
+
```
|
|
223
|
+
|
|
224
|
+
**示例:**
|
|
225
|
+
|
|
226
|
+
```javascript
|
|
227
|
+
const absNumberResults = appleOcr.recognizeNumbersAbs("screen", 100, 100, 500, 300);
|
|
228
|
+
if (absNumberResults.length > 0) {
|
|
229
|
+
action.click(absNumberResults[0].centerX, absNumberResults[0].centerY);
|
|
230
|
+
}
|
|
231
|
+
```
|
|
232
|
+
|
|
182
233
|
### 文本查找
|
|
183
234
|
|
|
184
235
|
#### findText
|
|
@@ -227,3 +278,30 @@ textResults.forEach((result, index) => {
|
|
|
227
278
|
logi(`中心点: (${result.centerX}, ${result.centerY})`);
|
|
228
279
|
});
|
|
229
280
|
```
|
|
281
|
+
|
|
282
|
+
#### findTextAbs
|
|
283
|
+
|
|
284
|
+
查找目标文本,并将结果坐标映射为原图/全屏绝对坐标。
|
|
285
|
+
|
|
286
|
+
参数与 `findText` 相同。传入裁剪区域时,返回坐标可直接用于全屏点击。
|
|
287
|
+
|
|
288
|
+
```typescript
|
|
289
|
+
function findTextAbs(
|
|
290
|
+
input: string,
|
|
291
|
+
texts: string[],
|
|
292
|
+
x?: number,
|
|
293
|
+
y?: number,
|
|
294
|
+
ex?: number,
|
|
295
|
+
ey?: number,
|
|
296
|
+
languages?: string[],
|
|
297
|
+
): OCRResult[];
|
|
298
|
+
```
|
|
299
|
+
|
|
300
|
+
**示例:**
|
|
301
|
+
|
|
302
|
+
```javascript
|
|
303
|
+
const absHits = appleOcr.findTextAbs("screen", ["确定"], 100, 100, 500, 400);
|
|
304
|
+
if (absHits.length > 0) {
|
|
305
|
+
action.click(absHits[0].centerX, absHits[0].centerY);
|
|
306
|
+
}
|
|
307
|
+
```
|
package/docs/api/global.md
CHANGED
|
@@ -391,6 +391,55 @@ if (getCpuAutoThrottle()) {
|
|
|
391
391
|
}
|
|
392
392
|
```
|
|
393
393
|
|
|
394
|
+
### setCpuThrottleDelay
|
|
395
|
+
|
|
396
|
+
设置 CPU 限流单次 sleep 延迟范围(毫秒)。默认 `minMs=3`、`maxMs=30`。仅在 CPU 自动限流开启且触发限流时生效。
|
|
397
|
+
|
|
398
|
+
```typescript
|
|
399
|
+
function setCpuThrottleDelay(minMs: number, maxMs: number): { minMs: number; maxMs: number };
|
|
400
|
+
```
|
|
401
|
+
|
|
402
|
+
**参数:**
|
|
403
|
+
|
|
404
|
+
| 参数名 | 类型 | 是否必填 | 默认值 | 描述 |
|
|
405
|
+
| -------- | -------- | -------- | ------ | ---------------------------------- |
|
|
406
|
+
| `minMs` | `number` | 是 | - | 最低延迟(毫秒) |
|
|
407
|
+
| `maxMs` | `number` | 是 | - | 最高延迟(毫秒);小于 minMs 时自动对齐 |
|
|
408
|
+
|
|
409
|
+
**返回值:**
|
|
410
|
+
|
|
411
|
+
| 类型 | 描述 |
|
|
412
|
+
| --------------------------------- | -------------------- |
|
|
413
|
+
| `{ minMs: number; maxMs: number }` | 实际生效的延迟范围 |
|
|
414
|
+
|
|
415
|
+
**示例:**
|
|
416
|
+
|
|
417
|
+
```javascript
|
|
418
|
+
const delay = setCpuThrottleDelay(3, 30);
|
|
419
|
+
logi(`CPU 限流延迟: ${delay.minMs}~${delay.maxMs}ms`);
|
|
420
|
+
```
|
|
421
|
+
|
|
422
|
+
### getCpuThrottleDelay
|
|
423
|
+
|
|
424
|
+
获取 CPU 限流延迟范围(毫秒)。
|
|
425
|
+
|
|
426
|
+
```typescript
|
|
427
|
+
function getCpuThrottleDelay(): { minMs: number; maxMs: number };
|
|
428
|
+
```
|
|
429
|
+
|
|
430
|
+
**返回值:**
|
|
431
|
+
|
|
432
|
+
| 类型 | 描述 |
|
|
433
|
+
| --------------------------------- | ------------------ |
|
|
434
|
+
| `{ minMs: number; maxMs: number }` | 当前最低与最高延迟 |
|
|
435
|
+
|
|
436
|
+
**示例:**
|
|
437
|
+
|
|
438
|
+
```javascript
|
|
439
|
+
const delay = getCpuThrottleDelay();
|
|
440
|
+
logi(`CPU 限流延迟: ${delay.minMs}~${delay.maxMs}ms`);
|
|
441
|
+
```
|
|
442
|
+
|
|
394
443
|
### setStopCallback
|
|
395
444
|
|
|
396
445
|
设置停止回调函数(仅主线程调用)。
|
package/docs/api/node.md
CHANGED
|
@@ -20,6 +20,7 @@
|
|
|
20
20
|
```typescript
|
|
21
21
|
function createNodeSelector(params?: {
|
|
22
22
|
maxDepth?: number; // 最大层级深度,默认 50
|
|
23
|
+
mode?: number; // 抓取模式:模式 1、模式 2,默认模式 1
|
|
23
24
|
}): NodeSelector;
|
|
24
25
|
```
|
|
25
26
|
|
|
@@ -28,6 +29,7 @@ function createNodeSelector(params?: {
|
|
|
28
29
|
| 参数名 | 类型 | 是否必填 | 默认值 | 描述 |
|
|
29
30
|
| ---------- | ------ | -------- | ------ | --------------------------- |
|
|
30
31
|
| `maxDepth` | number | 否 | 50 | 遍历的最大层级深度,默认 50 |
|
|
32
|
+
| `mode` | number | 否 | 1 | 抓取模式。模式 1、模式 2,默认模式 1 |
|
|
31
33
|
|
|
32
34
|
**返回值:**
|
|
33
35
|
|
|
@@ -41,6 +43,7 @@ function createNodeSelector(params?: {
|
|
|
41
43
|
// 创建选择器
|
|
42
44
|
const selector = createNodeSelector({
|
|
43
45
|
maxDepth: 20, // 最大20层深度
|
|
46
|
+
mode: 1, // 默认模式 1
|
|
44
47
|
});
|
|
45
48
|
```
|
|
46
49
|
|
package/docs/api/paddleocr.md
CHANGED
|
@@ -64,20 +64,23 @@ interface OCRResult {
|
|
|
64
64
|
#### loadV5 - 初始化 PP-OCRv5 模型,这是使用 OCR 功能的前提。
|
|
65
65
|
|
|
66
66
|
```typescript
|
|
67
|
-
function loadV5(maxSideLen?: number): boolean;
|
|
67
|
+
function loadV5(maxSideLen?: number, useGpu?: boolean): boolean;
|
|
68
68
|
```
|
|
69
69
|
|
|
70
70
|
**参数:**
|
|
71
71
|
|
|
72
|
-
| 参数名 | 类型
|
|
73
|
-
| ------------ |
|
|
74
|
-
| `maxSideLen` | number
|
|
72
|
+
| 参数名 | 类型 | 是否必填 | 默认值 | 描述 |
|
|
73
|
+
| ------------ | ------- | -------- | ------ | ----------------------------------- |
|
|
74
|
+
| `maxSideLen` | number | 否 | 640 | 输入图像的最大边长,默认值为 640 |
|
|
75
|
+
| `useGpu` | boolean | 否 | false | 是否启用 GPU 加速 |
|
|
75
76
|
|
|
76
77
|
**返回值:**
|
|
77
78
|
|
|
78
|
-
| 类型 | 描述
|
|
79
|
-
| ------- |
|
|
80
|
-
| boolean |
|
|
79
|
+
| 类型 | 描述 |
|
|
80
|
+
| ------- | ------------------------------------------ |
|
|
81
|
+
| boolean | 加载成功或模型已加载返回 `true`,否则返回 `false` |
|
|
82
|
+
|
|
83
|
+
重复调用 `loadV5` 时,如果模型已经加载,会直接返回 `true`,不会重新加载或应用新的参数。需要更换加载参数时,先调用 `free()` 释放模型。
|
|
81
84
|
|
|
82
85
|
**示例:**
|
|
83
86
|
|
|
@@ -119,7 +122,7 @@ function recognize(
|
|
|
119
122
|
|
|
120
123
|
| 类型 | 描述 |
|
|
121
124
|
| ------------- | --------------------------------------------------------------------------------- |
|
|
122
|
-
| `OCRResult[]` |
|
|
125
|
+
| `OCRResult[]` | 识别结果数组,坐标相对于裁剪区域 |
|
|
123
126
|
|
|
124
127
|
**示例:**
|
|
125
128
|
|
|
@@ -137,7 +140,7 @@ fullScreenResults.forEach((result, index) => {
|
|
|
137
140
|
logi(`文本 ${index + 1}: ${JSON.stringify(result)}`);
|
|
138
141
|
});
|
|
139
142
|
|
|
140
|
-
//
|
|
143
|
+
// 识别屏幕指定区域(返回相对裁剪区域的坐标)
|
|
141
144
|
const regionResults = paddleOcr.recognize("screen", 100, 100, 500, 300);
|
|
142
145
|
logi(`指定区域识别结果: ${JSON.stringify(regionResults)}`);
|
|
143
146
|
|
|
@@ -163,6 +166,30 @@ const urlResults = paddleOcr.recognize(
|
|
|
163
166
|
logi(`网络图片识别结果: ${JSON.stringify(urlResults)}`);
|
|
164
167
|
```
|
|
165
168
|
|
|
169
|
+
#### recognizeAbs - 执行 OCR 识别,并将结果坐标映射为原图/全屏绝对坐标。
|
|
170
|
+
|
|
171
|
+
参数与 `recognize` 相同。传入裁剪区域时,返回坐标可直接用于全屏点击。
|
|
172
|
+
|
|
173
|
+
```typescript
|
|
174
|
+
function recognizeAbs(
|
|
175
|
+
input: string,
|
|
176
|
+
x?: number,
|
|
177
|
+
y?: number,
|
|
178
|
+
ex?: number,
|
|
179
|
+
ey?: number,
|
|
180
|
+
confidenceThreshold?: number,
|
|
181
|
+
): OCRResult[];
|
|
182
|
+
```
|
|
183
|
+
|
|
184
|
+
**示例:**
|
|
185
|
+
|
|
186
|
+
```javascript
|
|
187
|
+
const absResults = paddleOcr.recognizeAbs("screen", 100, 100, 500, 300);
|
|
188
|
+
if (absResults.length > 0) {
|
|
189
|
+
action.click(absResults[0].centerX, absResults[0].centerY);
|
|
190
|
+
}
|
|
191
|
+
```
|
|
192
|
+
|
|
166
193
|
#### findText - 在识别结果中查找目标文本并返回对应子串坐标。
|
|
167
194
|
|
|
168
195
|
```typescript
|
|
@@ -193,7 +220,7 @@ function findText(
|
|
|
193
220
|
|
|
194
221
|
| 类型 | 描述 |
|
|
195
222
|
| ------------- | ----------------------------------------------------------------------------------------------------------- |
|
|
196
|
-
| `OCRResult[]` |
|
|
223
|
+
| `OCRResult[]` | 匹配结果数组,坐标相对于裁剪区域 |
|
|
197
224
|
|
|
198
225
|
**示例:**
|
|
199
226
|
|
|
@@ -224,11 +251,36 @@ if (hitResults.length > 0) {
|
|
|
224
251
|
logi("未命中目标文本");
|
|
225
252
|
}
|
|
226
253
|
|
|
227
|
-
//
|
|
254
|
+
// 在指定区域查找目标文本(返回相对裁剪区域的坐标)
|
|
228
255
|
const regionHits = paddleOcr.findText("screen", ["下一步"], 100, 100, 500, 400);
|
|
229
256
|
logi(`区域命中数量: ${regionHits.length}`);
|
|
230
257
|
```
|
|
231
258
|
|
|
259
|
+
#### findTextAbs - 查找目标文本,并将结果坐标映射为原图/全屏绝对坐标。
|
|
260
|
+
|
|
261
|
+
参数与 `findText` 相同。传入裁剪区域时,返回坐标可直接用于全屏点击。
|
|
262
|
+
|
|
263
|
+
```typescript
|
|
264
|
+
function findTextAbs(
|
|
265
|
+
input: string,
|
|
266
|
+
targetTexts: string[],
|
|
267
|
+
x?: number,
|
|
268
|
+
y?: number,
|
|
269
|
+
ex?: number,
|
|
270
|
+
ey?: number,
|
|
271
|
+
confidenceThreshold?: number,
|
|
272
|
+
): OCRResult[];
|
|
273
|
+
```
|
|
274
|
+
|
|
275
|
+
**示例:**
|
|
276
|
+
|
|
277
|
+
```javascript
|
|
278
|
+
const absHits = paddleOcr.findTextAbs("screen", ["确定"], 100, 100, 500, 400, 0.6);
|
|
279
|
+
if (absHits.length > 0) {
|
|
280
|
+
action.click(absHits[0].centerX, absHits[0].centerY);
|
|
281
|
+
}
|
|
282
|
+
```
|
|
283
|
+
|
|
232
284
|
### 资源管理
|
|
233
285
|
|
|
234
286
|
#### free - 释放 OCR 模型占用的内存资源。
|
package/docs/api/pip.md
CHANGED
|
@@ -1,12 +1,14 @@
|
|
|
1
1
|
# 悬浮窗模块 (PIP)
|
|
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 (isActive) {
|
|
|
39
41
|
function switchToLogMode(): boolean;
|
|
40
42
|
```
|
|
41
43
|
|
|
42
|
-
切换到日志模式并尝试显示悬浮窗日志窗口。首次显示悬浮窗时 App
|
|
44
|
+
切换到日志模式并尝试显示悬浮窗日志窗口。首次显示悬浮窗时 App 必须在前台。日志模式会恢复最近一次保存的日志窗口尺寸。
|
|
43
45
|
|
|
44
46
|
**返回值:**
|
|
45
47
|
|
|
@@ -60,7 +62,7 @@ const success = pip.switchToLogMode();
|
|
|
60
62
|
function switchToKeepAliveMode(): boolean;
|
|
61
63
|
```
|
|
62
64
|
|
|
63
|
-
切换到保活模式并尝试显示极小高度悬浮窗。首次显示悬浮窗时 App
|
|
65
|
+
切换到保活模式并尝试显示极小高度悬浮窗。首次显示悬浮窗时 App 必须在前台。保活模式不接受脚本尺寸设置。
|
|
64
66
|
|
|
65
67
|
**返回值:**
|
|
66
68
|
|
|
@@ -75,13 +77,13 @@ takeMeToFront();
|
|
|
75
77
|
const success = pip.switchToKeepAliveMode();
|
|
76
78
|
```
|
|
77
79
|
|
|
78
|
-
###
|
|
80
|
+
### switchToCustomMode - 切换到自定义模式
|
|
79
81
|
|
|
80
82
|
```typescript
|
|
81
|
-
function
|
|
83
|
+
function switchToCustomMode(): boolean;
|
|
82
84
|
```
|
|
83
85
|
|
|
84
|
-
|
|
86
|
+
切换到自定义模式并显示脚本设置的自定义文本。首次显示悬浮窗时 App 必须在前台。自定义模式会恢复最近一次保存的自定义窗口尺寸。
|
|
85
87
|
|
|
86
88
|
**返回值:**
|
|
87
89
|
|
|
@@ -92,22 +94,195 @@ function switchToOffMode(): boolean;
|
|
|
92
94
|
**示例:**
|
|
93
95
|
|
|
94
96
|
```typescript
|
|
95
|
-
|
|
97
|
+
takeMeToFront();
|
|
98
|
+
pip.switchToCustomMode();
|
|
99
|
+
pip.setCustomText("运行中\n进度 1/3");
|
|
100
|
+
pip.setCustomTextColor("#34c759");
|
|
101
|
+
pip.setCustomTextSize(18);
|
|
102
|
+
```
|
|
103
|
+
|
|
104
|
+
### closeWindow - 关闭悬浮窗
|
|
105
|
+
|
|
106
|
+
```typescript
|
|
107
|
+
function closeWindow(): boolean;
|
|
108
|
+
```
|
|
109
|
+
|
|
110
|
+
关闭悬浮窗。
|
|
111
|
+
|
|
112
|
+
**返回值:**
|
|
113
|
+
|
|
114
|
+
| 类型 | 描述 |
|
|
115
|
+
| --------- | ---------------------- |
|
|
116
|
+
| `boolean` | `true` 代表已提交请求 |
|
|
117
|
+
|
|
118
|
+
**示例:**
|
|
119
|
+
|
|
120
|
+
```typescript
|
|
121
|
+
const success = pip.closeWindow();
|
|
122
|
+
```
|
|
123
|
+
|
|
124
|
+
### setContentSize - 设置内容尺寸
|
|
125
|
+
|
|
126
|
+
```typescript
|
|
127
|
+
function setContentSize(width: number, height: number): boolean;
|
|
128
|
+
```
|
|
129
|
+
|
|
130
|
+
设置日志模式或自定义模式的悬浮窗内容尺寸。宽度和高度都必须传入有效数字。日志模式和自定义模式会分别保存尺寸;悬浮窗关闭状态和保活模式不会生效。
|
|
131
|
+
|
|
132
|
+
**参数:**
|
|
133
|
+
|
|
134
|
+
| 参数 | 类型 | 必填 | 描述 |
|
|
135
|
+
| -------- | ---------------- | ---- | ---------------------------------------------- |
|
|
136
|
+
| `width` | `number` | 是 | 目标内容宽度 |
|
|
137
|
+
| `height` | `number` | 是 | 目标内容高度 |
|
|
138
|
+
|
|
139
|
+
**返回值:**
|
|
140
|
+
|
|
141
|
+
| 类型 | 描述 |
|
|
142
|
+
| --------- | -------------------------------------------------------------------- |
|
|
143
|
+
| `boolean` | `true` 代表尺寸已提交;`false` 代表当前模式不允许设置或宽高无效 |
|
|
144
|
+
|
|
145
|
+
**示例:**
|
|
146
|
+
|
|
147
|
+
```typescript
|
|
148
|
+
pip.switchToLogMode();
|
|
149
|
+
pip.setContentSize(280, 120);
|
|
150
|
+
|
|
151
|
+
pip.switchToCustomMode();
|
|
152
|
+
pip.setContentSize(120, 180);
|
|
153
|
+
```
|
|
154
|
+
|
|
155
|
+
### setCustomText - 设置自定义文本
|
|
156
|
+
|
|
157
|
+
```typescript
|
|
158
|
+
function setCustomText(text: string): boolean;
|
|
159
|
+
```
|
|
160
|
+
|
|
161
|
+
设置自定义模式显示的纯文本内容。该方法只更新自定义文本数据,不会自动切换到自定义模式。
|
|
162
|
+
|
|
163
|
+
**参数:**
|
|
164
|
+
|
|
165
|
+
| 参数 | 类型 | 必填 | 描述 |
|
|
166
|
+
| ------ | -------- | ---- | ------------------------------------------- |
|
|
167
|
+
| `text` | `string` | 是 | 要显示的文本,支持真实换行和字符串中的 `\n` |
|
|
168
|
+
|
|
169
|
+
**返回值:**
|
|
170
|
+
|
|
171
|
+
| 类型 | 描述 |
|
|
172
|
+
| --------- | ---------------------- |
|
|
173
|
+
| `boolean` | `true` 代表文本已提交 |
|
|
174
|
+
|
|
175
|
+
**示例:**
|
|
176
|
+
|
|
177
|
+
```typescript
|
|
178
|
+
pip.setCustomText("运行中\n进度 1/3");
|
|
179
|
+
pip.switchToCustomMode();
|
|
180
|
+
```
|
|
181
|
+
|
|
182
|
+
### setCustomTextColor - 设置自定义文字颜色
|
|
183
|
+
|
|
184
|
+
```typescript
|
|
185
|
+
function setCustomTextColor(color: string): boolean;
|
|
186
|
+
```
|
|
187
|
+
|
|
188
|
+
设置自定义模式显示文本的文字颜色。该方法只更新文字颜色数据,不会自动切换到自定义模式。
|
|
189
|
+
|
|
190
|
+
**参数:**
|
|
191
|
+
|
|
192
|
+
| 参数 | 类型 | 必填 | 描述 |
|
|
193
|
+
| ------- | -------- | ---- | ----------------------------------------------------------- |
|
|
194
|
+
| `color` | `string` | 是 | 文字颜色,支持 `RRGGBB`、`RRGGBBAA`,可带 `#` 前缀;末尾 AA 为透明度;无效值使用白色 |
|
|
195
|
+
|
|
196
|
+
**返回值:**
|
|
197
|
+
|
|
198
|
+
| 类型 | 描述 |
|
|
199
|
+
| --------- | -------------------------- |
|
|
200
|
+
| `boolean` | `true` 代表文字颜色已提交 |
|
|
201
|
+
|
|
202
|
+
**示例:**
|
|
203
|
+
|
|
204
|
+
```typescript
|
|
205
|
+
pip.setCustomTextColor("#34c759");
|
|
206
|
+
pip.switchToCustomMode();
|
|
207
|
+
```
|
|
208
|
+
|
|
209
|
+
### setCustomTextSize - 设置自定义文字大小
|
|
210
|
+
|
|
211
|
+
```typescript
|
|
212
|
+
function setCustomTextSize(fontSize: number): boolean;
|
|
213
|
+
```
|
|
214
|
+
|
|
215
|
+
设置自定义模式显示文本的文字大小。该方法只更新文字大小数据,不会自动切换到自定义模式。
|
|
216
|
+
|
|
217
|
+
**参数:**
|
|
218
|
+
|
|
219
|
+
| 参数 | 类型 | 必填 | 描述 |
|
|
220
|
+
| ---------- | -------- | ---- | -------------------------- |
|
|
221
|
+
| `fontSize` | `number` | 是 | 文字字号,必须是有效数字 |
|
|
222
|
+
|
|
223
|
+
**返回值:**
|
|
224
|
+
|
|
225
|
+
| 类型 | 描述 |
|
|
226
|
+
| --------- | ------------------------------------------------------ |
|
|
227
|
+
| `boolean` | `true` 代表文字大小已提交;`false` 代表字号无效 |
|
|
228
|
+
|
|
229
|
+
**示例:**
|
|
230
|
+
|
|
231
|
+
```typescript
|
|
232
|
+
pip.setCustomTextSize(18);
|
|
233
|
+
pip.switchToCustomMode();
|
|
234
|
+
```
|
|
235
|
+
|
|
236
|
+
### setCustomBackgroundColor - 设置自定义背景色
|
|
237
|
+
|
|
238
|
+
```typescript
|
|
239
|
+
function setCustomBackgroundColor(color: string): boolean;
|
|
240
|
+
```
|
|
241
|
+
|
|
242
|
+
设置自定义模式显示区域的背景色。该方法只更新背景色数据,不会自动切换到自定义模式。
|
|
243
|
+
|
|
244
|
+
**参数:**
|
|
245
|
+
|
|
246
|
+
| 参数 | 类型 | 必填 | 描述 |
|
|
247
|
+
| ------- | -------- | ---- | ----------------------------------------------------------- |
|
|
248
|
+
| `color` | `string` | 是 | 背景颜色,支持 `RRGGBB`、`RRGGBBAA`,可带 `#` 前缀;末尾 AA 为透明度;无效值使用黑色 |
|
|
249
|
+
|
|
250
|
+
**返回值:**
|
|
251
|
+
|
|
252
|
+
| 类型 | 描述 |
|
|
253
|
+
| --------- | ------------------------ |
|
|
254
|
+
| `boolean` | `true` 代表背景色已提交 |
|
|
255
|
+
|
|
256
|
+
**示例:**
|
|
257
|
+
|
|
258
|
+
```typescript
|
|
259
|
+
pip.setCustomBackgroundColor("#111111");
|
|
260
|
+
pip.switchToCustomMode();
|
|
96
261
|
```
|
|
97
262
|
|
|
98
263
|
## 完整使用示例
|
|
99
264
|
|
|
100
265
|
```typescript
|
|
101
266
|
takeMeToFront();
|
|
267
|
+
|
|
102
268
|
pip.switchToLogMode();
|
|
269
|
+
pip.setContentSize(280, 120);
|
|
270
|
+
|
|
271
|
+
pip.setCustomText("任务运行中\n1/3");
|
|
272
|
+
pip.setCustomTextColor("#34c759");
|
|
273
|
+
pip.setCustomTextSize(18);
|
|
274
|
+
pip.setCustomBackgroundColor("#111111");
|
|
275
|
+
pip.switchToCustomMode();
|
|
276
|
+
pip.setContentSize(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 @@ pip.switchToLogMode();
|
|
|
116
291
|
- 确认设备支持悬浮窗功能
|
|
117
292
|
- 检查悬浮窗权限是否已开启
|
|
118
293
|
- 确认应用当前在前台
|
|
294
|
+
|
|
295
|
+
### setContentSize 返回 false
|
|
296
|
+
|
|
297
|
+
- 确认当前模式是日志模式或自定义模式
|
|
298
|
+
- 确认宽度和高度都传入了有效数字
|
package/docs/api/yolo.md
CHANGED
|
@@ -67,19 +67,21 @@ interface YoloResult {
|
|
|
67
67
|
function load(
|
|
68
68
|
paramPath: string,
|
|
69
69
|
binPath: string,
|
|
70
|
-
nc
|
|
71
|
-
version?: number
|
|
70
|
+
nc?: number,
|
|
71
|
+
version?: number,
|
|
72
|
+
useGpu?: boolean
|
|
72
73
|
): string | null;
|
|
73
74
|
```
|
|
74
75
|
|
|
75
76
|
**参数:**
|
|
76
77
|
|
|
77
|
-
| 参数名 | 类型
|
|
78
|
-
| ----------- |
|
|
79
|
-
| `paramPath` | string
|
|
80
|
-
| `binPath` | string
|
|
81
|
-
| `nc` | number
|
|
82
|
-
| `version` | number
|
|
78
|
+
| 参数名 | 类型 | 是否必填 | 默认值 | 描述 |
|
|
79
|
+
| ----------- | ------- | -------- | ------ | ------------------------------------------- |
|
|
80
|
+
| `paramPath` | string | 是 | | NCNN 模型的 param 文件绝对路径 |
|
|
81
|
+
| `binPath` | string | 是 | | NCNN 模型的 bin 文件绝对路径 |
|
|
82
|
+
| `nc` | number | 否 | 0 | 模型的标签数量;传 `0` 或省略时根据模型输出自动推断,显式传入但不匹配时检测返回空数组 |
|
|
83
|
+
| `version` | number | 否 | 11 | YOLO 模型版本号(仅支持 8/11/26) |
|
|
84
|
+
| `useGpu` | boolean | 否 | false | 是否启用 GPU 加速 |
|
|
83
85
|
|
|
84
86
|
**返回值:**
|
|
85
87
|
|
|
@@ -94,24 +96,26 @@ function load(
|
|
|
94
96
|
const modelId = yolo.load(
|
|
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
|
|
|
102
105
|
#### loadV11 - 加载 YOLOv11 模型(兼容 yolov8 模型),这是使用目标检测功能的前提。
|
|
103
106
|
|
|
104
107
|
```typescript
|
|
105
|
-
function loadV11(paramPath: string, binPath: string, nc
|
|
108
|
+
function loadV11(paramPath: string, binPath: string, nc?: number, useGpu?: boolean): string | null;
|
|
106
109
|
```
|
|
107
110
|
|
|
108
111
|
**参数:**
|
|
109
112
|
|
|
110
|
-
| 参数名 | 类型
|
|
111
|
-
| ----------- |
|
|
112
|
-
| `paramPath` | string
|
|
113
|
-
| `binPath` | string
|
|
114
|
-
| `nc` | number
|
|
113
|
+
| 参数名 | 类型 | 是否必填 | 默认值 | 描述 |
|
|
114
|
+
| ----------- | ------- | -------- | ------ | ------------------------------------------- |
|
|
115
|
+
| `paramPath` | string | 是 | | NCNN 模型的 param 文件绝对路径 |
|
|
116
|
+
| `binPath` | string | 是 | | NCNN 模型的 bin 文件绝对路径 |
|
|
117
|
+
| `nc` | number | 否 | 0 | 模型的标签数量;传 `0` 或省略时根据模型输出自动推断,显式传入但不匹配时检测返回空数组 |
|
|
118
|
+
| `useGpu` | boolean | 否 | false | 是否启用 GPU 加速 |
|
|
115
119
|
|
|
116
120
|
**返回值:**
|
|
117
121
|
|
|
@@ -127,7 +131,8 @@ function loadV11(paramPath: string, binPath: string, nc: number): string | null;
|
|
|
127
131
|
const modelId = yolo.loadV11(
|
|
128
132
|
"yolo11n_ncnn_model/model.ncnn.param",
|
|
129
133
|
"yolo11n_ncnn_model/model.ncnn.bin",
|
|
130
|
-
|
|
134
|
+
0, // 自动根据模型输出推断类别数量
|
|
135
|
+
false
|
|
131
136
|
);
|
|
132
137
|
|
|
133
138
|
if (modelId) {
|
|
@@ -175,7 +180,7 @@ function detect(
|
|
|
175
180
|
const modelId = yolo.loadV11(
|
|
176
181
|
"/yolo11n_ncnn_model/model.ncnn.param",
|
|
177
182
|
"/yolo11n_ncnn_model/model.ncnn.bin",
|
|
178
|
-
|
|
183
|
+
0
|
|
179
184
|
);
|
|
180
185
|
|
|
181
186
|
if (!modelId) {
|
|
@@ -261,6 +266,41 @@ const fastResults = yolo.detect(
|
|
|
261
266
|
logi(`快速检测结果: ${fastResults.length} 个物体`);
|
|
262
267
|
```
|
|
263
268
|
|
|
269
|
+
#### detectAbs - 对指定区域执行目标检测,并将结果坐标映射为原图/全屏绝对坐标。
|
|
270
|
+
|
|
271
|
+
```typescript
|
|
272
|
+
function detectAbs(
|
|
273
|
+
modelId: string,
|
|
274
|
+
img: string,
|
|
275
|
+
x?: number,
|
|
276
|
+
y?: number,
|
|
277
|
+
ex?: number,
|
|
278
|
+
ey?: number,
|
|
279
|
+
targetSize?: number,
|
|
280
|
+
threshold?: number,
|
|
281
|
+
nmsThreshold?: number
|
|
282
|
+
): YoloResult[];
|
|
283
|
+
```
|
|
284
|
+
|
|
285
|
+
**示例:**
|
|
286
|
+
|
|
287
|
+
```javascript
|
|
288
|
+
const absResults = yolo.detectAbs(
|
|
289
|
+
modelId,
|
|
290
|
+
"screen",
|
|
291
|
+
100,
|
|
292
|
+
100,
|
|
293
|
+
500,
|
|
294
|
+
400,
|
|
295
|
+
640,
|
|
296
|
+
0.4,
|
|
297
|
+
0.5
|
|
298
|
+
);
|
|
299
|
+
if (absResults.length > 0) {
|
|
300
|
+
action.click(absResults[0].centerX, absResults[0].centerY);
|
|
301
|
+
}
|
|
302
|
+
```
|
|
303
|
+
|
|
264
304
|
### 资源管理
|
|
265
305
|
|
|
266
306
|
#### free - 释放指定模型的资源。
|