assistsx-js 0.1.27 → 0.1.28

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/index.d.ts CHANGED
@@ -22,3 +22,5 @@ export * from "./filesystem/fileutils/file-utils";
22
22
  export * from "./ime/ime";
23
23
  export * from "./imageutils/image-utils";
24
24
  export * from "./gallery/gallery";
25
+ export * from "./mlkit/mlkit";
26
+ export * from "./mlkit/MlkitCallMethod";
package/dist/index.js CHANGED
@@ -22,3 +22,5 @@ export * from "./filesystem/fileutils/file-utils";
22
22
  export * from "./ime/ime";
23
23
  export * from "./imageutils/image-utils";
24
24
  export * from "./gallery/gallery";
25
+ export * from "./mlkit/mlkit";
26
+ export * from "./mlkit/MlkitCallMethod";
@@ -0,0 +1,27 @@
1
+ /**
2
+ * ML Kit 文字识别相关的方法常量定义
3
+ * 支持识别屏幕中指定词组位置以及识别屏幕文字内容位置
4
+ */
5
+ export declare const MlkitCallMethod: {
6
+ /**
7
+ * 识别屏幕中指定词组的位置(基于当前截图)
8
+ * 参数:targetText 必填;region 可选 { left, top, right, bottom };rotationDegrees 可选,默认 0
9
+ */
10
+ readonly findPhrasePositions: "findPhrasePositions";
11
+ /**
12
+ * 识别屏幕中所有文字内容及其位置(基于当前截图)
13
+ * 参数:region 可选 { left, top, right, bottom };rotationDegrees 可选,默认 0
14
+ */
15
+ readonly getScreenTextPositions: "getScreenTextPositions";
16
+ /**
17
+ * 识别屏幕中指定词组的位置,直接返回 JSON 字符串(基于当前截图)
18
+ * 参数:targetText 必填;region 可选 { left, top, right, bottom };rotationDegrees 可选,默认 0
19
+ */
20
+ readonly findPhrasePositionsOnScreenAsJson: "findPhrasePositionsOnScreenAsJson";
21
+ /**
22
+ * 识别屏幕中所有文字及其位置,直接返回 JSON 字符串(基于当前截图)
23
+ * 参数:region 可选 { left, top, right, bottom };rotationDegrees 可选,默认 0
24
+ */
25
+ readonly getScreenTextPositionsAsJson: "getScreenTextPositionsAsJson";
26
+ };
27
+ export type MlkitCallMethodType = (typeof MlkitCallMethod)[keyof typeof MlkitCallMethod];
@@ -0,0 +1,26 @@
1
+ /**
2
+ * ML Kit 文字识别相关的方法常量定义
3
+ * 支持识别屏幕中指定词组位置以及识别屏幕文字内容位置
4
+ */
5
+ export const MlkitCallMethod = {
6
+ /**
7
+ * 识别屏幕中指定词组的位置(基于当前截图)
8
+ * 参数:targetText 必填;region 可选 { left, top, right, bottom };rotationDegrees 可选,默认 0
9
+ */
10
+ findPhrasePositions: "findPhrasePositions",
11
+ /**
12
+ * 识别屏幕中所有文字内容及其位置(基于当前截图)
13
+ * 参数:region 可选 { left, top, right, bottom };rotationDegrees 可选,默认 0
14
+ */
15
+ getScreenTextPositions: "getScreenTextPositions",
16
+ /**
17
+ * 识别屏幕中指定词组的位置,直接返回 JSON 字符串(基于当前截图)
18
+ * 参数:targetText 必填;region 可选 { left, top, right, bottom };rotationDegrees 可选,默认 0
19
+ */
20
+ findPhrasePositionsOnScreenAsJson: "findPhrasePositionsOnScreenAsJson",
21
+ /**
22
+ * 识别屏幕中所有文字及其位置,直接返回 JSON 字符串(基于当前截图)
23
+ * 参数:region 可选 { left, top, right, bottom };rotationDegrees 可选,默认 0
24
+ */
25
+ getScreenTextPositionsAsJson: "getScreenTextPositionsAsJson",
26
+ };
@@ -0,0 +1,86 @@
1
+ /**
2
+ * 识别区域接口,用于限定识别范围
3
+ */
4
+ export interface MlkitRegion {
5
+ left: number;
6
+ top: number;
7
+ right: number;
8
+ bottom: number;
9
+ }
10
+ /**
11
+ * 文字位置信息
12
+ */
13
+ export interface TextPosition {
14
+ text: string;
15
+ left: number;
16
+ top: number;
17
+ right: number;
18
+ bottom: number;
19
+ }
20
+ /**
21
+ * findPhrasePositions / getScreenTextPositions 返回结果
22
+ */
23
+ export interface ScreenTextRecognitionResult {
24
+ fullText: string;
25
+ positions: TextPosition[];
26
+ processingTimeMillis: number;
27
+ }
28
+ /**
29
+ * findPhrasePositionsOnScreenAsJson / getScreenTextPositionsAsJson 返回结果
30
+ */
31
+ export interface ScreenTextJsonResult {
32
+ jsonResult: string;
33
+ }
34
+ export declare class Mlkit {
35
+ /**
36
+ * 执行异步调用
37
+ * @param method 方法名
38
+ * @param args 参数对象
39
+ * @param timeout 超时时间(秒),默认30秒
40
+ * @returns Promise<调用响应>
41
+ */
42
+ private asyncCall;
43
+ /**
44
+ * 识别屏幕中指定词组的位置(基于当前截图)
45
+ * @param targetText 要搜索的目标词组(必填)
46
+ * @param options 可选参数:region 识别区域;rotationDegrees 旋转角度,默认 0;timeout 超时时间
47
+ * @returns Promise<识别结果>
48
+ */
49
+ findPhrasePositions(targetText: string, options?: {
50
+ region?: MlkitRegion;
51
+ rotationDegrees?: number;
52
+ timeout?: number;
53
+ }): Promise<ScreenTextRecognitionResult>;
54
+ /**
55
+ * 识别屏幕中所有文字内容及其位置(基于当前截图)
56
+ * @param options 可选参数:region 识别区域;rotationDegrees 旋转角度,默认 0;timeout 超时时间
57
+ * @returns Promise<识别结果>
58
+ */
59
+ getScreenTextPositions(options?: {
60
+ region?: MlkitRegion;
61
+ rotationDegrees?: number;
62
+ timeout?: number;
63
+ }): Promise<ScreenTextRecognitionResult>;
64
+ /**
65
+ * 识别屏幕中指定词组的位置,直接返回 JSON 字符串(基于当前截图)
66
+ * @param targetText 要搜索的目标词组(必填)
67
+ * @param options 可选参数:region 识别区域;rotationDegrees 旋转角度,默认 0;timeout 超时时间
68
+ * @returns Promise<JSON 字符串结果>
69
+ */
70
+ findPhrasePositionsOnScreenAsJson(targetText: string, options?: {
71
+ region?: MlkitRegion;
72
+ rotationDegrees?: number;
73
+ timeout?: number;
74
+ }): Promise<string>;
75
+ /**
76
+ * 识别屏幕中所有文字及其位置,直接返回 JSON 字符串(基于当前截图)
77
+ * @param options 可选参数:region 识别区域;rotationDegrees 旋转角度,默认 0;timeout 超时时间
78
+ * @returns Promise<JSON 字符串结果>
79
+ */
80
+ getScreenTextPositionsAsJson(options?: {
81
+ region?: MlkitRegion;
82
+ rotationDegrees?: number;
83
+ timeout?: number;
84
+ }): Promise<string>;
85
+ }
86
+ export declare const mlkit: Mlkit;
@@ -0,0 +1,169 @@
1
+ /**
2
+ * ML Kit 文字识别相关功能
3
+ * 提供识别屏幕中指定词组位置、识别屏幕文字内容位置的能力
4
+ */
5
+ import { CallResponse } from "../CallResponse";
6
+ import { decodeBase64UTF8, generateUUID } from "../Utils";
7
+ import { MlkitCallMethod } from "./MlkitCallMethod";
8
+ // 回调函数存储对象
9
+ const callbacks = new Map();
10
+ // 初始化全局回调函数
11
+ if (typeof window !== "undefined" && !window.assistsxMlkitCallback) {
12
+ window.assistsxMlkitCallback = (data) => {
13
+ let callbackId;
14
+ try {
15
+ const json = decodeBase64UTF8(data);
16
+ const response = JSON.parse(json);
17
+ callbackId = response.callbackId;
18
+ if (callbackId) {
19
+ const callback = callbacks.get(callbackId);
20
+ if (callback) {
21
+ callback(json);
22
+ }
23
+ }
24
+ }
25
+ catch (e) {
26
+ console.error("Mlkit callback error:", e);
27
+ }
28
+ finally {
29
+ if (callbackId) {
30
+ callbacks.delete(callbackId);
31
+ }
32
+ }
33
+ };
34
+ }
35
+ export class Mlkit {
36
+ /**
37
+ * 执行异步调用
38
+ * @param method 方法名
39
+ * @param args 参数对象
40
+ * @param timeout 超时时间(秒),默认30秒
41
+ * @returns Promise<调用响应>
42
+ */
43
+ async asyncCall(method, args, timeout = 30) {
44
+ const uuid = generateUUID();
45
+ const params = {
46
+ method,
47
+ arguments: args ? args : undefined,
48
+ callbackId: uuid,
49
+ };
50
+ const promise = new Promise((resolve) => {
51
+ callbacks.set(uuid, (data) => {
52
+ resolve(data);
53
+ });
54
+ setTimeout(() => {
55
+ callbacks.delete(uuid);
56
+ resolve(JSON.stringify(new CallResponse(0, null, uuid)));
57
+ }, timeout * 1000);
58
+ });
59
+ const result = window.assistsxMlkit.call(JSON.stringify(params));
60
+ const promiseResult = await promise;
61
+ if (typeof promiseResult === "string") {
62
+ const responseData = JSON.parse(promiseResult);
63
+ return new CallResponse(responseData.code, responseData.data, responseData.callbackId);
64
+ }
65
+ throw new Error("Call failed");
66
+ }
67
+ /**
68
+ * 识别屏幕中指定词组的位置(基于当前截图)
69
+ * @param targetText 要搜索的目标词组(必填)
70
+ * @param options 可选参数:region 识别区域;rotationDegrees 旋转角度,默认 0;timeout 超时时间
71
+ * @returns Promise<识别结果>
72
+ */
73
+ async findPhrasePositions(targetText, options = {}) {
74
+ var _a;
75
+ if (!targetText || targetText.trim() === "") {
76
+ throw new Error("targetText cannot be empty");
77
+ }
78
+ const { region, rotationDegrees = 0, timeout, } = options;
79
+ const response = await this.asyncCall(MlkitCallMethod.findPhrasePositions, {
80
+ targetText: targetText.trim(),
81
+ ...(region && {
82
+ left: region.left,
83
+ top: region.top,
84
+ right: region.right,
85
+ bottom: region.bottom,
86
+ }),
87
+ rotationDegrees,
88
+ }, timeout);
89
+ if (!response.isSuccess()) {
90
+ throw new Error(((_a = response.data) === null || _a === void 0 ? void 0 : _a.message) || "Recognition failed");
91
+ }
92
+ return response.data;
93
+ }
94
+ /**
95
+ * 识别屏幕中所有文字内容及其位置(基于当前截图)
96
+ * @param options 可选参数:region 识别区域;rotationDegrees 旋转角度,默认 0;timeout 超时时间
97
+ * @returns Promise<识别结果>
98
+ */
99
+ async getScreenTextPositions(options = {}) {
100
+ var _a;
101
+ const { region, rotationDegrees = 0, timeout, } = options;
102
+ const response = await this.asyncCall(MlkitCallMethod.getScreenTextPositions, {
103
+ ...(region && {
104
+ left: region.left,
105
+ top: region.top,
106
+ right: region.right,
107
+ bottom: region.bottom,
108
+ }),
109
+ rotationDegrees,
110
+ }, timeout);
111
+ if (!response.isSuccess()) {
112
+ throw new Error(((_a = response.data) === null || _a === void 0 ? void 0 : _a.message) || "Recognition failed");
113
+ }
114
+ return response.data;
115
+ }
116
+ /**
117
+ * 识别屏幕中指定词组的位置,直接返回 JSON 字符串(基于当前截图)
118
+ * @param targetText 要搜索的目标词组(必填)
119
+ * @param options 可选参数:region 识别区域;rotationDegrees 旋转角度,默认 0;timeout 超时时间
120
+ * @returns Promise<JSON 字符串结果>
121
+ */
122
+ async findPhrasePositionsOnScreenAsJson(targetText, options = {}) {
123
+ var _a;
124
+ if (!targetText || targetText.trim() === "") {
125
+ throw new Error("targetText cannot be empty");
126
+ }
127
+ const { region, rotationDegrees = 0, timeout, } = options;
128
+ const response = await this.asyncCall(MlkitCallMethod.findPhrasePositionsOnScreenAsJson, {
129
+ targetText: targetText.trim(),
130
+ ...(region && {
131
+ left: region.left,
132
+ top: region.top,
133
+ right: region.right,
134
+ bottom: region.bottom,
135
+ }),
136
+ rotationDegrees,
137
+ }, timeout);
138
+ if (!response.isSuccess()) {
139
+ throw new Error(((_a = response.data) === null || _a === void 0 ? void 0 : _a.message) || "Recognition failed");
140
+ }
141
+ const data = response.data;
142
+ return data.jsonResult;
143
+ }
144
+ /**
145
+ * 识别屏幕中所有文字及其位置,直接返回 JSON 字符串(基于当前截图)
146
+ * @param options 可选参数:region 识别区域;rotationDegrees 旋转角度,默认 0;timeout 超时时间
147
+ * @returns Promise<JSON 字符串结果>
148
+ */
149
+ async getScreenTextPositionsAsJson(options = {}) {
150
+ var _a;
151
+ const { region, rotationDegrees = 0, timeout, } = options;
152
+ const response = await this.asyncCall(MlkitCallMethod.getScreenTextPositionsAsJson, {
153
+ ...(region && {
154
+ left: region.left,
155
+ top: region.top,
156
+ right: region.right,
157
+ bottom: region.bottom,
158
+ }),
159
+ rotationDegrees,
160
+ }, timeout);
161
+ if (!response.isSuccess()) {
162
+ throw new Error(((_a = response.data) === null || _a === void 0 ? void 0 : _a.message) || "Recognition failed");
163
+ }
164
+ const data = response.data;
165
+ return data.jsonResult;
166
+ }
167
+ }
168
+ // 导出常量实例
169
+ export const mlkit = new Mlkit();
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "assistsx-js",
3
- "version": "0.1.27",
3
+ "version": "0.1.28",
4
4
  "description": "assistsx-js自动化开发SDK",
5
5
  "main": "dist/index.js",
6
6
  "module": "dist/index.js",
package/src/global.d.ts CHANGED
@@ -39,6 +39,10 @@ declare global {
39
39
  call(method: string): string | null;
40
40
  };
41
41
  assistsxGalleryCallback: (data: string) => void;
42
+ assistsxMlkit: {
43
+ call(method: string): string | null;
44
+ };
45
+ assistsxMlkitCallback: (data: string) => void;
42
46
  }
43
47
  }
44
48
 
package/src/index.ts CHANGED
@@ -21,4 +21,6 @@ export * from "./filesystem/fileio/file-io";
21
21
  export * from "./filesystem/fileutils/file-utils";
22
22
  export * from "./ime/ime";
23
23
  export * from "./imageutils/image-utils";
24
- export * from "./gallery/gallery";
24
+ export * from "./gallery/gallery";
25
+ export * from "./mlkit/mlkit";
26
+ export * from "./mlkit/MlkitCallMethod";
@@ -0,0 +1,31 @@
1
+ /**
2
+ * ML Kit 文字识别相关的方法常量定义
3
+ * 支持识别屏幕中指定词组位置以及识别屏幕文字内容位置
4
+ */
5
+ export const MlkitCallMethod = {
6
+ /**
7
+ * 识别屏幕中指定词组的位置(基于当前截图)
8
+ * 参数:targetText 必填;region 可选 { left, top, right, bottom };rotationDegrees 可选,默认 0
9
+ */
10
+ findPhrasePositions: "findPhrasePositions",
11
+
12
+ /**
13
+ * 识别屏幕中所有文字内容及其位置(基于当前截图)
14
+ * 参数:region 可选 { left, top, right, bottom };rotationDegrees 可选,默认 0
15
+ */
16
+ getScreenTextPositions: "getScreenTextPositions",
17
+
18
+ /**
19
+ * 识别屏幕中指定词组的位置,直接返回 JSON 字符串(基于当前截图)
20
+ * 参数:targetText 必填;region 可选 { left, top, right, bottom };rotationDegrees 可选,默认 0
21
+ */
22
+ findPhrasePositionsOnScreenAsJson: "findPhrasePositionsOnScreenAsJson",
23
+
24
+ /**
25
+ * 识别屏幕中所有文字及其位置,直接返回 JSON 字符串(基于当前截图)
26
+ * 参数:region 可选 { left, top, right, bottom };rotationDegrees 可选,默认 0
27
+ */
28
+ getScreenTextPositionsAsJson: "getScreenTextPositionsAsJson",
29
+ } as const;
30
+
31
+ export type MlkitCallMethodType = (typeof MlkitCallMethod)[keyof typeof MlkitCallMethod];
@@ -0,0 +1,284 @@
1
+ /**
2
+ * ML Kit 文字识别相关功能
3
+ * 提供识别屏幕中指定词组位置、识别屏幕文字内容位置的能力
4
+ */
5
+ import { CallResponse } from "../CallResponse";
6
+ import { decodeBase64UTF8, generateUUID } from "../Utils";
7
+ import { MlkitCallMethod } from "./MlkitCallMethod";
8
+
9
+ /**
10
+ * 识别区域接口,用于限定识别范围
11
+ */
12
+ export interface MlkitRegion {
13
+ left: number;
14
+ top: number;
15
+ right: number;
16
+ bottom: number;
17
+ }
18
+
19
+ /**
20
+ * 文字位置信息
21
+ */
22
+ export interface TextPosition {
23
+ text: string;
24
+ left: number;
25
+ top: number;
26
+ right: number;
27
+ bottom: number;
28
+ }
29
+
30
+ /**
31
+ * findPhrasePositions / getScreenTextPositions 返回结果
32
+ */
33
+ export interface ScreenTextRecognitionResult {
34
+ fullText: string;
35
+ positions: TextPosition[];
36
+ processingTimeMillis: number;
37
+ }
38
+
39
+ /**
40
+ * findPhrasePositionsOnScreenAsJson / getScreenTextPositionsAsJson 返回结果
41
+ */
42
+ export interface ScreenTextJsonResult {
43
+ jsonResult: string;
44
+ }
45
+
46
+ // 回调函数存储对象
47
+ const callbacks: Map<string, (data: string) => void> = new Map();
48
+
49
+ // 初始化全局回调函数
50
+ if (typeof window !== "undefined" && !window.assistsxMlkitCallback) {
51
+ window.assistsxMlkitCallback = (data: string) => {
52
+ let callbackId: string | undefined;
53
+ try {
54
+ const json = decodeBase64UTF8(data);
55
+ const response = JSON.parse(json);
56
+ callbackId = response.callbackId;
57
+ if (callbackId) {
58
+ const callback = callbacks.get(callbackId);
59
+ if (callback) {
60
+ callback(json);
61
+ }
62
+ }
63
+ } catch (e) {
64
+ console.error("Mlkit callback error:", e);
65
+ } finally {
66
+ if (callbackId) {
67
+ callbacks.delete(callbackId);
68
+ }
69
+ }
70
+ };
71
+ }
72
+
73
+ export class Mlkit {
74
+ /**
75
+ * 执行异步调用
76
+ * @param method 方法名
77
+ * @param args 参数对象
78
+ * @param timeout 超时时间(秒),默认30秒
79
+ * @returns Promise<调用响应>
80
+ */
81
+ private async asyncCall(
82
+ method: string,
83
+ args?: any,
84
+ timeout: number = 30
85
+ ): Promise<CallResponse> {
86
+ const uuid = generateUUID();
87
+ const params = {
88
+ method,
89
+ arguments: args ? args : undefined,
90
+ callbackId: uuid,
91
+ };
92
+ const promise = new Promise<string>((resolve) => {
93
+ callbacks.set(uuid, (data: string) => {
94
+ resolve(data);
95
+ });
96
+ setTimeout(() => {
97
+ callbacks.delete(uuid);
98
+ resolve(JSON.stringify(new CallResponse(0, null, uuid)));
99
+ }, timeout * 1000);
100
+ });
101
+ const result = window.assistsxMlkit.call(JSON.stringify(params));
102
+ const promiseResult = await promise;
103
+ if (typeof promiseResult === "string") {
104
+ const responseData = JSON.parse(promiseResult);
105
+ return new CallResponse(
106
+ responseData.code,
107
+ responseData.data,
108
+ responseData.callbackId
109
+ );
110
+ }
111
+ throw new Error("Call failed");
112
+ }
113
+
114
+ /**
115
+ * 识别屏幕中指定词组的位置(基于当前截图)
116
+ * @param targetText 要搜索的目标词组(必填)
117
+ * @param options 可选参数:region 识别区域;rotationDegrees 旋转角度,默认 0;timeout 超时时间
118
+ * @returns Promise<识别结果>
119
+ */
120
+ async findPhrasePositions(
121
+ targetText: string,
122
+ options: {
123
+ region?: MlkitRegion;
124
+ rotationDegrees?: number;
125
+ timeout?: number;
126
+ } = {}
127
+ ): Promise<ScreenTextRecognitionResult> {
128
+ if (!targetText || targetText.trim() === "") {
129
+ throw new Error("targetText cannot be empty");
130
+ }
131
+
132
+ const {
133
+ region,
134
+ rotationDegrees = 0,
135
+ timeout,
136
+ } = options;
137
+
138
+ const response = await this.asyncCall(
139
+ MlkitCallMethod.findPhrasePositions,
140
+ {
141
+ targetText: targetText.trim(),
142
+ ...(region && {
143
+ left: region.left,
144
+ top: region.top,
145
+ right: region.right,
146
+ bottom: region.bottom,
147
+ }),
148
+ rotationDegrees,
149
+ },
150
+ timeout
151
+ );
152
+
153
+ if (!response.isSuccess()) {
154
+ throw new Error(response.data?.message || "Recognition failed");
155
+ }
156
+ return response.data as ScreenTextRecognitionResult;
157
+ }
158
+
159
+ /**
160
+ * 识别屏幕中所有文字内容及其位置(基于当前截图)
161
+ * @param options 可选参数:region 识别区域;rotationDegrees 旋转角度,默认 0;timeout 超时时间
162
+ * @returns Promise<识别结果>
163
+ */
164
+ async getScreenTextPositions(
165
+ options: {
166
+ region?: MlkitRegion;
167
+ rotationDegrees?: number;
168
+ timeout?: number;
169
+ } = {}
170
+ ): Promise<ScreenTextRecognitionResult> {
171
+ const {
172
+ region,
173
+ rotationDegrees = 0,
174
+ timeout,
175
+ } = options;
176
+
177
+ const response = await this.asyncCall(
178
+ MlkitCallMethod.getScreenTextPositions,
179
+ {
180
+ ...(region && {
181
+ left: region.left,
182
+ top: region.top,
183
+ right: region.right,
184
+ bottom: region.bottom,
185
+ }),
186
+ rotationDegrees,
187
+ },
188
+ timeout
189
+ );
190
+
191
+ if (!response.isSuccess()) {
192
+ throw new Error(response.data?.message || "Recognition failed");
193
+ }
194
+ return response.data as ScreenTextRecognitionResult;
195
+ }
196
+
197
+ /**
198
+ * 识别屏幕中指定词组的位置,直接返回 JSON 字符串(基于当前截图)
199
+ * @param targetText 要搜索的目标词组(必填)
200
+ * @param options 可选参数:region 识别区域;rotationDegrees 旋转角度,默认 0;timeout 超时时间
201
+ * @returns Promise<JSON 字符串结果>
202
+ */
203
+ async findPhrasePositionsOnScreenAsJson(
204
+ targetText: string,
205
+ options: {
206
+ region?: MlkitRegion;
207
+ rotationDegrees?: number;
208
+ timeout?: number;
209
+ } = {}
210
+ ): Promise<string> {
211
+ if (!targetText || targetText.trim() === "") {
212
+ throw new Error("targetText cannot be empty");
213
+ }
214
+
215
+ const {
216
+ region,
217
+ rotationDegrees = 0,
218
+ timeout,
219
+ } = options;
220
+
221
+ const response = await this.asyncCall(
222
+ MlkitCallMethod.findPhrasePositionsOnScreenAsJson,
223
+ {
224
+ targetText: targetText.trim(),
225
+ ...(region && {
226
+ left: region.left,
227
+ top: region.top,
228
+ right: region.right,
229
+ bottom: region.bottom,
230
+ }),
231
+ rotationDegrees,
232
+ },
233
+ timeout
234
+ );
235
+
236
+ if (!response.isSuccess()) {
237
+ throw new Error(response.data?.message || "Recognition failed");
238
+ }
239
+ const data = response.data as ScreenTextJsonResult;
240
+ return data.jsonResult;
241
+ }
242
+
243
+ /**
244
+ * 识别屏幕中所有文字及其位置,直接返回 JSON 字符串(基于当前截图)
245
+ * @param options 可选参数:region 识别区域;rotationDegrees 旋转角度,默认 0;timeout 超时时间
246
+ * @returns Promise<JSON 字符串结果>
247
+ */
248
+ async getScreenTextPositionsAsJson(
249
+ options: {
250
+ region?: MlkitRegion;
251
+ rotationDegrees?: number;
252
+ timeout?: number;
253
+ } = {}
254
+ ): Promise<string> {
255
+ const {
256
+ region,
257
+ rotationDegrees = 0,
258
+ timeout,
259
+ } = options;
260
+
261
+ const response = await this.asyncCall(
262
+ MlkitCallMethod.getScreenTextPositionsAsJson,
263
+ {
264
+ ...(region && {
265
+ left: region.left,
266
+ top: region.top,
267
+ right: region.right,
268
+ bottom: region.bottom,
269
+ }),
270
+ rotationDegrees,
271
+ },
272
+ timeout
273
+ );
274
+
275
+ if (!response.isSuccess()) {
276
+ throw new Error(response.data?.message || "Recognition failed");
277
+ }
278
+ const data = response.data as ScreenTextJsonResult;
279
+ return data.jsonResult;
280
+ }
281
+ }
282
+
283
+ // 导出常量实例
284
+ export const mlkit = new Mlkit();