pveagle 0.1.0__py3-none-any.whl → 0.2.0__py3-none-any.whl

Sign up to get free protection for your applications and to get access to all the features.
pveagle/_eagle.py CHANGED
@@ -16,7 +16,27 @@ from typing import Sequence, Tuple
16
16
 
17
17
 
18
18
  class EagleError(Exception):
19
- pass
19
+ def __init__(self, message: str = '', message_stack: Sequence[str] = None):
20
+ super().__init__(message)
21
+
22
+ self._message = message
23
+ self._message_stack = list() if message_stack is None else message_stack
24
+
25
+ def __str__(self):
26
+ message = self._message
27
+ if len(self._message_stack) > 0:
28
+ message += ':'
29
+ for i in range(len(self._message_stack)):
30
+ message += '\n [%d] %s' % (i, self._message_stack[i])
31
+ return message
32
+
33
+ @property
34
+ def message(self) -> str:
35
+ return self._message
36
+
37
+ @property
38
+ def message_stack(self) -> Sequence[str]:
39
+ return self._message_stack
20
40
 
21
41
 
22
42
  class EagleMemoryError(EagleError):
@@ -183,6 +203,20 @@ class EagleProfiler(object):
183
203
 
184
204
  library = cdll.LoadLibrary(library_path)
185
205
 
206
+ set_sdk_func = library.pv_set_sdk
207
+ set_sdk_func.argtypes = [c_char_p]
208
+ set_sdk_func.restype = None
209
+
210
+ set_sdk_func('python'.encode('utf-8'))
211
+
212
+ self._get_error_stack_func = library.pv_get_error_stack
213
+ self._get_error_stack_func.argtypes = [POINTER(POINTER(c_char_p)), POINTER(c_int)]
214
+ self._get_error_stack_func.restype = PicovoiceStatuses
215
+
216
+ self._free_error_stack_func = library.pv_free_error_stack
217
+ self._free_error_stack_func.argtypes = [POINTER(c_char_p)]
218
+ self._free_error_stack_func.restype = None
219
+
186
220
  # noinspection PyArgumentList
187
221
  self._eagle_profiler = POINTER(self.CEagleProfiler)()
188
222
 
@@ -198,7 +232,9 @@ class EagleProfiler(object):
198
232
  model_path.encode('utf-8'),
199
233
  byref(self._eagle_profiler))
200
234
  if status is not PicovoiceStatuses.SUCCESS:
201
- raise _PICOVOICE_STATUS_TO_EXCEPTION[status]()
235
+ raise _PICOVOICE_STATUS_TO_EXCEPTION[status](
236
+ message='Profile initialization failed',
237
+ message_stack=self._get_error_stack())
202
238
 
203
239
  speaker_profile_size_func = library.pv_eagle_profiler_export_size
204
240
  speaker_profile_size_func.argtypes = [
@@ -209,7 +245,9 @@ class EagleProfiler(object):
209
245
  profile_size = c_int32()
210
246
  status = speaker_profile_size_func(self._eagle_profiler, byref(profile_size))
211
247
  if status is not PicovoiceStatuses.SUCCESS:
212
- raise _PICOVOICE_STATUS_TO_EXCEPTION[status]()
248
+ raise _PICOVOICE_STATUS_TO_EXCEPTION[status](
249
+ message='Failed to get profile size',
250
+ message_stack=self._get_error_stack())
213
251
  self._profile_size = profile_size.value
214
252
 
215
253
  enroll_min_audio_length_sample_func = \
@@ -224,7 +262,9 @@ class EagleProfiler(object):
224
262
  self._eagle_profiler,
225
263
  byref(min_enroll_samples))
226
264
  if status is not PicovoiceStatuses.SUCCESS:
227
- raise _PICOVOICE_STATUS_TO_EXCEPTION[status]()
265
+ raise _PICOVOICE_STATUS_TO_EXCEPTION[status](
266
+ message='Failed to get min audio length sample',
267
+ message_stack=self._get_error_stack())
228
268
  self._min_enroll_samples = min_enroll_samples.value
229
269
 
230
270
  self._delete_func = library.pv_eagle_profiler_delete
@@ -298,7 +338,9 @@ class EagleProfiler(object):
298
338
  byref(percentage))
299
339
  feedback = EagleProfilerEnrollFeedback(feedback_code.value)
300
340
  if status is not PicovoiceStatuses.SUCCESS:
301
- raise _PICOVOICE_STATUS_TO_EXCEPTION[status]()
341
+ raise _PICOVOICE_STATUS_TO_EXCEPTION[status](
342
+ message='Enrollment failed',
343
+ message_stack=self._get_error_stack())
302
344
 
303
345
  return percentage.value, feedback
304
346
 
@@ -316,7 +358,9 @@ class EagleProfiler(object):
316
358
  byref(profile)
317
359
  )
318
360
  if status is not PicovoiceStatuses.SUCCESS:
319
- raise _PICOVOICE_STATUS_TO_EXCEPTION[status]()
361
+ raise _PICOVOICE_STATUS_TO_EXCEPTION[status](
362
+ message='Export failed',
363
+ message_stack=self._get_error_stack())
320
364
 
321
365
  return EagleProfile(cast(profile, c_void_p), self._profile_size)
322
366
 
@@ -328,7 +372,9 @@ class EagleProfiler(object):
328
372
 
329
373
  status = self._reset_func(self._eagle_profiler)
330
374
  if status is not PicovoiceStatuses.SUCCESS:
331
- raise _PICOVOICE_STATUS_TO_EXCEPTION[status]()
375
+ raise _PICOVOICE_STATUS_TO_EXCEPTION[status](
376
+ message='Profile reset failed',
377
+ message_stack=self._get_error_stack())
332
378
 
333
379
  def delete(self) -> None:
334
380
  """
@@ -361,6 +407,21 @@ class EagleProfiler(object):
361
407
 
362
408
  return self._version
363
409
 
410
+ def _get_error_stack(self) -> Sequence[str]:
411
+ message_stack_ref = POINTER(c_char_p)()
412
+ message_stack_depth = c_int()
413
+ status = self._get_error_stack_func(byref(message_stack_ref), byref(message_stack_depth))
414
+ if status is not PicovoiceStatuses.SUCCESS:
415
+ raise _PICOVOICE_STATUS_TO_EXCEPTION[status](message='Unable to get Eagle error state')
416
+
417
+ message_stack = list()
418
+ for i in range(message_stack_depth.value):
419
+ message_stack.append(message_stack_ref[i].decode('utf-8'))
420
+
421
+ self._free_error_stack_func(message_stack_ref)
422
+
423
+ return message_stack
424
+
364
425
 
365
426
  class Eagle(object):
366
427
  """
@@ -400,6 +461,20 @@ class Eagle(object):
400
461
 
401
462
  library = cdll.LoadLibrary(library_path)
402
463
 
464
+ set_sdk_func = library.pv_set_sdk
465
+ set_sdk_func.argtypes = [c_char_p]
466
+ set_sdk_func.restype = None
467
+
468
+ set_sdk_func('python'.encode('utf-8'))
469
+
470
+ self._get_error_stack_func = library.pv_get_error_stack
471
+ self._get_error_stack_func.argtypes = [POINTER(POINTER(c_char_p)), POINTER(c_int)]
472
+ self._get_error_stack_func.restype = PicovoiceStatuses
473
+
474
+ self._free_error_stack_func = library.pv_free_error_stack
475
+ self._free_error_stack_func.argtypes = [POINTER(c_char_p)]
476
+ self._free_error_stack_func.restype = None
477
+
403
478
  # noinspection PyArgumentList
404
479
  self._eagle = POINTER(self.CEagle)()
405
480
 
@@ -423,7 +498,9 @@ class Eagle(object):
423
498
  profile_bytes,
424
499
  byref(self._eagle))
425
500
  if status is not PicovoiceStatuses.SUCCESS:
426
- raise _PICOVOICE_STATUS_TO_EXCEPTION[status]()
501
+ raise _PICOVOICE_STATUS_TO_EXCEPTION[status](
502
+ message='Initialization failed',
503
+ message_stack=self._get_error_stack())
427
504
 
428
505
  self._delete_func = library.pv_eagle_delete
429
506
  self._delete_func.argtypes = [POINTER(self.CEagle)]
@@ -471,7 +548,9 @@ class Eagle(object):
471
548
 
472
549
  status = self._process_func(self._eagle, pcm, self._scores)
473
550
  if status is not PicovoiceStatuses.SUCCESS:
474
- raise _PICOVOICE_STATUS_TO_EXCEPTION[status]()
551
+ raise _PICOVOICE_STATUS_TO_EXCEPTION[status](
552
+ message='Process failed',
553
+ message_stack=self._get_error_stack())
475
554
 
476
555
  # noinspection PyTypeChecker
477
556
  return [float(score) for score in self._scores]
@@ -485,7 +564,9 @@ class Eagle(object):
485
564
 
486
565
  status = self._reset_func(self._eagle)
487
566
  if status is not PicovoiceStatuses.SUCCESS:
488
- raise _PICOVOICE_STATUS_TO_EXCEPTION[status]()
567
+ raise _PICOVOICE_STATUS_TO_EXCEPTION[status](
568
+ message='Reset failed',
569
+ message_stack=self._get_error_stack())
489
570
 
490
571
  def delete(self) -> None:
491
572
  """
@@ -518,6 +599,21 @@ class Eagle(object):
518
599
 
519
600
  return self._version
520
601
 
602
+ def _get_error_stack(self) -> Sequence[str]:
603
+ message_stack_ref = POINTER(c_char_p)()
604
+ message_stack_depth = c_int()
605
+ status = self._get_error_stack_func(byref(message_stack_ref), byref(message_stack_depth))
606
+ if status is not PicovoiceStatuses.SUCCESS:
607
+ raise _PICOVOICE_STATUS_TO_EXCEPTION[status](message='Unable to get Eagle error state')
608
+
609
+ message_stack = list()
610
+ for i in range(message_stack_depth.value):
611
+ message_stack.append(message_stack_ref[i].decode('utf-8'))
612
+
613
+ self._free_error_stack_func(message_stack_ref)
614
+
615
+ return message_stack
616
+
521
617
 
522
618
  __all__ = [
523
619
  'Eagle',
Binary file
Binary file
Binary file
Binary file
Binary file
@@ -1,11 +1,13 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: pveagle
3
- Version: 0.1.0
3
+ Version: 0.2.0
4
4
  Summary: Eagle Speaker Recognition Engine
5
5
  Home-page: https://github.com/Picovoice/eagle
6
6
  Author: Picovoice
7
7
  Author-email: hello@picovoice.ai
8
+ License: UNKNOWN
8
9
  Keywords: Speaker Recognition,Speaker Identification,Voice Recognition,Voice Identification
10
+ Platform: UNKNOWN
9
11
  Classifier: Development Status :: 4 - Beta
10
12
  Classifier: Intended Audience :: Developers
11
13
  Classifier: License :: OSI Approved :: Apache Software License
@@ -139,7 +141,7 @@ eagle.delete()
139
141
  ```
140
142
 
141
143
  ## Demos
142
- <!-- markdown-link-check-disable -->
143
144
  [pveagledemo](https://pypi.org/project/pveagledemo/) provides command-line utilities for processing real-time
144
145
  audio (i.e. microphone) and files using Eagle.
145
- <!-- markdown-link-check-enable -->
146
+
147
+
@@ -0,0 +1,19 @@
1
+ pveagle/LICENSE,sha256=xx0jnfkXJvxRnG63LTGOxlggYnIysveWIZ6H3PNdCrQ,11357
2
+ pveagle/__init__.py,sha256=5RRV_Nak7RhTLHEGAaLW35_j-R35suDmolZAtXPOu2g,570
3
+ pveagle/_eagle.py,sha256=ftCdcNI3t054yQwcYx7SrxvGbINLf9pCAViyS1le1lQ,21705
4
+ pveagle/_factory.py,sha256=VDMTJUGolPJ9PqRifp719ik3y5jqGFu4Ba4uc3EXUWA,3011
5
+ pveagle/_util.py,sha256=5NtVephqCG_RWiNAZ2C_eHjwrdn6fxMiEcmnwWzkOrc,3150
6
+ pveagle/lib/common/eagle_params.pv,sha256=k9WBjUOgN0lqGdfTz7kCwISCTMCRTTo53cSlFt4xwGw,7156210
7
+ pveagle/lib/jetson/cortex-a57-aarch64/libpv_eagle.so,sha256=rEzMxGx42bIKztp9U11KIbxHnnGyCaIA8Z0SShn8CXY,233080
8
+ pveagle/lib/linux/x86_64/libpv_eagle.so,sha256=kIVJRg2WamXWHftxI2HXadXyUi2_fR1Y_wmhToMg570,254048
9
+ pveagle/lib/mac/arm64/libpv_eagle.dylib,sha256=p_nCDKqQ3l_hNrb8Yc9wD3gB5C9S5xEGeKU2bmauvT0,304526
10
+ pveagle/lib/mac/x86_64/libpv_eagle.dylib,sha256=v0t66n6PRR0YaQcHHFbd5laYbpLOczLBQWsSClPC1Y4,318504
11
+ pveagle/lib/raspberry-pi/cortex-a53/libpv_eagle.so,sha256=II6quUJXYqv74sqvPb02bkDwJiS9ON9Jkl6HxJCSl9Q,219464
12
+ pveagle/lib/raspberry-pi/cortex-a53-aarch64/libpv_eagle.so,sha256=yX73X5eNykH0g2D_VeGMmEK-68WxooijSWoFemz0BNQ,233080
13
+ pveagle/lib/raspberry-pi/cortex-a72/libpv_eagle.so,sha256=k_xCGIbKk93q0yxDUMq4d9uXRGIWW_nbWvBMoGZEE8E,223560
14
+ pveagle/lib/raspberry-pi/cortex-a72-aarch64/libpv_eagle.so,sha256=O-0buzY4pb7NjOeDkR6V0hXES5U1YeIhwmCc4StdHEk,233080
15
+ pveagle/lib/windows/amd64/libpv_eagle.dll,sha256=WeUyHhLBnoei4dSmo0YXyF2AIxeKQ7jBkAuZ3d0r3BQ,372736
16
+ pveagle-0.2.0.dist-info/METADATA,sha256=dy6UNP5Em_aL-cJPvREi20dQfnemHfMN6L42BWoYAho,5480
17
+ pveagle-0.2.0.dist-info/WHEEL,sha256=g4nMs7d-Xl9-xC9XovUrsDHGXt-FT0E17Yqo92DEfvY,92
18
+ pveagle-0.2.0.dist-info/top_level.txt,sha256=k2VZ1fNHirMrHCEeAoC3xi1ddfhyKl9qwhSSL_YlTIU,8
19
+ pveagle-0.2.0.dist-info/RECORD,,
@@ -1,5 +1,5 @@
1
1
  Wheel-Version: 1.0
2
- Generator: bdist_wheel (0.37.1)
2
+ Generator: bdist_wheel (0.34.2)
3
3
  Root-Is-Purelib: true
4
4
  Tag: py3-none-any
5
5
 
@@ -1,19 +0,0 @@
1
- pveagle/LICENSE,sha256=xx0jnfkXJvxRnG63LTGOxlggYnIysveWIZ6H3PNdCrQ,11357
2
- pveagle/__init__.py,sha256=5RRV_Nak7RhTLHEGAaLW35_j-R35suDmolZAtXPOu2g,570
3
- pveagle/_eagle.py,sha256=i8LjjdH_UNyI7hAjZKzAM1buO4RuEk-WC6CleANFD7Y,17717
4
- pveagle/_factory.py,sha256=VDMTJUGolPJ9PqRifp719ik3y5jqGFu4Ba4uc3EXUWA,3011
5
- pveagle/_util.py,sha256=5NtVephqCG_RWiNAZ2C_eHjwrdn6fxMiEcmnwWzkOrc,3150
6
- pveagle/lib/common/eagle_params.pv,sha256=aeZ1ucZg9WB1C3HXoixpGyNiqH1utriLol0ZVf1A8UI,7156210
7
- pveagle/lib/jetson/cortex-a57-aarch64/libpv_eagle.so,sha256=da02y_NYoQ_xrHnn2fYgpKzwPla5uwsnBChC_Lg-fqU,232080
8
- pveagle/lib/linux/x86_64/libpv_eagle.so,sha256=_JreaDI40fGJFM1Ak6qWIpeKNCVH61RYClZspKTPtPY,248864
9
- pveagle/lib/mac/arm64/libpv_eagle.dylib,sha256=cCfw-NebqNH-oX0NYYmQ_aSA7TWYKbsc6BdCjQcp8uw,304398
10
- pveagle/lib/mac/x86_64/libpv_eagle.dylib,sha256=uYk2WcqFlgPwMAWNEwur1mY_fK9iSfBIwSDEj31ErI4,318376
11
- pveagle/lib/raspberry-pi/cortex-a53/libpv_eagle.so,sha256=AG6LvhHetjgAJNj1Z72FFCOWG70a1HU4XcJWGmFUzDk,214932
12
- pveagle/lib/raspberry-pi/cortex-a53-aarch64/libpv_eagle.so,sha256=Cp3gcdgnmiaeOAqZV_G_jjdzhjGVwZX_hRsG9FObCJk,232168
13
- pveagle/lib/raspberry-pi/cortex-a72/libpv_eagle.so,sha256=Kjn-W6WxQN0ob6QI7d7z_ZjUOm0efcd6Vv04qwG_ra8,219028
14
- pveagle/lib/raspberry-pi/cortex-a72-aarch64/libpv_eagle.so,sha256=wKBTqO1iu9zOXP11WAy4qni1mxQcNrCPeuBDGyrJkck,232168
15
- pveagle/lib/windows/amd64/libpv_eagle.dll,sha256=4xtRy7_1dhiJn0Z61hwj_rimY5C83SGrsDAXSQDWOQc,376832
16
- pveagle-0.1.0.dist-info/METADATA,sha256=NctY4hUYDQCvuZJQuM_Kb3J70_v98v8-arJ625jiCT4,5516
17
- pveagle-0.1.0.dist-info/WHEEL,sha256=G16H4A3IeoQmnOrYV4ueZGKSjhipXx8zc8nu9FGlvMA,92
18
- pveagle-0.1.0.dist-info/top_level.txt,sha256=k2VZ1fNHirMrHCEeAoC3xi1ddfhyKl9qwhSSL_YlTIU,8
19
- pveagle-0.1.0.dist-info/RECORD,,