Skip to content

Commit

Permalink
updated python demo to accept per wake word sensitivity
Browse files Browse the repository at this point in the history
Former-commit-id: 2100362
  • Loading branch information
kenarsa committed Aug 23, 2018
1 parent 2c9e32e commit 1924221
Showing 1 changed file with 20 additions and 8 deletions.
28 changes: 20 additions & 8 deletions demo/python/porcupine_demo.py
Original file line number Diff line number Diff line change
Expand Up @@ -43,7 +43,7 @@ def __init__(
library_path,
model_file_path,
keyword_file_paths,
sensitivity=0.5,
sensitivities,
input_device_index=None,
output_path=None):

Expand All @@ -53,7 +53,8 @@ def __init__(
:param library_path: Absolute path to Porcupine's dynamic library.
:param model_file_path: Absolute path to the model parameter file.
:param keyword_file_paths: List of absolute paths to keyword files.
:param sensitivity: Sensitivity parameter. For more information refer to 'include/pv_porcupine.h'. It uses the
:param sensitivities: Sensitivity parameter for each wake word. For more information refer to
'include/pv_porcupine.h'. It uses the
same sensitivity value for all keywords.
:param input_device_index: Optional argument. If provided, audio is recorded from this input device. Otherwise,
the default audio input device is used.
Expand All @@ -65,7 +66,7 @@ def __init__(
self._library_path = library_path
self._model_file_path = model_file_path
self._keyword_file_paths = keyword_file_paths
self._sensitivity = float(sensitivity)
self._sensitivities = sensitivities
self._input_device_index = input_device_index

self._output_path = output_path
Expand All @@ -82,7 +83,11 @@ def run(self):
num_keywords = len(self._keyword_file_paths)

keyword_names =\
[os.path.basename(x).strip('.ppn').strip('_tiny').split('_')[0] for x in self._keyword_file_paths]
[os.path.basename(x).replace('.ppn', '').replace('_tiny', '').split('_')[0] for x in self._keyword_file_paths]

print('listening for:')
for keyword_name, sensitivity in zip(keyword_names, sensitivities):
print('- %s (sensitivity: %f)' % (keyword_name, sensitivity))

porcupine = None
pa = None
Expand All @@ -92,7 +97,7 @@ def run(self):
library_path=self._library_path,
model_file_path=self._model_file_path,
keyword_file_paths=self._keyword_file_paths,
sensitivities=[self._sensitivity] * num_keywords)
sensitivities=self._sensitivities)

pa = pyaudio.PyAudio()
audio_stream = pa.open(
Expand Down Expand Up @@ -182,7 +187,7 @@ def _default_library_path():
type=str,
default=os.path.join(os.path.dirname(__file__), '../../lib/common/porcupine_params.pv'))

parser.add_argument('--sensitivity', help='detection sensitivity [0, 1]', default=0.5)
parser.add_argument('--sensitivities', help='detection sensitivity [0, 1]', default=0.5)
parser.add_argument('--input_audio_device_index', help='index of input audio device', type=int, default=None)

parser.add_argument(
Expand All @@ -201,10 +206,17 @@ def _default_library_path():
if not args.keyword_file_paths:
raise ValueError('keyword file paths are missing')

keyword_file_paths = [x.strip() for x in args.keyword_file_paths.split(',')]

if isinstance(args.sensitivities, float):
sensitivities = [args.sensitivities] * len(keyword_file_paths)
else:
sensitivities = [float(x) for x in args.sensitivities.split(',')]

PorcupineDemo(
library_path=args.library_path if args.library_path is not None else _default_library_path(),
model_file_path=args.model_file_path,
keyword_file_paths=[x.strip() for x in args.keyword_file_paths.split(',')],
sensitivity=args.sensitivity,
keyword_file_paths=keyword_file_paths,
sensitivities=sensitivities,
output_path=args.output_path,
input_device_index=args.input_audio_device_index).run()

0 comments on commit 1924221

Please sign in to comment.