ms-vite-plugin 1.4.45 → 1.4.46
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/dotocr.md +116 -43
- package/docs/apicn/dotocr.md +120 -48
- package/docs/apipython/dotocr.md +121 -47
- package/package.json +1 -1
package/docs/api/dotocr.md
CHANGED
|
@@ -1,71 +1,100 @@
|
|
|
1
|
-
# 点阵 OCR
|
|
1
|
+
# 点阵 OCR 模块 (dotOcr)
|
|
2
2
|
|
|
3
|
-
|
|
3
|
+
点阵 OCR 模块基于图色工具生成的固定像素点阵字库,提供精确的文字识别与查找功能。字库保存在项目的 `res/fonts` 目录,使用前需先加载字库取得字库 ID,再复用该 ID 进行识别,使用完毕后释放。
|
|
4
4
|
|
|
5
5
|
点阵模板按照制作时的原始像素尺寸匹配,不会自动缩放到其他分辨率。目标文字的字号、缩放比例或像素形状发生变化时,应制作对应的字库特征。
|
|
6
6
|
|
|
7
7
|
## 功能概览
|
|
8
8
|
|
|
9
|
-
-
|
|
10
|
-
-
|
|
11
|
-
-
|
|
12
|
-
-
|
|
13
|
-
-
|
|
9
|
+
- **字库管理**: 加载、缓存和释放项目字库
|
|
10
|
+
- **文字识别**: 返回按阅读顺序排列的识别结果数组
|
|
11
|
+
- **文本查找**: 先识别再按行定位目标串,返回命中位置的绝对坐标
|
|
12
|
+
- **多源输入**: 支持屏幕截图、图片文件、URL 或 imageId
|
|
13
|
+
- **区域识别**: 支持指定区域的精确文字识别
|
|
14
|
+
- **绝对坐标**: 裁剪区域内的结果会映射回原图或全屏坐标
|
|
15
|
+
- **资源控制**: 完整的字库生命周期管理
|
|
14
16
|
|
|
15
17
|
## 数据类型
|
|
16
18
|
|
|
17
19
|
### OCRChar
|
|
18
20
|
|
|
21
|
+
识别结果的数据结构,包含完整的文本信息和位置数据:
|
|
22
|
+
|
|
19
23
|
```typescript
|
|
20
24
|
interface OCRChar {
|
|
25
|
+
/** 识别的文本内容 */
|
|
21
26
|
text: string;
|
|
27
|
+
/** 识别置信度 (0-1) */
|
|
22
28
|
confidence: number;
|
|
29
|
+
/** 文本区域左上角 x 坐标 */
|
|
23
30
|
x: number;
|
|
31
|
+
/** 文本区域左上角 y 坐标 */
|
|
24
32
|
y: number;
|
|
33
|
+
/** 文本区域右下角 x 坐标 */
|
|
25
34
|
ex: number;
|
|
35
|
+
/** 文本区域右下角 y 坐标 */
|
|
26
36
|
ey: number;
|
|
37
|
+
/** 文本区域宽度 */
|
|
27
38
|
width: number;
|
|
39
|
+
/** 文本区域高度 */
|
|
28
40
|
height: number;
|
|
41
|
+
/** 文本区域中心点 x 坐标 */
|
|
29
42
|
centerX: number;
|
|
43
|
+
/** 文本区域中心点 y 坐标 */
|
|
30
44
|
centerY: number;
|
|
31
45
|
}
|
|
32
46
|
```
|
|
33
47
|
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
|
37
|
-
|
|
|
38
|
-
| `
|
|
39
|
-
| `
|
|
40
|
-
| `
|
|
41
|
-
| `
|
|
48
|
+
**数据结构说明:**
|
|
49
|
+
|
|
50
|
+
| 字段 | 类型 | 描述 |
|
|
51
|
+
| ------------------ | ------ | -------------------------------------------------------- |
|
|
52
|
+
| `text` | string | 识别出的文本内容;查找结果中为命中的目标字符串 |
|
|
53
|
+
| `confidence` | number | 识别置信度,范围 0-1,值越高表示识别越准确 |
|
|
54
|
+
| `x, y, ex, ey` | number | 文本区域的坐标,分别为左上角和右下角的 x、y 绝对坐标 |
|
|
55
|
+
| `width, height` | number | 文本区域的宽度和高度 |
|
|
56
|
+
| `centerX, centerY` | number | 文本区域的中心点绝对坐标 |
|
|
42
57
|
|
|
43
58
|
## API 参考
|
|
44
59
|
|
|
45
60
|
### 字库管理
|
|
46
61
|
|
|
47
|
-
#### loadFont -
|
|
62
|
+
#### loadFont - 加载并缓存点阵字库。
|
|
63
|
+
|
|
64
|
+
加载字库是使用点阵识别功能的前提。建议在脚本初始化时加载一次并保存 `fontId`,后续识别时复用,不要每次识别都重新加载。
|
|
48
65
|
|
|
49
66
|
```typescript
|
|
50
67
|
function loadFont(fontPath: string): string | null;
|
|
51
68
|
```
|
|
52
69
|
|
|
70
|
+
**参数:**
|
|
71
|
+
|
|
53
72
|
| 参数名 | 类型 | 是否必填 | 默认值 | 描述 |
|
|
54
73
|
| ---------- | ------ | -------- | ------ | --------------------------------------------------------------------------- |
|
|
55
74
|
| `fontPath` | string | 是 | | 资源路径,运行时会自动处理 `res` 目录解析;常见写法如 `/fonts/default.json` |
|
|
56
75
|
|
|
57
|
-
|
|
76
|
+
**返回值:**
|
|
77
|
+
|
|
78
|
+
| 类型 | 描述 |
|
|
79
|
+
| ---------------- | ----------------------------------------- |
|
|
80
|
+
| `string \| null` | 加载成功返回字库 ID 字符串,失败返回 null |
|
|
81
|
+
|
|
82
|
+
**示例:**
|
|
58
83
|
|
|
59
84
|
```javascript
|
|
60
85
|
const fontId = dotOcr.loadFont("/fonts/default.json");
|
|
61
|
-
if (!fontId)
|
|
86
|
+
if (!fontId) {
|
|
87
|
+
logi("字库加载失败");
|
|
88
|
+
return;
|
|
89
|
+
}
|
|
90
|
+
logi(`字库加载成功: ${fontId}`);
|
|
62
91
|
```
|
|
63
92
|
|
|
64
|
-
建议在脚本初始化时加载一次并保存 `fontId`,后续识别时复用,不要每次识别都重新加载。
|
|
65
|
-
|
|
66
93
|
### 文字识别
|
|
67
94
|
|
|
68
|
-
#### recognizeAbs -
|
|
95
|
+
#### recognizeAbs - 执行点阵 OCR 识别,并将结果坐标映射为原图/全屏绝对坐标。
|
|
96
|
+
|
|
97
|
+
传入裁剪区域时,返回坐标会映射回原图或全屏坐标,可直接用于点击。结果按行从上到下、同一行从左到右排列。颜色按字库各字自带的前景色/偏色匹配,无需额外传色。
|
|
69
98
|
|
|
70
99
|
```typescript
|
|
71
100
|
function recognizeAbs(
|
|
@@ -75,28 +104,44 @@ function recognizeAbs(
|
|
|
75
104
|
y?: number,
|
|
76
105
|
ex?: number,
|
|
77
106
|
ey?: number,
|
|
78
|
-
confidenceThreshold?: number
|
|
107
|
+
confidenceThreshold?: number,
|
|
79
108
|
): OCRChar[];
|
|
80
109
|
```
|
|
81
110
|
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
|
85
|
-
|
|
|
86
|
-
| `
|
|
87
|
-
| `
|
|
88
|
-
| `
|
|
111
|
+
**参数:**
|
|
112
|
+
|
|
113
|
+
| 参数名 | 类型 | 是否必填 | 默认值 | 描述 |
|
|
114
|
+
| --------------------- | ------ | -------- | ------ | --------------------------------------------------------------------------------------------- |
|
|
115
|
+
| `fontId` | string | 是 | | 字库 ID,通过 `loadFont` 获取 |
|
|
116
|
+
| `input` | string | 是 | | 输入源,支持 `"screen"`、图片文件路径、URL 或 imageId |
|
|
117
|
+
| `x` | number | 否 | 0 | 裁剪区域左上角 x 坐标;全屏识别传 0 |
|
|
118
|
+
| `y` | number | 否 | 0 | 裁剪区域左上角 y 坐标;全屏识别传 0 |
|
|
119
|
+
| `ex` | number | 否 | 0 | 裁剪区域右下角 x 坐标;全屏识别传 0;为 0 时使用图像宽度 |
|
|
120
|
+
| `ey` | number | 否 | 0 | 裁剪区域右下角 y 坐标;全屏识别传 0;为 0 时使用图像高度 |
|
|
121
|
+
| `confidenceThreshold` | number | 否 | 0.8 | 相似度下限;`<=0` 时按 `0.8`;低于阈值的字符会被过滤;`>0.95` 时要求像素完全一致 |
|
|
89
122
|
|
|
90
|
-
|
|
123
|
+
**返回值:**
|
|
124
|
+
|
|
125
|
+
| 类型 | 描述 |
|
|
126
|
+
| ----------- | ---------------------------------------------- |
|
|
127
|
+
| `OCRChar[]` | 识别结果数组,坐标为原图或全屏绝对坐标 |
|
|
128
|
+
|
|
129
|
+
**示例:**
|
|
91
130
|
|
|
92
131
|
```javascript
|
|
93
132
|
const chars = dotOcr.recognizeAbs(fontId, "screen", 100, 200, 600, 280, 0.8);
|
|
94
|
-
|
|
133
|
+
logi(`识别数量: ${chars.length}`);
|
|
134
|
+
if (chars.length > 0) {
|
|
135
|
+
logi(`文本: ${chars[0].text}, 坐标: (${chars[0].x}, ${chars[0].y})`);
|
|
136
|
+
action.click(chars[0].centerX, chars[0].centerY);
|
|
137
|
+
}
|
|
95
138
|
```
|
|
96
139
|
|
|
97
140
|
### 文本查找
|
|
98
141
|
|
|
99
|
-
#### findTextAbs -
|
|
142
|
+
#### findTextAbs - 查找目标文本,并将结果坐标映射为原图/全屏绝对坐标。
|
|
143
|
+
|
|
144
|
+
先识别再按行定位目标串。传入裁剪区域时,返回坐标会映射回原图或全屏坐标,可直接用于点击。每个目标最多返回一次命中(最先匹配到的行),每项的 `text` 是目标字符串。
|
|
100
145
|
|
|
101
146
|
```typescript
|
|
102
147
|
function findTextAbs(
|
|
@@ -108,21 +153,31 @@ function findTextAbs(
|
|
|
108
153
|
ex?: number,
|
|
109
154
|
ey?: number,
|
|
110
155
|
confidenceThreshold?: number,
|
|
111
|
-
exactMatch?: boolean
|
|
156
|
+
exactMatch?: boolean,
|
|
112
157
|
): OCRChar[];
|
|
113
158
|
```
|
|
114
159
|
|
|
160
|
+
**参数:**
|
|
161
|
+
|
|
115
162
|
| 参数名 | 类型 | 是否必填 | 默认值 | 描述 |
|
|
116
163
|
| --------------------- | -------- | -------- | ------ | --------------------------------------------------------------------- |
|
|
117
|
-
| `fontId` | string | 是 | | `loadFont`
|
|
164
|
+
| `fontId` | string | 是 | | 字库 ID,通过 `loadFont` 获取 |
|
|
118
165
|
| `input` | string | 是 | | 输入源,支持 `"screen"`、图片文件路径、URL 或 imageId |
|
|
119
166
|
| `targetTexts` | string[] | 是 | | 要查找的字符串数组,例如 `["商店", "背包"]` |
|
|
120
|
-
| `x
|
|
121
|
-
| `
|
|
167
|
+
| `x` | number | 否 | 0 | 裁剪区域左上角 x 坐标;全屏识别传 0 |
|
|
168
|
+
| `y` | number | 否 | 0 | 裁剪区域左上角 y 坐标;全屏识别传 0 |
|
|
169
|
+
| `ex` | number | 否 | 0 | 裁剪区域右下角 x 坐标;全屏识别传 0;为 0 时使用图像宽度 |
|
|
170
|
+
| `ey` | number | 否 | 0 | 裁剪区域右下角 y 坐标;全屏识别传 0;为 0 时使用图像高度 |
|
|
122
171
|
| `confidenceThreshold` | number | 否 | 0.8 | 单字符识别相似度下限;语义同 `recognizeAbs` |
|
|
123
|
-
| `exactMatch` | boolean | 否 | false
|
|
172
|
+
| `exactMatch` | boolean | 否 | false | `false` 为行内子串包含匹配;`true` 要求某一整行文本完全等于目标字符串 |
|
|
173
|
+
|
|
174
|
+
**返回值:**
|
|
175
|
+
|
|
176
|
+
| 类型 | 描述 |
|
|
177
|
+
| ----------- | ------------------------------------------------------ |
|
|
178
|
+
| `OCRChar[]` | 命中结果数组,坐标为原图或全屏绝对坐标 |
|
|
124
179
|
|
|
125
|
-
|
|
180
|
+
**示例:**
|
|
126
181
|
|
|
127
182
|
```javascript
|
|
128
183
|
const hits = dotOcr.findTextAbs(
|
|
@@ -136,25 +191,43 @@ const hits = dotOcr.findTextAbs(
|
|
|
136
191
|
0.8,
|
|
137
192
|
false,
|
|
138
193
|
);
|
|
139
|
-
if (hits.length > 0)
|
|
194
|
+
if (hits.length > 0) {
|
|
195
|
+
action.click(hits[0].centerX, hits[0].centerY);
|
|
196
|
+
}
|
|
140
197
|
```
|
|
141
198
|
|
|
142
199
|
### 资源管理
|
|
143
200
|
|
|
144
|
-
#### free -
|
|
201
|
+
#### free - 释放指定字库的资源。
|
|
145
202
|
|
|
146
203
|
```typescript
|
|
147
204
|
function free(fontId: string): void;
|
|
148
205
|
```
|
|
149
206
|
|
|
150
|
-
|
|
207
|
+
**参数:**
|
|
208
|
+
|
|
209
|
+
| 参数名 | 类型 | 是否必填 | 默认值 | 描述 |
|
|
210
|
+
| -------- | ------ | -------- | ------ | --------------- |
|
|
211
|
+
| `fontId` | string | 是 | | 要释放的字库 ID |
|
|
212
|
+
|
|
213
|
+
**示例:**
|
|
214
|
+
|
|
215
|
+
```javascript
|
|
216
|
+
if (fontId) {
|
|
217
|
+
dotOcr.free(fontId);
|
|
218
|
+
logi(`字库 ${fontId} 资源已释放`);
|
|
219
|
+
}
|
|
220
|
+
```
|
|
221
|
+
|
|
222
|
+
#### freeAll - 释放全部已加载点阵字库的资源。
|
|
151
223
|
|
|
152
224
|
```typescript
|
|
153
225
|
function freeAll(): void;
|
|
154
226
|
```
|
|
155
227
|
|
|
228
|
+
**示例:**
|
|
229
|
+
|
|
156
230
|
```javascript
|
|
157
|
-
dotOcr.free(fontId);
|
|
158
|
-
// 或在需要清理全部已加载的点阵字库时:
|
|
159
231
|
dotOcr.freeAll();
|
|
232
|
+
logi("所有点阵字库资源已释放");
|
|
160
233
|
```
|
package/docs/apicn/dotocr.md
CHANGED
|
@@ -1,71 +1,100 @@
|
|
|
1
|
-
# 点阵 OCR
|
|
1
|
+
# 点阵 OCR 模块 ($点阵OCR)
|
|
2
2
|
|
|
3
|
-
|
|
3
|
+
点阵 OCR 模块基于图色工具生成的固定像素点阵字库,提供精确的文字识别与查找功能。字库保存在项目的 `res/fonts` 目录,使用前需先加载字库取得字库 ID,再复用该 ID 进行识别,使用完毕后释放。
|
|
4
4
|
|
|
5
5
|
点阵模板按照制作时的原始像素尺寸匹配,不会自动缩放到其他分辨率。目标文字的字号、缩放比例或像素形状发生变化时,应制作对应的字库特征。
|
|
6
6
|
|
|
7
7
|
## 功能概览
|
|
8
8
|
|
|
9
|
-
-
|
|
10
|
-
-
|
|
11
|
-
-
|
|
12
|
-
-
|
|
13
|
-
-
|
|
9
|
+
- **字库管理**: 加载、缓存和释放项目字库
|
|
10
|
+
- **文字识别**: 返回按阅读顺序排列的识别结果数组
|
|
11
|
+
- **文本查找**: 先识别再按行定位目标串,返回命中位置的绝对坐标
|
|
12
|
+
- **多源输入**: 支持屏幕截图、图片文件、URL 或 imageId
|
|
13
|
+
- **区域识别**: 支持指定区域的精确文字识别
|
|
14
|
+
- **绝对坐标**: 裁剪区域内的结果会映射回原图或全屏坐标
|
|
15
|
+
- **资源控制**: 完整的字库生命周期管理
|
|
14
16
|
|
|
15
17
|
## 数据类型
|
|
16
18
|
|
|
17
|
-
### OCR字符
|
|
19
|
+
### OCR 字符
|
|
20
|
+
|
|
21
|
+
识别结果的数据结构,包含完整的文本信息和位置数据:
|
|
18
22
|
|
|
19
23
|
```typescript
|
|
20
24
|
interface OCR字符 {
|
|
25
|
+
/** 识别的文本内容 */
|
|
21
26
|
text: 字符串;
|
|
27
|
+
/** 识别置信度 (0-1) */
|
|
22
28
|
confidence: 数字;
|
|
29
|
+
/** 文本区域左上角 x 坐标 */
|
|
23
30
|
x: 数字;
|
|
31
|
+
/** 文本区域左上角 y 坐标 */
|
|
24
32
|
y: 数字;
|
|
33
|
+
/** 文本区域右下角 x 坐标 */
|
|
25
34
|
ex: 数字;
|
|
35
|
+
/** 文本区域右下角 y 坐标 */
|
|
26
36
|
ey: 数字;
|
|
37
|
+
/** 文本区域宽度 */
|
|
27
38
|
width: 数字;
|
|
39
|
+
/** 文本区域高度 */
|
|
28
40
|
height: 数字;
|
|
41
|
+
/** 文本区域中心点 x 坐标 */
|
|
29
42
|
centerX: 数字;
|
|
43
|
+
/** 文本区域中心点 y 坐标 */
|
|
30
44
|
centerY: 数字;
|
|
31
45
|
}
|
|
32
46
|
```
|
|
33
47
|
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
|
37
|
-
|
|
|
38
|
-
| `
|
|
39
|
-
| `
|
|
40
|
-
| `
|
|
41
|
-
| `
|
|
48
|
+
**数据结构说明:**
|
|
49
|
+
|
|
50
|
+
| 字段 | 类型 | 描述 |
|
|
51
|
+
| ------------------ | ------ | -------------------------------------------------------- |
|
|
52
|
+
| `text` | 字符串 | 识别出的文本内容;查找结果中为命中的目标字符串 |
|
|
53
|
+
| `confidence` | 数字 | 识别置信度,范围 0-1,值越高表示识别越准确 |
|
|
54
|
+
| `x, y, ex, ey` | 数字 | 文本区域的坐标,分别为左上角和右下角的 x、y 绝对坐标 |
|
|
55
|
+
| `width, height` | 数字 | 文本区域的宽度和高度 |
|
|
56
|
+
| `centerX, centerY` | 数字 | 文本区域的中心点绝对坐标 |
|
|
42
57
|
|
|
43
58
|
## API 参考
|
|
44
59
|
|
|
45
60
|
### 字库管理
|
|
46
61
|
|
|
47
|
-
#### 加载字库 -
|
|
62
|
+
#### 加载字库 - 加载并缓存点阵字库。
|
|
63
|
+
|
|
64
|
+
加载字库是使用点阵识别功能的前提。建议在脚本初始化时加载一次并保存字库 ID,后续识别时复用,不要每次识别都重新加载。
|
|
48
65
|
|
|
49
66
|
```typescript
|
|
50
67
|
function 加载字库(字库资源路径: 字符串): 字符串 | null;
|
|
51
68
|
```
|
|
52
69
|
|
|
70
|
+
**参数:**
|
|
71
|
+
|
|
53
72
|
| 参数名 | 类型 | 是否必填 | 默认值 | 描述 |
|
|
54
73
|
| -------------- | ------ | -------- | ------ | --------------------------------------------------------------------------- |
|
|
55
74
|
| `字库资源路径` | 字符串 | 是 | | 资源路径,运行时会自动处理 `res` 目录解析;常见写法如 `/fonts/default.json` |
|
|
56
75
|
|
|
57
|
-
|
|
76
|
+
**返回值:**
|
|
77
|
+
|
|
78
|
+
| 类型 | 描述 |
|
|
79
|
+
| -------------- | ----------------------------------------- |
|
|
80
|
+
| `字符串 \| null` | 加载成功返回字库 ID 字符串,失败返回 null |
|
|
81
|
+
|
|
82
|
+
**示例:**
|
|
58
83
|
|
|
59
84
|
```javascript
|
|
60
85
|
const 字库ID = $点阵OCR.加载字库("/fonts/default.json");
|
|
61
|
-
if (!字库ID)
|
|
86
|
+
if (!字库ID) {
|
|
87
|
+
$打印信息日志("字库加载失败");
|
|
88
|
+
return;
|
|
89
|
+
}
|
|
90
|
+
$打印信息日志(`字库加载成功: ${字库ID}`);
|
|
62
91
|
```
|
|
63
92
|
|
|
64
|
-
建议在脚本初始化时加载一次并保存字库 ID,后续识别时复用,不要每次识别都重新加载。
|
|
65
|
-
|
|
66
93
|
### 文字识别
|
|
67
94
|
|
|
68
|
-
#### 识别绝对坐标 -
|
|
95
|
+
#### 识别绝对坐标 - 执行点阵 OCR 识别,并将结果坐标映射为原图/全屏绝对坐标。
|
|
96
|
+
|
|
97
|
+
传入裁剪区域时,返回坐标会映射回原图或全屏坐标,可直接用于点击。结果按行从上到下、同一行从左到右排列。颜色按字库各字自带的前景色/偏色匹配,无需额外传色。
|
|
69
98
|
|
|
70
99
|
```typescript
|
|
71
100
|
function 识别绝对坐标(
|
|
@@ -79,25 +108,40 @@ function 识别绝对坐标(
|
|
|
79
108
|
): 数组<OCR字符>;
|
|
80
109
|
```
|
|
81
110
|
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
|
85
|
-
|
|
|
86
|
-
|
|
|
87
|
-
|
|
|
88
|
-
|
|
|
111
|
+
**参数:**
|
|
112
|
+
|
|
113
|
+
| 参数名 | 类型 | 是否必填 | 默认值 | 描述 |
|
|
114
|
+
| ------------ | ------ | -------- | ------ | --------------------------------------------------------------------------------------------- |
|
|
115
|
+
| `字库ID` | 字符串 | 是 | | 字库 ID,通过 `加载字库` 获取 |
|
|
116
|
+
| `输入源` | 字符串 | 是 | | 输入源,支持 `"screen"`、图片文件路径、URL 或 imageId |
|
|
117
|
+
| `左` | 数字 | 否 | 0 | 裁剪区域左上角 x 坐标;全屏识别传 0 |
|
|
118
|
+
| `上` | 数字 | 否 | 0 | 裁剪区域左上角 y 坐标;全屏识别传 0 |
|
|
119
|
+
| `右` | 数字 | 否 | 0 | 裁剪区域右下角 x 坐标;全屏识别传 0;为 0 时使用图像宽度 |
|
|
120
|
+
| `下` | 数字 | 否 | 0 | 裁剪区域右下角 y 坐标;全屏识别传 0;为 0 时使用图像高度 |
|
|
121
|
+
| `置信度阈值` | 数字 | 否 | 0.8 | 相似度下限;`<=0` 时按 `0.8`;低于阈值的字符会被过滤;`>0.95` 时要求像素完全一致 |
|
|
89
122
|
|
|
90
|
-
|
|
123
|
+
**返回值:**
|
|
124
|
+
|
|
125
|
+
| 类型 | 描述 |
|
|
126
|
+
| ------------- | ---------------------------------------------- |
|
|
127
|
+
| `数组<OCR字符>` | 识别结果数组,坐标为原图或全屏绝对坐标 |
|
|
128
|
+
|
|
129
|
+
**示例:**
|
|
91
130
|
|
|
92
131
|
```javascript
|
|
93
132
|
const 结果 = $点阵OCR.识别绝对坐标(字库ID, "screen", 100, 200, 600, 280, 0.8);
|
|
94
|
-
$打印信息日志(
|
|
95
|
-
|
|
133
|
+
$打印信息日志(`识别数量: ${结果.length}`);
|
|
134
|
+
if (结果.length > 0) {
|
|
135
|
+
$打印信息日志(`文本: ${结果[0].text}, 坐标: (${结果[0].x}, ${结果[0].y})`);
|
|
136
|
+
$动作.点击(结果[0].centerX, 结果[0].centerY);
|
|
137
|
+
}
|
|
96
138
|
```
|
|
97
139
|
|
|
98
140
|
### 文本查找
|
|
99
141
|
|
|
100
|
-
#### 查找文本绝对坐标 -
|
|
142
|
+
#### 查找文本绝对坐标 - 查找目标文本,并将结果坐标映射为原图/全屏绝对坐标。
|
|
143
|
+
|
|
144
|
+
先识别再按行定位目标串。传入裁剪区域时,返回坐标会映射回原图或全屏坐标,可直接用于点击。每个目标最多返回一次命中(最先匹配到的行),每项的 `text` 是目标字符串。
|
|
101
145
|
|
|
102
146
|
```typescript
|
|
103
147
|
function 查找文本绝对坐标(
|
|
@@ -113,17 +157,27 @@ function 查找文本绝对坐标(
|
|
|
113
157
|
): 数组<OCR字符>;
|
|
114
158
|
```
|
|
115
159
|
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
|
119
|
-
|
|
|
120
|
-
|
|
|
121
|
-
|
|
|
122
|
-
|
|
|
123
|
-
|
|
|
124
|
-
|
|
|
160
|
+
**参数:**
|
|
161
|
+
|
|
162
|
+
| 参数名 | 类型 | 是否必填 | 默认值 | 描述 |
|
|
163
|
+
| ------------ | ------------ | -------- | ------ | --------------------------------------------------------------------- |
|
|
164
|
+
| `字库ID` | 字符串 | 是 | | 字库 ID,通过 `加载字库` 获取 |
|
|
165
|
+
| `输入源` | 字符串 | 是 | | 输入源,支持 `"screen"`、图片文件路径、URL 或 imageId |
|
|
166
|
+
| `目标文本` | 数组<字符串> | 是 | | 要查找的字符串数组,例如 `["商店", "背包"]` |
|
|
167
|
+
| `左` | 数字 | 否 | 0 | 裁剪区域左上角 x 坐标;全屏识别传 0 |
|
|
168
|
+
| `上` | 数字 | 否 | 0 | 裁剪区域左上角 y 坐标;全屏识别传 0 |
|
|
169
|
+
| `右` | 数字 | 否 | 0 | 裁剪区域右下角 x 坐标;全屏识别传 0;为 0 时使用图像宽度 |
|
|
170
|
+
| `下` | 数字 | 否 | 0 | 裁剪区域右下角 y 坐标;全屏识别传 0;为 0 时使用图像高度 |
|
|
171
|
+
| `置信度阈值` | 数字 | 否 | 0.8 | 单字符识别相似度下限;语义同 `识别绝对坐标` |
|
|
172
|
+
| `完整匹配` | 布尔值 | 否 | false | `false` 为行内子串包含匹配;`true` 要求某一整行文本完全等于目标字符串 |
|
|
173
|
+
|
|
174
|
+
**返回值:**
|
|
175
|
+
|
|
176
|
+
| 类型 | 描述 |
|
|
177
|
+
| --------------- | ------------------------------------------------------ |
|
|
178
|
+
| `数组<OCR字符>` | 命中结果数组,坐标为原图或全屏绝对坐标 |
|
|
125
179
|
|
|
126
|
-
|
|
180
|
+
**示例:**
|
|
127
181
|
|
|
128
182
|
```javascript
|
|
129
183
|
const 命中 = $点阵OCR.查找文本绝对坐标(
|
|
@@ -137,25 +191,43 @@ const 命中 = $点阵OCR.查找文本绝对坐标(
|
|
|
137
191
|
0.8,
|
|
138
192
|
false,
|
|
139
193
|
);
|
|
140
|
-
if (命中.length > 0)
|
|
194
|
+
if (命中.length > 0) {
|
|
195
|
+
$动作.点击(命中[0].centerX, 命中[0].centerY);
|
|
196
|
+
}
|
|
141
197
|
```
|
|
142
198
|
|
|
143
199
|
### 资源管理
|
|
144
200
|
|
|
145
|
-
#### 释放 -
|
|
201
|
+
#### 释放 - 释放指定字库的资源。
|
|
146
202
|
|
|
147
203
|
```typescript
|
|
148
204
|
function 释放(字库ID: 字符串): void;
|
|
149
205
|
```
|
|
150
206
|
|
|
151
|
-
|
|
207
|
+
**参数:**
|
|
208
|
+
|
|
209
|
+
| 参数名 | 类型 | 是否必填 | 默认值 | 描述 |
|
|
210
|
+
| -------- | ------ | -------- | ------ | --------------- |
|
|
211
|
+
| `字库ID` | 字符串 | 是 | | 要释放的字库 ID |
|
|
212
|
+
|
|
213
|
+
**示例:**
|
|
214
|
+
|
|
215
|
+
```javascript
|
|
216
|
+
if (字库ID) {
|
|
217
|
+
$点阵OCR.释放(字库ID);
|
|
218
|
+
$打印信息日志(`字库 ${字库ID} 资源已释放`);
|
|
219
|
+
}
|
|
220
|
+
```
|
|
221
|
+
|
|
222
|
+
#### 释放全部 - 释放全部已加载点阵字库的资源。
|
|
152
223
|
|
|
153
224
|
```typescript
|
|
154
225
|
function 释放全部(): void;
|
|
155
226
|
```
|
|
156
227
|
|
|
228
|
+
**示例:**
|
|
229
|
+
|
|
157
230
|
```javascript
|
|
158
|
-
$点阵OCR.释放(字库ID);
|
|
159
|
-
// 或在需要清理全部已加载的点阵字库时:
|
|
160
231
|
$点阵OCR.释放全部();
|
|
232
|
+
$打印信息日志("所有点阵字库资源已释放");
|
|
161
233
|
```
|
package/docs/apipython/dotocr.md
CHANGED
|
@@ -1,67 +1,92 @@
|
|
|
1
|
-
# 点阵 OCR
|
|
1
|
+
# 点阵 OCR 模块 (dotocr)
|
|
2
2
|
|
|
3
|
-
|
|
3
|
+
点阵 OCR 模块基于图色工具生成的固定像素点阵字库,提供精确的文字识别与查找功能。字库保存在项目的 `res/fonts` 目录,使用前需先加载字库取得字库 ID,再复用该 ID 进行识别,使用完毕后释放。
|
|
4
4
|
|
|
5
5
|
点阵模板按照制作时的原始像素尺寸匹配,不会自动缩放到其他分辨率。目标文字的字号、缩放比例或像素形状发生变化时,应制作对应的字库特征。
|
|
6
6
|
|
|
7
|
+
## 功能概览
|
|
8
|
+
|
|
9
|
+
- **字库管理**: 加载、缓存和释放项目字库
|
|
10
|
+
- **文字识别**: 返回按阅读顺序排列的识别结果数组
|
|
11
|
+
- **文本查找**: 先识别再按行定位目标串,返回命中位置的绝对坐标
|
|
12
|
+
- **多源输入**: 支持屏幕截图、图片文件、URL 或 imageId
|
|
13
|
+
- **区域识别**: 支持指定区域的精确文字识别
|
|
14
|
+
- **绝对坐标**: 裁剪区域内的结果会映射回原图或全屏坐标
|
|
15
|
+
- **资源控制**: 完整的字库生命周期管理
|
|
16
|
+
|
|
7
17
|
## 数据类型
|
|
8
18
|
|
|
9
19
|
### OCRChar
|
|
10
20
|
|
|
21
|
+
识别结果的数据结构,包含完整的文本信息和位置数据。
|
|
22
|
+
|
|
11
23
|
```python
|
|
12
24
|
from kuaijs._types import KuaiJSNamespace
|
|
13
25
|
|
|
14
26
|
class OCRChar(KuaiJSNamespace):
|
|
15
|
-
text: str
|
|
16
|
-
confidence: float
|
|
17
|
-
x: int
|
|
18
|
-
y: int
|
|
19
|
-
ex: int
|
|
20
|
-
ey: int
|
|
21
|
-
width: int
|
|
22
|
-
height: int
|
|
23
|
-
centerX: int
|
|
24
|
-
centerY: int
|
|
27
|
+
text: str # 识别的文本内容
|
|
28
|
+
confidence: float # 识别置信度 (0-1)
|
|
29
|
+
x: int # 文本区域左上角 x 坐标
|
|
30
|
+
y: int # 文本区域左上角 y 坐标
|
|
31
|
+
ex: int # 文本区域右下角 x 坐标
|
|
32
|
+
ey: int # 文本区域右下角 y 坐标
|
|
33
|
+
width: int # 文本区域宽度
|
|
34
|
+
height: int # 文本区域高度
|
|
35
|
+
centerX: int # 文本区域中心点 x 坐标
|
|
36
|
+
centerY: int # 文本区域中心点 y 坐标
|
|
25
37
|
```
|
|
26
38
|
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
|
30
|
-
|
|
|
31
|
-
| `
|
|
32
|
-
| `
|
|
33
|
-
| `
|
|
34
|
-
| `
|
|
39
|
+
**数据结构说明:**
|
|
40
|
+
|
|
41
|
+
| 字段 | 类型 | 描述 |
|
|
42
|
+
| ------------------ | ----- | -------------------------------------------------------- |
|
|
43
|
+
| `text` | str | 识别出的文本内容;查找结果中为命中的目标字符串 |
|
|
44
|
+
| `confidence` | float | 识别置信度,范围 0-1,值越高表示识别越准确 |
|
|
45
|
+
| `x, y, ex, ey` | int | 文本区域的坐标,分别为左上角和右下角的 x、y 绝对坐标 |
|
|
46
|
+
| `width, height` | int | 文本区域的宽度和高度 |
|
|
47
|
+
| `centerX, centerY` | int | 文本区域的中心点绝对坐标 |
|
|
35
48
|
|
|
36
49
|
## API 参考
|
|
37
50
|
|
|
38
51
|
### 字库管理
|
|
39
52
|
|
|
40
|
-
#### `loadFont` -
|
|
53
|
+
#### `loadFont` - 加载并缓存点阵字库
|
|
54
|
+
|
|
55
|
+
加载字库是使用点阵识别功能的前提。建议在脚本初始化时加载一次并保存 `font_id`,后续识别时复用,不要每次识别都重新加载。
|
|
41
56
|
|
|
42
57
|
```python
|
|
43
58
|
def loadFont(fontPath: str) -> Optional[str]
|
|
44
59
|
```
|
|
45
60
|
|
|
61
|
+
**参数:**
|
|
62
|
+
|
|
46
63
|
| 参数名 | 类型 | 是否必填 | 默认值 | 描述 |
|
|
47
64
|
| ---------- | ---- | -------- | ------ | --------------------------------------------------------------------------- |
|
|
48
65
|
| `fontPath` | str | 是 | | 资源路径,运行时会自动处理 `res` 目录解析;常见写法如 `/fonts/default.json` |
|
|
49
66
|
|
|
50
|
-
|
|
67
|
+
**返回值:**
|
|
68
|
+
|
|
69
|
+
| 类型 | 描述 |
|
|
70
|
+
| ---------------- | ----------------------------------------- |
|
|
71
|
+
| `Optional[str]` | 加载成功返回字库 ID 字符串,失败返回 None |
|
|
72
|
+
|
|
73
|
+
**示例:**
|
|
51
74
|
|
|
52
75
|
```python
|
|
53
76
|
from kuaijs import dotocr
|
|
54
77
|
|
|
55
78
|
font_id = dotocr.loadFont("/fonts/default.json")
|
|
56
79
|
if not font_id:
|
|
57
|
-
|
|
80
|
+
print("字库加载失败")
|
|
81
|
+
else:
|
|
82
|
+
print(f"字库加载成功: {font_id}")
|
|
58
83
|
```
|
|
59
84
|
|
|
60
|
-
建议在脚本初始化时加载一次并保存 `font_id`,后续识别时复用,不要每次识别都重新加载。
|
|
61
|
-
|
|
62
85
|
### 文字识别
|
|
63
86
|
|
|
64
|
-
#### `recognizeAbs` -
|
|
87
|
+
#### `recognizeAbs` - 执行点阵 OCR 识别,并将结果坐标映射为原图/全屏绝对坐标
|
|
88
|
+
|
|
89
|
+
传入裁剪区域时,返回坐标会映射回原图或全屏坐标,可直接用于点击。结果按行从上到下、同一行从左到右排列。颜色按字库各字自带的前景色/偏色匹配,无需额外传色。
|
|
65
90
|
|
|
66
91
|
```python
|
|
67
92
|
def recognizeAbs(
|
|
@@ -75,25 +100,39 @@ def recognizeAbs(
|
|
|
75
100
|
) -> List[OCRChar]
|
|
76
101
|
```
|
|
77
102
|
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
|
81
|
-
|
|
|
82
|
-
| `
|
|
83
|
-
| `
|
|
84
|
-
| `
|
|
103
|
+
**参数:**
|
|
104
|
+
|
|
105
|
+
| 参数名 | 类型 | 是否必填 | 默认值 | 描述 |
|
|
106
|
+
| --------------------- | ----- | -------- | ------ | --------------------------------------------------------------------------------------------- |
|
|
107
|
+
| `fontId` | str | 是 | | 字库 ID,通过 `loadFont` 获取 |
|
|
108
|
+
| `input` | str | 是 | | 输入源,支持 `"screen"`、图片文件路径、URL 或 imageId |
|
|
109
|
+
| `x` | int | 否 | 0 | 裁剪区域左上角 x 坐标;全屏识别传 0 |
|
|
110
|
+
| `y` | int | 否 | 0 | 裁剪区域左上角 y 坐标;全屏识别传 0 |
|
|
111
|
+
| `ex` | int | 否 | 0 | 裁剪区域右下角 x 坐标;全屏识别传 0;为 0 时使用图像宽度 |
|
|
112
|
+
| `ey` | int | 否 | 0 | 裁剪区域右下角 y 坐标;全屏识别传 0;为 0 时使用图像高度 |
|
|
113
|
+
| `confidenceThreshold` | float | 否 | 0.8 | 相似度下限;`<=0` 时按 `0.8`;低于阈值的字符会被过滤;`>0.95` 时要求像素完全一致 |
|
|
114
|
+
|
|
115
|
+
**返回值:**
|
|
85
116
|
|
|
86
|
-
|
|
117
|
+
| 类型 | 描述 |
|
|
118
|
+
| ---------------- | ---------------------------------------------- |
|
|
119
|
+
| `List[OCRChar]` | 识别结果列表,坐标为原图或全屏绝对坐标 |
|
|
120
|
+
|
|
121
|
+
**示例:**
|
|
87
122
|
|
|
88
123
|
```python
|
|
89
124
|
chars = dotocr.recognizeAbs(font_id, "screen", 100, 200, 600, 280, 0.8)
|
|
125
|
+
print(f"识别数量: {len(chars)}")
|
|
90
126
|
if chars:
|
|
91
|
-
print(chars[0].text, chars[0].x, chars[0].
|
|
127
|
+
print(f"文本: {chars[0].text}, 坐标: ({chars[0].x}, {chars[0].y})")
|
|
128
|
+
action.click(chars[0].centerX, chars[0].centerY)
|
|
92
129
|
```
|
|
93
130
|
|
|
94
131
|
### 文本查找
|
|
95
132
|
|
|
96
|
-
#### `findTextAbs` -
|
|
133
|
+
#### `findTextAbs` - 查找目标文本,并将结果坐标映射为原图/全屏绝对坐标
|
|
134
|
+
|
|
135
|
+
先识别再按行定位目标串。传入裁剪区域时,返回坐标会映射回原图或全屏坐标,可直接用于点击。每个目标最多返回一次命中(最先匹配到的行),每项的 `text` 是目标字符串。
|
|
97
136
|
|
|
98
137
|
```python
|
|
99
138
|
def findTextAbs(
|
|
@@ -109,40 +148,75 @@ def findTextAbs(
|
|
|
109
148
|
) -> List[OCRChar]
|
|
110
149
|
```
|
|
111
150
|
|
|
151
|
+
**参数:**
|
|
152
|
+
|
|
112
153
|
| 参数名 | 类型 | 是否必填 | 默认值 | 描述 |
|
|
113
154
|
| --------------------- | --------- | -------- | ------ | --------------------------------------------------------------------- |
|
|
114
|
-
| `fontId` | str | 是 | | `loadFont`
|
|
155
|
+
| `fontId` | str | 是 | | 字库 ID,通过 `loadFont` 获取 |
|
|
115
156
|
| `input` | str | 是 | | 输入源,支持 `"screen"`、图片文件路径、URL 或 imageId |
|
|
116
|
-
| `targetTexts` | List[str] | 是 | |
|
|
117
|
-
| `x
|
|
118
|
-
| `
|
|
157
|
+
| `targetTexts` | List[str] | 是 | | 要查找的字符串列表,例如 `["商店", "背包"]` |
|
|
158
|
+
| `x` | int | 否 | 0 | 裁剪区域左上角 x 坐标;全屏识别传 0 |
|
|
159
|
+
| `y` | int | 否 | 0 | 裁剪区域左上角 y 坐标;全屏识别传 0 |
|
|
160
|
+
| `ex` | int | 否 | 0 | 裁剪区域右下角 x 坐标;全屏识别传 0;为 0 时使用图像宽度 |
|
|
161
|
+
| `ey` | int | 否 | 0 | 裁剪区域右下角 y 坐标;全屏识别传 0;为 0 时使用图像高度 |
|
|
119
162
|
| `confidenceThreshold` | float | 否 | 0.8 | 单字符识别相似度下限;语义同 `recognizeAbs` |
|
|
120
|
-
| `exactMatch` | bool | 否 |
|
|
163
|
+
| `exactMatch` | bool | 否 | False | `False` 为行内子串包含匹配;`True` 要求某一整行文本完全等于目标字符串 |
|
|
121
164
|
|
|
122
|
-
|
|
165
|
+
**返回值:**
|
|
166
|
+
|
|
167
|
+
| 类型 | 描述 |
|
|
168
|
+
| --------------- | ------------------------------------------------------ |
|
|
169
|
+
| `List[OCRChar]` | 命中结果列表,坐标为原图或全屏绝对坐标 |
|
|
170
|
+
|
|
171
|
+
**示例:**
|
|
123
172
|
|
|
124
173
|
```python
|
|
125
|
-
hits = dotocr.findTextAbs(
|
|
174
|
+
hits = dotocr.findTextAbs(
|
|
175
|
+
font_id,
|
|
176
|
+
"screen",
|
|
177
|
+
["商店", "背包"],
|
|
178
|
+
100,
|
|
179
|
+
200,
|
|
180
|
+
600,
|
|
181
|
+
280,
|
|
182
|
+
0.8,
|
|
183
|
+
False,
|
|
184
|
+
)
|
|
126
185
|
if hits:
|
|
127
186
|
action.click(hits[0].centerX, hits[0].centerY)
|
|
128
187
|
```
|
|
129
188
|
|
|
130
189
|
### 资源管理
|
|
131
190
|
|
|
132
|
-
#### `free` -
|
|
191
|
+
#### `free` - 释放指定字库的资源
|
|
133
192
|
|
|
134
193
|
```python
|
|
135
194
|
def free(fontId: str) -> None
|
|
136
195
|
```
|
|
137
196
|
|
|
138
|
-
|
|
197
|
+
**参数:**
|
|
198
|
+
|
|
199
|
+
| 参数名 | 类型 | 是否必填 | 默认值 | 描述 |
|
|
200
|
+
| -------- | ---- | -------- | ------ | --------------- |
|
|
201
|
+
| `fontId` | str | 是 | | 要释放的字库 ID |
|
|
202
|
+
|
|
203
|
+
**示例:**
|
|
204
|
+
|
|
205
|
+
```python
|
|
206
|
+
if font_id:
|
|
207
|
+
dotocr.free(font_id)
|
|
208
|
+
print(f"字库 {font_id} 资源已释放")
|
|
209
|
+
```
|
|
210
|
+
|
|
211
|
+
#### `freeAll` - 释放全部已加载点阵字库的资源
|
|
139
212
|
|
|
140
213
|
```python
|
|
141
214
|
def freeAll() -> None
|
|
142
215
|
```
|
|
143
216
|
|
|
217
|
+
**示例:**
|
|
218
|
+
|
|
144
219
|
```python
|
|
145
|
-
dotocr.free(font_id)
|
|
146
|
-
# 或在需要清理全部已加载的点阵字库时:
|
|
147
220
|
dotocr.freeAll()
|
|
221
|
+
print("所有点阵字库资源已释放")
|
|
148
222
|
```
|