Страница 2 из 2
Re: DragonBoard 410c
Добавлено: 21 янв 2019, 14:36
Olej
Понадобилось использовать звук на этой плате... именно применительно к вопросам распознавания: очень удобно, наглядно и эффектно сопровождать работу распознавателя звуками:
- не нужно всё время пялиться в монитор и читать выводимые отладочные сообщение;
- иногда (когда при распознавании запускаются дочерние исполнительные процессы) а). не так легко выводить диагностику в терминал родительского процесса и б). ожидание такого вывода из дочернего процесса может блокировать родительский ... или нужно всё это запускать в отдельном потоке и др. заметные усложнения.
Но ... Пришлось изрядно повозиться, разбираясь со звуком на DragonBoard 410c, всё это, относительно использования звука в одноплатных SBC, описано здесь:
звуковые устройства ALSA.
Re: DragonBoard 410c
Добавлено: 21 янв 2019, 14:47
Olej
Olej писал(а):
- иногда (когда при распознавании запускаются дочерние исполнительные процессы) а). не так легко выводить диагностику в терминал родительского процесса и б). ожидание такого вывода из дочернего процесса может блокировать родительский ... или нужно всё это запускать в отдельном потоке и др. заметные усложнения.
Вот такого сорта, примерно, тестовое дочернее приложение на Python:
Код: Выделить всё
#!/usr/bin/python3
# -*- coding: utf-8 -*-
import sys, os, argparse, time
import subprocess
parser = argparse.ArgumentParser() # construct the argument parse and parse the arguments
parser.add_argument( '-d', '--delay', type = float, help = 'executing time, in sec.' )
parser.add_argument( '-s', '--sound', help = 'play sound file' )
parser.add_argument( '-r', '--reply', type = int, help = 'reply plaing time' )
args = vars( parser.parse_args() )
if args[ 'delay' ] != None:
sec = args[ 'delay' ]
else:
sec = 3.0
if args[ 'reply' ] != None:
srepl = str( args[ 'reply' ] )
else:
srepl = '-'
#print( '|{}|'.format( srepl ) )
pid = 0
if args[ 'sound' ] != None:
file = args[ 'sound' ]
if not os.path.isfile( file ):
print( 'illegal sound file name: {}'.format( file ) )
exit( 1 )
proc = subprocess.Popen( [ 'play', 'login.wav', '-q', 'repeat', srepl ], start_new_session=True )
pid = proc.pid
# print( proc.args )
#print( proc.pid )
print( '+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++' )
# unlock ... wait
time.sleep( sec ) # wait for sec (floating)
if pid != 0:
if None == proc.poll():
proc.kill()
print( '-------------------------------------------------------------' )
Код: Выделить всё
linaro@linaro-alip:~/FaceDL/locker$ time ./actps.py -d 5 -s login.wav -r 5
+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
play WARN alsa: can't encode 0-bit Unknown or not applicable
-------------------------------------------------------------
real 0m5.236s
user 0m0.541s
sys 0m0.038s
Или даже так:
Код: Выделить всё
linaro@linaro-alip:~/FaceDL/locker$ time ./actps.py -d 5 -s login.wav -r 5 2>/dev/null
+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
-------------------------------------------------------------
real 0m5.233s
user 0m0.525s
sys 0m0.043s
Re: DragonBoard 410c
Добавлено: 28 янв 2019, 19:53
Olej
Olej писал(а):
Вот такого сорта, примерно, тестовое дочернее приложение на Python:
Всё это нашло применение в распознавателе человеческих лиц, который при распознавании знакомого лица ещё и "поёт" - всё это подробно описано здесь:
распознавание лиц