MaaFw 2.1.0__py3-none-manylinux2014_x86_64.whl → 5.4.0b1__py3-none-manylinux2014_x86_64.whl
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.
- maa/__init__.py +7 -5
- maa/agent/__init__.py +12 -0
- maa/agent/agent_server.py +350 -0
- maa/agent_client.py +291 -0
- maa/bin/libMaaAdbControlUnit.so +0 -0
- maa/bin/libMaaAgentClient.so +0 -0
- maa/bin/libMaaAgentServer.so +0 -0
- maa/bin/libMaaCustomControlUnit.so +0 -0
- maa/bin/libMaaFramework.so +0 -0
- maa/bin/libMaaToolkit.so +0 -0
- maa/bin/libMaaUtils.so +0 -0
- maa/bin/libc++.so.1 +0 -0
- maa/bin/libc++abi.so.1 +0 -0
- maa/bin/libfastdeploy_ppocr.so +0 -0
- maa/bin/{libopencv_world4.so.408 → libonnxruntime.so.1} +0 -0
- maa/bin/{libonnxruntime.so.1.18.0 → libopencv_world4.so.411} +0 -0
- maa/bin/libunwind.so.1 +0 -0
- maa/bin/plugins/libMaaPluginDemo.so +0 -0
- maa/buffer.py +297 -153
- maa/context.py +449 -34
- maa/controller.py +760 -113
- maa/custom_action.py +46 -3
- maa/custom_recognition.py +69 -11
- maa/define.py +539 -42
- maa/event_sink.py +103 -0
- maa/job.py +95 -36
- maa/library.py +182 -53
- maa/pipeline.py +509 -0
- maa/resource.py +598 -71
- maa/tasker.py +696 -156
- maa/toolkit.py +125 -165
- maafw-5.4.0b1.dist-info/METADATA +297 -0
- maafw-5.4.0b1.dist-info/RECORD +35 -0
- maafw-5.4.0b1.dist-info/WHEEL +4 -0
- MaaFw-2.1.0.dist-info/METADATA +0 -166
- MaaFw-2.1.0.dist-info/RECORD +0 -26
- MaaFw-2.1.0.dist-info/WHEEL +0 -4
- MaaFw-2.1.0.dist-info/top_level.txt +0 -1
- maa/bin/libMaaDbgControlUnit.so +0 -0
- maa/notification_handler.py +0 -191
- {MaaFw-2.1.0.dist-info → maafw-5.4.0b1.dist-info/licenses}/LICENSE.md +0 -0
maa/buffer.py
CHANGED
|
@@ -9,21 +9,23 @@ from .library import Library
|
|
|
9
9
|
|
|
10
10
|
|
|
11
11
|
class StringBuffer:
|
|
12
|
+
"""字符串缓冲区 / String buffer
|
|
13
|
+
|
|
14
|
+
用于在 Python 和 C API 之间传递字符串数据。
|
|
15
|
+
Used to pass string data between Python and C API.
|
|
16
|
+
"""
|
|
17
|
+
|
|
12
18
|
_handle: MaaStringBufferHandle
|
|
13
19
|
_own: bool
|
|
14
20
|
|
|
15
21
|
def __init__(self, handle: Optional[MaaStringBufferHandle] = None):
|
|
16
|
-
if not Library.initialized:
|
|
17
|
-
raise RuntimeError(
|
|
18
|
-
"Library not initialized, please call `library.open()` first."
|
|
19
|
-
)
|
|
20
22
|
self._set_api_properties()
|
|
21
23
|
|
|
22
24
|
if handle:
|
|
23
25
|
self._handle = handle
|
|
24
26
|
self._own = False
|
|
25
27
|
else:
|
|
26
|
-
self._handle = Library.framework.MaaStringBufferCreate()
|
|
28
|
+
self._handle = Library.framework().MaaStringBufferCreate()
|
|
27
29
|
self._own = True
|
|
28
30
|
|
|
29
31
|
if not self._handle:
|
|
@@ -31,26 +33,49 @@ class StringBuffer:
|
|
|
31
33
|
|
|
32
34
|
def __del__(self):
|
|
33
35
|
if self._handle and self._own:
|
|
34
|
-
Library.framework.MaaStringBufferDestroy(self._handle)
|
|
36
|
+
Library.framework().MaaStringBufferDestroy(self._handle)
|
|
35
37
|
|
|
36
38
|
def get(self) -> str:
|
|
37
|
-
|
|
38
|
-
|
|
39
|
+
"""获取缓冲区内容 / Get buffer content
|
|
40
|
+
|
|
41
|
+
Returns:
|
|
42
|
+
str: 字符串内容 / String content
|
|
43
|
+
"""
|
|
44
|
+
buff = Library.framework().MaaStringBufferGet(self._handle)
|
|
45
|
+
sz = Library.framework().MaaStringBufferSize(self._handle)
|
|
39
46
|
return ctypes.string_at(buff, sz).decode()
|
|
40
47
|
|
|
41
48
|
def set(self, value: Union[str, bytes]) -> bool:
|
|
49
|
+
"""设置缓冲区内容 / Set buffer content
|
|
50
|
+
|
|
51
|
+
Args:
|
|
52
|
+
value: 字符串或字节数据 / String or bytes data
|
|
53
|
+
|
|
54
|
+
Returns:
|
|
55
|
+
bool: 是否成功 / Whether successful
|
|
56
|
+
"""
|
|
42
57
|
if isinstance(value, str):
|
|
43
58
|
value = value.encode()
|
|
44
59
|
return bool(
|
|
45
|
-
Library.framework.MaaStringBufferSetEx(self._handle, value, len(value))
|
|
60
|
+
Library.framework().MaaStringBufferSetEx(self._handle, value, len(value))
|
|
46
61
|
)
|
|
47
62
|
|
|
48
63
|
@property
|
|
49
64
|
def empty(self) -> bool:
|
|
50
|
-
|
|
65
|
+
"""判断缓冲区是否为空 / Check if buffer is empty
|
|
66
|
+
|
|
67
|
+
Returns:
|
|
68
|
+
bool: 是否为空 / Whether empty
|
|
69
|
+
"""
|
|
70
|
+
return bool(Library.framework().MaaStringBufferIsEmpty(self._handle))
|
|
51
71
|
|
|
52
72
|
def clear(self) -> bool:
|
|
53
|
-
|
|
73
|
+
"""清空缓冲区 / Clear buffer
|
|
74
|
+
|
|
75
|
+
Returns:
|
|
76
|
+
bool: 是否成功 / Whether successful
|
|
77
|
+
"""
|
|
78
|
+
return bool(Library.framework().MaaStringBufferClear(self._handle))
|
|
54
79
|
|
|
55
80
|
_api_properties_initialized: bool = False
|
|
56
81
|
|
|
@@ -60,32 +85,32 @@ class StringBuffer:
|
|
|
60
85
|
return
|
|
61
86
|
StringBuffer._api_properties_initialized = True
|
|
62
87
|
|
|
63
|
-
Library.framework.MaaStringBufferCreate.restype = MaaStringBufferHandle
|
|
64
|
-
Library.framework.MaaStringBufferCreate.argtypes = []
|
|
88
|
+
Library.framework().MaaStringBufferCreate.restype = MaaStringBufferHandle
|
|
89
|
+
Library.framework().MaaStringBufferCreate.argtypes = []
|
|
65
90
|
|
|
66
|
-
Library.framework.MaaStringBufferDestroy.restype = None
|
|
67
|
-
Library.framework.MaaStringBufferDestroy.argtypes = [MaaStringBufferHandle]
|
|
91
|
+
Library.framework().MaaStringBufferDestroy.restype = None
|
|
92
|
+
Library.framework().MaaStringBufferDestroy.argtypes = [MaaStringBufferHandle]
|
|
68
93
|
|
|
69
|
-
Library.framework.MaaStringBufferIsEmpty.restype = MaaBool
|
|
70
|
-
Library.framework.MaaStringBufferIsEmpty.argtypes = [MaaStringBufferHandle]
|
|
94
|
+
Library.framework().MaaStringBufferIsEmpty.restype = MaaBool
|
|
95
|
+
Library.framework().MaaStringBufferIsEmpty.argtypes = [MaaStringBufferHandle]
|
|
71
96
|
|
|
72
|
-
Library.framework.MaaStringBufferClear.restype = MaaBool
|
|
73
|
-
Library.framework.MaaStringBufferClear.argtypes = [MaaStringBufferHandle]
|
|
97
|
+
Library.framework().MaaStringBufferClear.restype = MaaBool
|
|
98
|
+
Library.framework().MaaStringBufferClear.argtypes = [MaaStringBufferHandle]
|
|
74
99
|
|
|
75
|
-
Library.framework.MaaStringBufferGet.restype = ctypes.c_char_p
|
|
76
|
-
Library.framework.MaaStringBufferGet.argtypes = [MaaStringBufferHandle]
|
|
100
|
+
Library.framework().MaaStringBufferGet.restype = ctypes.c_char_p
|
|
101
|
+
Library.framework().MaaStringBufferGet.argtypes = [MaaStringBufferHandle]
|
|
77
102
|
|
|
78
|
-
Library.framework.MaaStringBufferSize.restype = MaaSize
|
|
79
|
-
Library.framework.MaaStringBufferSize.argtypes = [MaaStringBufferHandle]
|
|
103
|
+
Library.framework().MaaStringBufferSize.restype = MaaSize
|
|
104
|
+
Library.framework().MaaStringBufferSize.argtypes = [MaaStringBufferHandle]
|
|
80
105
|
|
|
81
|
-
Library.framework.MaaStringBufferSet.restype = MaaBool
|
|
82
|
-
Library.framework.MaaStringBufferSet.argtypes = [
|
|
106
|
+
Library.framework().MaaStringBufferSet.restype = MaaBool
|
|
107
|
+
Library.framework().MaaStringBufferSet.argtypes = [
|
|
83
108
|
MaaStringBufferHandle,
|
|
84
109
|
ctypes.c_char_p,
|
|
85
110
|
]
|
|
86
111
|
|
|
87
|
-
Library.framework.MaaStringBufferSetEx.restype = MaaBool
|
|
88
|
-
Library.framework.MaaStringBufferSetEx.argtypes = [
|
|
112
|
+
Library.framework().MaaStringBufferSetEx.restype = MaaBool
|
|
113
|
+
Library.framework().MaaStringBufferSetEx.argtypes = [
|
|
89
114
|
MaaStringBufferHandle,
|
|
90
115
|
ctypes.c_char_p,
|
|
91
116
|
MaaSize,
|
|
@@ -93,21 +118,23 @@ class StringBuffer:
|
|
|
93
118
|
|
|
94
119
|
|
|
95
120
|
class StringListBuffer:
|
|
121
|
+
"""字符串列表缓冲区 / String list buffer
|
|
122
|
+
|
|
123
|
+
用于在 Python 和 C API 之间传递字符串列表数据。
|
|
124
|
+
Used to pass string list data between Python and C API.
|
|
125
|
+
"""
|
|
126
|
+
|
|
96
127
|
_handle: MaaStringListBufferHandle
|
|
97
128
|
_own: bool
|
|
98
129
|
|
|
99
130
|
def __init__(self, handle: Optional[MaaStringListBufferHandle] = None):
|
|
100
|
-
if not Library.initialized:
|
|
101
|
-
raise RuntimeError(
|
|
102
|
-
"Library not initialized, please call `library.open()` first."
|
|
103
|
-
)
|
|
104
131
|
self._set_api_properties()
|
|
105
132
|
|
|
106
133
|
if handle:
|
|
107
134
|
self._handle = handle
|
|
108
135
|
self._own = False
|
|
109
136
|
else:
|
|
110
|
-
self._handle = Library.framework.MaaStringListBufferCreate()
|
|
137
|
+
self._handle = Library.framework().MaaStringListBufferCreate()
|
|
111
138
|
self._own = True
|
|
112
139
|
|
|
113
140
|
if not self._handle:
|
|
@@ -115,40 +142,70 @@ class StringListBuffer:
|
|
|
115
142
|
|
|
116
143
|
def __del__(self):
|
|
117
144
|
if self._handle and self._own:
|
|
118
|
-
Library.framework.MaaStringListBufferDestroy(self._handle)
|
|
145
|
+
Library.framework().MaaStringListBufferDestroy(self._handle)
|
|
119
146
|
|
|
120
147
|
def get(self) -> List[str]:
|
|
121
|
-
|
|
148
|
+
"""获取字符串列表 / Get string list
|
|
149
|
+
|
|
150
|
+
Returns:
|
|
151
|
+
List[str]: 字符串列表 / String list
|
|
152
|
+
"""
|
|
153
|
+
count = Library.framework().MaaStringListBufferSize(self._handle)
|
|
122
154
|
result = []
|
|
123
155
|
for i in range(count):
|
|
124
|
-
buff = Library.framework.MaaStringListBufferAt(self._handle, i)
|
|
156
|
+
buff = Library.framework().MaaStringListBufferAt(self._handle, i)
|
|
125
157
|
s = StringBuffer(buff).get()
|
|
126
158
|
result.append(s)
|
|
127
159
|
return result
|
|
128
160
|
|
|
129
161
|
def set(self, value: List[str]) -> bool:
|
|
130
|
-
|
|
162
|
+
"""设置字符串列表 / Set string list
|
|
163
|
+
|
|
164
|
+
Args:
|
|
165
|
+
value: 字符串列表 / String list
|
|
166
|
+
|
|
167
|
+
Returns:
|
|
168
|
+
bool: 是否成功 / Whether successful
|
|
169
|
+
"""
|
|
170
|
+
self.clear()
|
|
131
171
|
for s in value:
|
|
132
|
-
|
|
133
|
-
buff.set(s)
|
|
134
|
-
if not Library.framework.MaaStringListBufferAppend(
|
|
135
|
-
self._handle, buff._handle
|
|
136
|
-
):
|
|
172
|
+
if not self.append(s):
|
|
137
173
|
return False
|
|
138
174
|
return True
|
|
139
175
|
|
|
140
176
|
def append(self, value: str) -> bool:
|
|
177
|
+
"""追加字符串 / Append string
|
|
178
|
+
|
|
179
|
+
Args:
|
|
180
|
+
value: 要追加的字符串 / String to append
|
|
181
|
+
|
|
182
|
+
Returns:
|
|
183
|
+
bool: 是否成功 / Whether successful
|
|
184
|
+
"""
|
|
141
185
|
buff = StringBuffer()
|
|
142
186
|
buff.set(value)
|
|
143
187
|
return bool(
|
|
144
|
-
Library.framework.MaaStringListBufferAppend(self._handle, buff._handle)
|
|
188
|
+
Library.framework().MaaStringListBufferAppend(self._handle, buff._handle)
|
|
145
189
|
)
|
|
146
190
|
|
|
147
191
|
def remove(self, index: int) -> bool:
|
|
148
|
-
|
|
192
|
+
"""移除指定索引的字符串 / Remove string at index
|
|
193
|
+
|
|
194
|
+
Args:
|
|
195
|
+
index: 要移除的索引 / Index to remove
|
|
196
|
+
|
|
197
|
+
Returns:
|
|
198
|
+
bool: 是否成功 / Whether successful
|
|
199
|
+
"""
|
|
200
|
+
return bool(Library.framework().MaaStringListBufferRemove(self._handle, index))
|
|
149
201
|
|
|
150
202
|
def clear(self) -> bool:
|
|
151
|
-
|
|
203
|
+
"""清空列表 / Clear list
|
|
204
|
+
|
|
205
|
+
Returns:
|
|
206
|
+
bool: 是否成功 / Whether successful
|
|
207
|
+
"""
|
|
208
|
+
return bool(Library.framework().MaaStringListBufferClear(self._handle))
|
|
152
209
|
|
|
153
210
|
_api_properties_initialized: bool = False
|
|
154
211
|
|
|
@@ -158,63 +215,68 @@ class StringListBuffer:
|
|
|
158
215
|
return
|
|
159
216
|
StringListBuffer._api_properties_initialized = True
|
|
160
217
|
|
|
161
|
-
Library.framework.MaaStringListBufferCreate.restype =
|
|
162
|
-
|
|
218
|
+
Library.framework().MaaStringListBufferCreate.restype = (
|
|
219
|
+
MaaStringListBufferHandle
|
|
220
|
+
)
|
|
221
|
+
Library.framework().MaaStringListBufferCreate.argtypes = []
|
|
163
222
|
|
|
164
|
-
Library.framework.MaaStringListBufferDestroy.restype = None
|
|
165
|
-
Library.framework.MaaStringListBufferDestroy.argtypes = [
|
|
223
|
+
Library.framework().MaaStringListBufferDestroy.restype = None
|
|
224
|
+
Library.framework().MaaStringListBufferDestroy.argtypes = [
|
|
166
225
|
MaaStringListBufferHandle
|
|
167
226
|
]
|
|
168
227
|
|
|
169
|
-
Library.framework.MaaStringListBufferIsEmpty.restype = MaaBool
|
|
170
|
-
Library.framework.MaaStringListBufferIsEmpty.argtypes = [
|
|
228
|
+
Library.framework().MaaStringListBufferIsEmpty.restype = MaaBool
|
|
229
|
+
Library.framework().MaaStringListBufferIsEmpty.argtypes = [
|
|
171
230
|
MaaStringListBufferHandle
|
|
172
231
|
]
|
|
173
232
|
|
|
174
|
-
Library.framework.MaaStringListBufferClear.restype = MaaBool
|
|
175
|
-
Library.framework.MaaStringListBufferClear.argtypes = [
|
|
233
|
+
Library.framework().MaaStringListBufferClear.restype = MaaBool
|
|
234
|
+
Library.framework().MaaStringListBufferClear.argtypes = [
|
|
176
235
|
MaaStringListBufferHandle
|
|
177
236
|
]
|
|
178
237
|
|
|
179
|
-
Library.framework.MaaStringListBufferSize.restype = MaaSize
|
|
180
|
-
Library.framework.MaaStringListBufferSize.argtypes = [
|
|
238
|
+
Library.framework().MaaStringListBufferSize.restype = MaaSize
|
|
239
|
+
Library.framework().MaaStringListBufferSize.argtypes = [
|
|
240
|
+
MaaStringListBufferHandle
|
|
241
|
+
]
|
|
181
242
|
|
|
182
|
-
Library.framework.
|
|
183
|
-
Library.framework.
|
|
243
|
+
Library.framework().MaaStringListBufferAt.restype = MaaStringBufferHandle
|
|
244
|
+
Library.framework().MaaStringListBufferAt.argtypes = [
|
|
184
245
|
MaaStringListBufferHandle,
|
|
185
246
|
MaaSize,
|
|
186
247
|
]
|
|
187
248
|
|
|
188
|
-
Library.framework.MaaStringListBufferAppend.restype = MaaBool
|
|
189
|
-
Library.framework.MaaStringListBufferAppend.argtypes = [
|
|
249
|
+
Library.framework().MaaStringListBufferAppend.restype = MaaBool
|
|
250
|
+
Library.framework().MaaStringListBufferAppend.argtypes = [
|
|
190
251
|
MaaStringListBufferHandle,
|
|
191
252
|
MaaStringBufferHandle,
|
|
192
253
|
]
|
|
193
254
|
|
|
194
|
-
Library.framework.MaaStringListBufferRemove.restype = MaaBool
|
|
195
|
-
Library.framework.MaaStringListBufferRemove.argtypes = [
|
|
255
|
+
Library.framework().MaaStringListBufferRemove.restype = MaaBool
|
|
256
|
+
Library.framework().MaaStringListBufferRemove.argtypes = [
|
|
196
257
|
MaaStringListBufferHandle,
|
|
197
258
|
MaaSize,
|
|
198
259
|
]
|
|
199
260
|
|
|
200
261
|
|
|
201
262
|
class ImageBuffer:
|
|
263
|
+
"""图像缓冲区 / Image buffer
|
|
264
|
+
|
|
265
|
+
用于在 Python 和 C API 之间传递图像数据。图像格式为 BGR,与 OpenCV 兼容。
|
|
266
|
+
Used to pass image data between Python and C API. Image format is BGR, compatible with OpenCV.
|
|
267
|
+
"""
|
|
268
|
+
|
|
202
269
|
_handle: MaaImageBufferHandle
|
|
203
270
|
_own: bool
|
|
204
271
|
|
|
205
272
|
def __init__(self, c_handle: Optional[MaaImageBufferHandle] = None):
|
|
206
|
-
if not Library.initialized:
|
|
207
|
-
raise RuntimeError(
|
|
208
|
-
"Library not initialized, please call `library.open()` first."
|
|
209
|
-
)
|
|
210
|
-
|
|
211
273
|
self._set_api_properties()
|
|
212
274
|
|
|
213
275
|
if c_handle:
|
|
214
276
|
self._handle = c_handle
|
|
215
277
|
self._own = False
|
|
216
278
|
else:
|
|
217
|
-
self._handle = Library.framework.MaaImageBufferCreate()
|
|
279
|
+
self._handle = Library.framework().MaaImageBufferCreate()
|
|
218
280
|
self._own = True
|
|
219
281
|
|
|
220
282
|
if not self._handle:
|
|
@@ -222,16 +284,21 @@ class ImageBuffer:
|
|
|
222
284
|
|
|
223
285
|
def __del__(self):
|
|
224
286
|
if self._handle and self._own:
|
|
225
|
-
Library.framework.MaaImageBufferDestroy(self._handle)
|
|
287
|
+
Library.framework().MaaImageBufferDestroy(self._handle)
|
|
226
288
|
|
|
227
289
|
def get(self) -> numpy.ndarray:
|
|
228
|
-
|
|
290
|
+
"""获取图像数据 / Get image data
|
|
291
|
+
|
|
292
|
+
Returns:
|
|
293
|
+
numpy.ndarray: BGR 格式图像,形状为 (height, width, channels) / BGR format image with shape (height, width, channels)
|
|
294
|
+
"""
|
|
295
|
+
buff = Library.framework().MaaImageBufferGetRawData(self._handle)
|
|
229
296
|
if not buff:
|
|
230
297
|
return numpy.ndarray((0, 0, 3), dtype=numpy.uint8)
|
|
231
298
|
|
|
232
|
-
w = Library.framework.MaaImageBufferWidth(self._handle)
|
|
233
|
-
h = Library.framework.MaaImageBufferHeight(self._handle)
|
|
234
|
-
c = Library.framework.MaaImageBufferChannels(self._handle)
|
|
299
|
+
w = Library.framework().MaaImageBufferWidth(self._handle)
|
|
300
|
+
h = Library.framework().MaaImageBufferHeight(self._handle)
|
|
301
|
+
c = Library.framework().MaaImageBufferChannels(self._handle)
|
|
235
302
|
return copy.deepcopy(
|
|
236
303
|
numpy.ctypeslib.as_array(
|
|
237
304
|
ctypes.cast(buff, ctypes.POINTER(ctypes.c_uint8)), shape=(h, w, c)
|
|
@@ -239,11 +306,26 @@ class ImageBuffer:
|
|
|
239
306
|
)
|
|
240
307
|
|
|
241
308
|
def set(self, value: numpy.ndarray) -> bool:
|
|
309
|
+
"""设置图像数据 / Set image data
|
|
310
|
+
|
|
311
|
+
Args:
|
|
312
|
+
value: BGR 格式图像,形状为 (height, width, channels) / BGR format image with shape (height, width, channels)
|
|
313
|
+
|
|
314
|
+
Returns:
|
|
315
|
+
bool: 是否成功 / Whether successful
|
|
316
|
+
|
|
317
|
+
Raises:
|
|
318
|
+
TypeError: 如果 value 不是 numpy.ndarray
|
|
319
|
+
"""
|
|
242
320
|
if not isinstance(value, numpy.ndarray):
|
|
243
321
|
raise TypeError("value must be a numpy.ndarray")
|
|
244
322
|
|
|
323
|
+
# 确保数组是 C-contiguous 的,避免切片视图导致的内存不连续问题
|
|
324
|
+
if not value.flags['C_CONTIGUOUS']:
|
|
325
|
+
value = numpy.ascontiguousarray(value)
|
|
326
|
+
|
|
245
327
|
return bool(
|
|
246
|
-
Library.framework.MaaImageBufferSetRawData(
|
|
328
|
+
Library.framework().MaaImageBufferSetRawData(
|
|
247
329
|
self._handle,
|
|
248
330
|
value.ctypes.data,
|
|
249
331
|
value.shape[1],
|
|
@@ -254,10 +336,20 @@ class ImageBuffer:
|
|
|
254
336
|
|
|
255
337
|
@property
|
|
256
338
|
def empty(self) -> bool:
|
|
257
|
-
|
|
339
|
+
"""判断缓冲区是否为空 / Check if buffer is empty
|
|
340
|
+
|
|
341
|
+
Returns:
|
|
342
|
+
bool: 是否为空 / Whether empty
|
|
343
|
+
"""
|
|
344
|
+
return bool(Library.framework().MaaImageBufferIsEmpty(self._handle))
|
|
258
345
|
|
|
259
346
|
def clear(self) -> bool:
|
|
260
|
-
|
|
347
|
+
"""清空缓冲区 / Clear buffer
|
|
348
|
+
|
|
349
|
+
Returns:
|
|
350
|
+
bool: 是否成功 / Whether successful
|
|
351
|
+
"""
|
|
352
|
+
return bool(Library.framework().MaaImageBufferClear(self._handle))
|
|
261
353
|
|
|
262
354
|
_api_properties_initialized: bool = False
|
|
263
355
|
|
|
@@ -267,29 +359,29 @@ class ImageBuffer:
|
|
|
267
359
|
return
|
|
268
360
|
ImageBuffer._api_properties_initialized = True
|
|
269
361
|
|
|
270
|
-
Library.framework.MaaImageBufferCreate.restype = MaaImageBufferHandle
|
|
271
|
-
Library.framework.MaaImageBufferCreate.argtypes = []
|
|
362
|
+
Library.framework().MaaImageBufferCreate.restype = MaaImageBufferHandle
|
|
363
|
+
Library.framework().MaaImageBufferCreate.argtypes = []
|
|
272
364
|
|
|
273
|
-
Library.framework.MaaImageBufferDestroy.restype = None
|
|
274
|
-
Library.framework.MaaImageBufferDestroy.argtypes = [MaaImageBufferHandle]
|
|
365
|
+
Library.framework().MaaImageBufferDestroy.restype = None
|
|
366
|
+
Library.framework().MaaImageBufferDestroy.argtypes = [MaaImageBufferHandle]
|
|
275
367
|
|
|
276
|
-
Library.framework.MaaImageBufferGetRawData.restype = ctypes.c_void_p
|
|
277
|
-
Library.framework.MaaImageBufferGetRawData.argtypes = [MaaImageBufferHandle]
|
|
368
|
+
Library.framework().MaaImageBufferGetRawData.restype = ctypes.c_void_p
|
|
369
|
+
Library.framework().MaaImageBufferGetRawData.argtypes = [MaaImageBufferHandle]
|
|
278
370
|
|
|
279
|
-
Library.framework.MaaImageBufferWidth.restype = ctypes.c_int32
|
|
280
|
-
Library.framework.MaaImageBufferWidth.argtypes = [MaaImageBufferHandle]
|
|
371
|
+
Library.framework().MaaImageBufferWidth.restype = ctypes.c_int32
|
|
372
|
+
Library.framework().MaaImageBufferWidth.argtypes = [MaaImageBufferHandle]
|
|
281
373
|
|
|
282
|
-
Library.framework.MaaImageBufferHeight.restype = ctypes.c_int32
|
|
283
|
-
Library.framework.MaaImageBufferHeight.argtypes = [MaaImageBufferHandle]
|
|
374
|
+
Library.framework().MaaImageBufferHeight.restype = ctypes.c_int32
|
|
375
|
+
Library.framework().MaaImageBufferHeight.argtypes = [MaaImageBufferHandle]
|
|
284
376
|
|
|
285
|
-
Library.framework.MaaImageBufferChannels.restype = ctypes.c_int32
|
|
286
|
-
Library.framework.MaaImageBufferChannels.argtypes = [MaaImageBufferHandle]
|
|
377
|
+
Library.framework().MaaImageBufferChannels.restype = ctypes.c_int32
|
|
378
|
+
Library.framework().MaaImageBufferChannels.argtypes = [MaaImageBufferHandle]
|
|
287
379
|
|
|
288
|
-
Library.framework.MaaImageBufferType.restype = ctypes.c_int32
|
|
289
|
-
Library.framework.MaaImageBufferType.argtypes = [MaaImageBufferHandle]
|
|
380
|
+
Library.framework().MaaImageBufferType.restype = ctypes.c_int32
|
|
381
|
+
Library.framework().MaaImageBufferType.argtypes = [MaaImageBufferHandle]
|
|
290
382
|
|
|
291
|
-
Library.framework.MaaImageBufferSetRawData.restype = MaaBool
|
|
292
|
-
Library.framework.MaaImageBufferSetRawData.argtypes = [
|
|
383
|
+
Library.framework().MaaImageBufferSetRawData.restype = MaaBool
|
|
384
|
+
Library.framework().MaaImageBufferSetRawData.argtypes = [
|
|
293
385
|
MaaImageBufferHandle,
|
|
294
386
|
ctypes.c_void_p,
|
|
295
387
|
ctypes.c_int32,
|
|
@@ -297,29 +389,31 @@ class ImageBuffer:
|
|
|
297
389
|
ctypes.c_int32,
|
|
298
390
|
]
|
|
299
391
|
|
|
300
|
-
Library.framework.MaaImageBufferIsEmpty.restype = MaaBool
|
|
301
|
-
Library.framework.MaaImageBufferIsEmpty.argtypes = [MaaImageBufferHandle]
|
|
392
|
+
Library.framework().MaaImageBufferIsEmpty.restype = MaaBool
|
|
393
|
+
Library.framework().MaaImageBufferIsEmpty.argtypes = [MaaImageBufferHandle]
|
|
302
394
|
|
|
303
|
-
Library.framework.MaaImageBufferClear.restype = MaaBool
|
|
304
|
-
Library.framework.MaaImageBufferClear.argtypes = [MaaImageBufferHandle]
|
|
395
|
+
Library.framework().MaaImageBufferClear.restype = MaaBool
|
|
396
|
+
Library.framework().MaaImageBufferClear.argtypes = [MaaImageBufferHandle]
|
|
305
397
|
|
|
306
398
|
|
|
307
399
|
class ImageListBuffer:
|
|
400
|
+
"""图像列表缓冲区 / Image list buffer
|
|
401
|
+
|
|
402
|
+
用于在 Python 和 C API 之间传递图像列表数据。
|
|
403
|
+
Used to pass image list data between Python and C API.
|
|
404
|
+
"""
|
|
405
|
+
|
|
308
406
|
_handle: MaaImageListBufferHandle
|
|
309
407
|
_own: bool
|
|
310
408
|
|
|
311
409
|
def __init__(self, c_handle: Optional[MaaImageListBufferHandle] = None):
|
|
312
|
-
if not Library.initialized:
|
|
313
|
-
raise RuntimeError(
|
|
314
|
-
"Library not initialized, please call `library.open()` first."
|
|
315
|
-
)
|
|
316
410
|
self._set_api_properties()
|
|
317
411
|
|
|
318
412
|
if c_handle:
|
|
319
413
|
self._handle = c_handle
|
|
320
414
|
self._own = False
|
|
321
415
|
else:
|
|
322
|
-
self._handle = Library.framework.MaaImageListBufferCreate()
|
|
416
|
+
self._handle = Library.framework().MaaImageListBufferCreate()
|
|
323
417
|
self._own = True
|
|
324
418
|
|
|
325
419
|
if not self._handle:
|
|
@@ -327,40 +421,70 @@ class ImageListBuffer:
|
|
|
327
421
|
|
|
328
422
|
def __del__(self):
|
|
329
423
|
if self._handle and self._own:
|
|
330
|
-
Library.framework.MaaImageListBufferDestroy(self._handle)
|
|
424
|
+
Library.framework().MaaImageListBufferDestroy(self._handle)
|
|
331
425
|
|
|
332
426
|
def get(self) -> List[numpy.ndarray]:
|
|
333
|
-
|
|
427
|
+
"""获取图像列表 / Get image list
|
|
428
|
+
|
|
429
|
+
Returns:
|
|
430
|
+
List[numpy.ndarray]: 图像列表 / Image list
|
|
431
|
+
"""
|
|
432
|
+
count = Library.framework().MaaImageListBufferSize(self._handle)
|
|
334
433
|
result = []
|
|
335
434
|
for i in range(count):
|
|
336
|
-
buff = Library.framework.MaaImageListBufferAt(self._handle, i)
|
|
435
|
+
buff = Library.framework().MaaImageListBufferAt(self._handle, i)
|
|
337
436
|
img = ImageBuffer(buff).get()
|
|
338
437
|
result.append(img)
|
|
339
438
|
return result
|
|
340
439
|
|
|
341
440
|
def set(self, value: List[numpy.ndarray]) -> bool:
|
|
342
|
-
|
|
441
|
+
"""设置图像列表 / Set image list
|
|
442
|
+
|
|
443
|
+
Args:
|
|
444
|
+
value: 图像列表 / Image list
|
|
445
|
+
|
|
446
|
+
Returns:
|
|
447
|
+
bool: 是否成功 / Whether successful
|
|
448
|
+
"""
|
|
449
|
+
self.clear()
|
|
343
450
|
for img in value:
|
|
344
|
-
|
|
345
|
-
buff.set(img)
|
|
346
|
-
if not Library.framework.MaaImageListBufferAppend(
|
|
347
|
-
self._handle, buff._handle
|
|
348
|
-
):
|
|
451
|
+
if not self.append(img):
|
|
349
452
|
return False
|
|
350
453
|
return True
|
|
351
454
|
|
|
352
455
|
def append(self, value: numpy.ndarray) -> bool:
|
|
456
|
+
"""追加图像 / Append image
|
|
457
|
+
|
|
458
|
+
Args:
|
|
459
|
+
value: 要追加的图像 / Image to append
|
|
460
|
+
|
|
461
|
+
Returns:
|
|
462
|
+
bool: 是否成功 / Whether successful
|
|
463
|
+
"""
|
|
353
464
|
buff = ImageBuffer()
|
|
354
465
|
buff.set(value)
|
|
355
466
|
return bool(
|
|
356
|
-
Library.framework.MaaImageListBufferAppend(self._handle, buff._handle)
|
|
467
|
+
Library.framework().MaaImageListBufferAppend(self._handle, buff._handle)
|
|
357
468
|
)
|
|
358
469
|
|
|
359
470
|
def remove(self, index: int) -> bool:
|
|
360
|
-
|
|
471
|
+
"""移除指定索引的图像 / Remove image at index
|
|
472
|
+
|
|
473
|
+
Args:
|
|
474
|
+
index: 要移除的索引 / Index to remove
|
|
475
|
+
|
|
476
|
+
Returns:
|
|
477
|
+
bool: 是否成功 / Whether successful
|
|
478
|
+
"""
|
|
479
|
+
return bool(Library.framework().MaaImageListBufferRemove(self._handle, index))
|
|
361
480
|
|
|
362
481
|
def clear(self) -> bool:
|
|
363
|
-
|
|
482
|
+
"""清空列表 / Clear list
|
|
483
|
+
|
|
484
|
+
Returns:
|
|
485
|
+
bool: 是否成功 / Whether successful
|
|
486
|
+
"""
|
|
487
|
+
return bool(Library.framework().MaaImageListBufferClear(self._handle))
|
|
364
488
|
|
|
365
489
|
_api_properties_initialized: bool = False
|
|
366
490
|
|
|
@@ -370,61 +494,64 @@ class ImageListBuffer:
|
|
|
370
494
|
return
|
|
371
495
|
ImageListBuffer._api_properties_initialized = True
|
|
372
496
|
|
|
373
|
-
Library.framework.MaaImageListBufferCreate.restype = MaaImageListBufferHandle
|
|
374
|
-
Library.framework.MaaImageListBufferCreate.argtypes = []
|
|
497
|
+
Library.framework().MaaImageListBufferCreate.restype = MaaImageListBufferHandle
|
|
498
|
+
Library.framework().MaaImageListBufferCreate.argtypes = []
|
|
375
499
|
|
|
376
|
-
Library.framework.MaaImageListBufferDestroy.restype = None
|
|
377
|
-
Library.framework.MaaImageListBufferDestroy.argtypes = [
|
|
500
|
+
Library.framework().MaaImageListBufferDestroy.restype = None
|
|
501
|
+
Library.framework().MaaImageListBufferDestroy.argtypes = [
|
|
378
502
|
MaaImageListBufferHandle
|
|
379
503
|
]
|
|
380
504
|
|
|
381
|
-
Library.framework.MaaImageListBufferIsEmpty.restype = MaaBool
|
|
382
|
-
Library.framework.MaaImageListBufferIsEmpty.argtypes = [
|
|
505
|
+
Library.framework().MaaImageListBufferIsEmpty.restype = MaaBool
|
|
506
|
+
Library.framework().MaaImageListBufferIsEmpty.argtypes = [
|
|
383
507
|
MaaImageListBufferHandle
|
|
384
508
|
]
|
|
385
509
|
|
|
386
|
-
Library.framework.MaaImageListBufferClear.restype = MaaBool
|
|
387
|
-
Library.framework.MaaImageListBufferClear.argtypes = [
|
|
510
|
+
Library.framework().MaaImageListBufferClear.restype = MaaBool
|
|
511
|
+
Library.framework().MaaImageListBufferClear.argtypes = [
|
|
512
|
+
MaaImageListBufferHandle
|
|
513
|
+
]
|
|
388
514
|
|
|
389
|
-
Library.framework.MaaImageListBufferSize.restype = MaaSize
|
|
390
|
-
Library.framework.MaaImageListBufferSize.argtypes = [MaaImageListBufferHandle]
|
|
515
|
+
Library.framework().MaaImageListBufferSize.restype = MaaSize
|
|
516
|
+
Library.framework().MaaImageListBufferSize.argtypes = [MaaImageListBufferHandle]
|
|
391
517
|
|
|
392
|
-
Library.framework.MaaImageListBufferAt.restype = MaaImageBufferHandle
|
|
393
|
-
Library.framework.MaaImageListBufferAt.argtypes = [
|
|
518
|
+
Library.framework().MaaImageListBufferAt.restype = MaaImageBufferHandle
|
|
519
|
+
Library.framework().MaaImageListBufferAt.argtypes = [
|
|
394
520
|
MaaImageListBufferHandle,
|
|
395
521
|
MaaSize,
|
|
396
522
|
]
|
|
397
523
|
|
|
398
|
-
Library.framework.MaaImageListBufferAppend.restype = MaaBool
|
|
399
|
-
Library.framework.MaaImageListBufferAppend.argtypes = [
|
|
524
|
+
Library.framework().MaaImageListBufferAppend.restype = MaaBool
|
|
525
|
+
Library.framework().MaaImageListBufferAppend.argtypes = [
|
|
400
526
|
MaaImageListBufferHandle,
|
|
401
527
|
MaaImageBufferHandle,
|
|
402
528
|
]
|
|
403
529
|
|
|
404
|
-
Library.framework.MaaImageListBufferRemove.restype = MaaBool
|
|
405
|
-
Library.framework.MaaImageListBufferRemove.argtypes = [
|
|
530
|
+
Library.framework().MaaImageListBufferRemove.restype = MaaBool
|
|
531
|
+
Library.framework().MaaImageListBufferRemove.argtypes = [
|
|
406
532
|
MaaImageListBufferHandle,
|
|
407
533
|
MaaSize,
|
|
408
534
|
]
|
|
409
535
|
|
|
410
536
|
|
|
411
537
|
class RectBuffer:
|
|
538
|
+
"""矩形缓冲区 / Rectangle buffer
|
|
539
|
+
|
|
540
|
+
用于在 Python 和 C API 之间传递矩形数据(x, y, width, height)。
|
|
541
|
+
Used to pass rectangle data (x, y, width, height) between Python and C API.
|
|
542
|
+
"""
|
|
543
|
+
|
|
412
544
|
_handle: MaaRectHandle
|
|
413
545
|
_own: bool
|
|
414
546
|
|
|
415
547
|
def __init__(self, c_handle: Optional[MaaRectHandle] = None):
|
|
416
|
-
if not Library.initialized:
|
|
417
|
-
raise RuntimeError(
|
|
418
|
-
"Library not initialized, please call `library.open()` first."
|
|
419
|
-
)
|
|
420
|
-
|
|
421
548
|
self._set_api_properties()
|
|
422
549
|
|
|
423
550
|
if c_handle:
|
|
424
551
|
self._handle = c_handle
|
|
425
552
|
self._own = False
|
|
426
553
|
else:
|
|
427
|
-
self._handle = Library.framework.MaaRectCreate()
|
|
554
|
+
self._handle = Library.framework().MaaRectCreate()
|
|
428
555
|
self._own = True
|
|
429
556
|
|
|
430
557
|
if not self._handle:
|
|
@@ -432,17 +559,34 @@ class RectBuffer:
|
|
|
432
559
|
|
|
433
560
|
def __del__(self):
|
|
434
561
|
if self._handle and self._own:
|
|
435
|
-
Library.framework.MaaRectDestroy(self._handle)
|
|
562
|
+
Library.framework().MaaRectDestroy(self._handle)
|
|
436
563
|
|
|
437
564
|
def get(self) -> Rect:
|
|
438
|
-
|
|
439
|
-
|
|
440
|
-
|
|
441
|
-
|
|
565
|
+
"""获取矩形数据 / Get rectangle data
|
|
566
|
+
|
|
567
|
+
Returns:
|
|
568
|
+
Rect: 矩形对象 (x, y, width, height) / Rectangle object (x, y, width, height)
|
|
569
|
+
"""
|
|
570
|
+
x = Library.framework().MaaRectGetX(self._handle)
|
|
571
|
+
y = Library.framework().MaaRectGetY(self._handle)
|
|
572
|
+
w = Library.framework().MaaRectGetW(self._handle)
|
|
573
|
+
h = Library.framework().MaaRectGetH(self._handle)
|
|
442
574
|
|
|
443
575
|
return Rect(x, y, w, h)
|
|
444
576
|
|
|
445
577
|
def set(self, value: RectType) -> bool:
|
|
578
|
+
"""设置矩形数据 / Set rectangle data
|
|
579
|
+
|
|
580
|
+
Args:
|
|
581
|
+
value: 矩形数据,可以是 Rect、tuple、list 或 numpy.ndarray / Rectangle data, can be Rect, tuple, list, or numpy.ndarray
|
|
582
|
+
|
|
583
|
+
Returns:
|
|
584
|
+
bool: 是否成功 / Whether successful
|
|
585
|
+
|
|
586
|
+
Raises:
|
|
587
|
+
ValueError: 如果数据格式不正确
|
|
588
|
+
TypeError: 如果类型不支持
|
|
589
|
+
"""
|
|
446
590
|
if isinstance(value, numpy.ndarray):
|
|
447
591
|
if value.ndim != 1:
|
|
448
592
|
raise ValueError("value must be a 1D array")
|
|
@@ -460,7 +604,7 @@ class RectBuffer:
|
|
|
460
604
|
raise TypeError("value must be a Rect, numpy.ndarray, tuple or list")
|
|
461
605
|
|
|
462
606
|
return bool(
|
|
463
|
-
Library.framework.MaaRectSet(
|
|
607
|
+
Library.framework().MaaRectSet(
|
|
464
608
|
self._handle, value[0], value[1], value[2], value[3]
|
|
465
609
|
)
|
|
466
610
|
)
|
|
@@ -473,26 +617,26 @@ class RectBuffer:
|
|
|
473
617
|
return
|
|
474
618
|
RectBuffer._api_properties_initialized = True
|
|
475
619
|
|
|
476
|
-
Library.framework.MaaRectCreate.restype = MaaRectHandle
|
|
477
|
-
Library.framework.MaaRectCreate.argtypes = []
|
|
620
|
+
Library.framework().MaaRectCreate.restype = MaaRectHandle
|
|
621
|
+
Library.framework().MaaRectCreate.argtypes = []
|
|
478
622
|
|
|
479
|
-
Library.framework.MaaRectDestroy.restype = None
|
|
480
|
-
Library.framework.MaaRectDestroy.argtypes = [MaaRectHandle]
|
|
623
|
+
Library.framework().MaaRectDestroy.restype = None
|
|
624
|
+
Library.framework().MaaRectDestroy.argtypes = [MaaRectHandle]
|
|
481
625
|
|
|
482
|
-
Library.framework.MaaRectGetX.restype = ctypes.c_int32
|
|
483
|
-
Library.framework.MaaRectGetX.argtypes = [MaaRectHandle]
|
|
626
|
+
Library.framework().MaaRectGetX.restype = ctypes.c_int32
|
|
627
|
+
Library.framework().MaaRectGetX.argtypes = [MaaRectHandle]
|
|
484
628
|
|
|
485
|
-
Library.framework.MaaRectGetY.restype = ctypes.c_int32
|
|
486
|
-
Library.framework.MaaRectGetY.argtypes = [MaaRectHandle]
|
|
629
|
+
Library.framework().MaaRectGetY.restype = ctypes.c_int32
|
|
630
|
+
Library.framework().MaaRectGetY.argtypes = [MaaRectHandle]
|
|
487
631
|
|
|
488
|
-
Library.framework.MaaRectGetW.restype = ctypes.c_int32
|
|
489
|
-
Library.framework.MaaRectGetW.argtypes = [MaaRectHandle]
|
|
632
|
+
Library.framework().MaaRectGetW.restype = ctypes.c_int32
|
|
633
|
+
Library.framework().MaaRectGetW.argtypes = [MaaRectHandle]
|
|
490
634
|
|
|
491
|
-
Library.framework.MaaRectGetH.restype = ctypes.c_int32
|
|
492
|
-
Library.framework.MaaRectGetH.argtypes = [MaaRectHandle]
|
|
635
|
+
Library.framework().MaaRectGetH.restype = ctypes.c_int32
|
|
636
|
+
Library.framework().MaaRectGetH.argtypes = [MaaRectHandle]
|
|
493
637
|
|
|
494
|
-
Library.framework.MaaRectSet.restype = MaaBool
|
|
495
|
-
Library.framework.MaaRectSet.argtypes = [
|
|
638
|
+
Library.framework().MaaRectSet.restype = MaaBool
|
|
639
|
+
Library.framework().MaaRectSet.argtypes = [
|
|
496
640
|
MaaRectHandle,
|
|
497
641
|
ctypes.c_int32,
|
|
498
642
|
ctypes.c_int32,
|