<html><body><div style="font-family: arial, helvetica, sans-serif; font-size: 12pt; color: #000000"><div>Haciendo más pruebas, he llegado a la conclusión, de que lo que está mal es la función de read_in_chunks ... ya que nunca lee nada y siempre acaba dentro del if not chunk: break ... y no entiendo porque narices.<br></div><div><br data-mce-bogus="1"></div><div>En todos los ejemplos que encuentro por la red para leer un fichero binario por porciones, siempre usan mas o menos el mismo estilo de código para la función, pero esta parece que nunca lee nada.<br data-mce-bogus="1"></div><div><br data-mce-bogus="1"></div><div>¿Que estoy haciendo rematadamente mal, que no soy capaz de leer un fichero binario a trozos? ... :-(<br data-mce-bogus="1"></div><div><br></div><hr id="zwchr" data-marker="__DIVIDER__"><div data-marker="__HEADERS__"><blockquote style="border-left:2px solid #1010FF;margin-left:5px;padding-left:5px;color:#000;font-weight:normal;font-style:normal;text-decoration:none;font-family:Helvetica,Arial,sans-serif;font-size:12pt;"><b>De: </b>"Raúl Alexis Betancor Santana" <rabs@dimension-virtual.com><br><b>Para: </b>"python-es" <python-es@python.org><br><b>Enviados: </b>Jueves, 4 de Julio 2019 13:55:56<br><b>Asunto: </b>Re: [Python-es] Leer fichero al mismo tiempo que se está escribiendo por otro proceso.<br></blockquote></div><div data-marker="__QUOTED_TEXT__"><blockquote style="border-left:2px solid #1010FF;margin-left:5px;padding-left:5px;color:#000;font-weight:normal;font-style:normal;text-decoration:none;font-family:Helvetica,Arial,sans-serif;font-size:12pt;"><div style="font-family: arial, helvetica, sans-serif; font-size: 12pt; color: #000000"><div>No puedo, los ficheros los genera Asterisk y no voy a estar tocando el código para eso.<br></div><br><div>He probado añadiendo un delay de 250ms al inicio de la lectura, para darle tiempo a que haga un flush a disco, pero tampoco me vá.<br></div><br><div>En realidad lo que me mosquea, es que un ejemplo que tengo en Node.js y que hace exactamente lo mismo, funciona perfectamente, pero el código de python se me queda en el for response in responses: ... osea, no llega nunca a recibir respuesta de GCS o el generador del read_in_chunks no está resolviendo o algo raro.<br></div><br><div>Ahora lo estoy intentando con ARI, porque llevo días intentandolo con un script en python que ejecutaba desde el EAGI y tampoco había forma, o escuchaba el stream de audio y lo interpretaba o reproducía una locución del IVR, pero no ambas cosas al mismo tiempo y hacerlo vía threads, se me complicaba la cosa, hacerlo vía multiprocess y pipes, tenía el problema de que tenía que estar leyendo desde el proceso hijo el FD 3 del proceso padre, un coñazo.<br></div><br><div>Si ha alguien se le ocurre como resolver esto ... estoy abierto a ideas.<br></div><br><hr id="zwchr"><div><blockquote style="border-left:2px solid #1010FF;margin-left:5px;padding-left:5px;color:#000;font-weight:normal;font-style:normal;text-decoration:none;font-family:Helvetica,Arial,sans-serif;font-size:12pt;"><b>De: </b>"Daπid" <davidmenhur@gmail.com><br><b>Para: </b>"python-es" <python-es@python.org><br><b>Enviados: </b>Jueves, 4 de Julio 2019 11:57:11<br><b>Asunto: </b>Re: [Python-es] Leer fichero al mismo tiempo que se está escribiendo por otro proceso.<br></blockquote></div><div><blockquote style="border-left:2px solid #1010FF;margin-left:5px;padding-left:5px;color:#000;font-weight:normal;font-style:normal;text-decoration:none;font-family:Helvetica,Arial,sans-serif;font-size:12pt;"><div dir="ltr"><div>Creo que has encontrado la solución, pero la has puesto en el lugar equivocado.</div><br><div>#audio_file = io.open(stream_file+'.sln16','rb',buffering=0) <br></div><br><div>El proceso que está escribiendo al archivo está probablemente usando un buffer, lo que quiere decir que sólo escribe al disco duro de vez en cuando, cuando haya acumulado una cierta cantidad de datos. Si tienes acceso al programa que escribe el archivo, tienes que o bien desactivar el buffer (¡cuidado con el rendimiento!), usar uno más pequeño, o vaciarlo explícitamente con un flush() más a menudo.<br></div><br><br></div><br><div class="gmail_quote"><div dir="ltr" class="gmail_attr">On Thu, 4 Jul 2019 at 12:28, Raúl Alexis Betancor Santana <<a href="mailto:rabs@dimension-virtual.com" target="_blank">rabs@dimension-virtual.com</a>> wrote:<br></div><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex">Buenas, estoy intentando hechar a andar el Google Cloud Speech, he intento leer en stream de un fichero que está siendo escrito por otro proceso, que contiene la grabación del audio, para enviarla al GCS, pero sin éxito.<br>
<br>
¿Alguien me puede comentar que estoy haciendo mal?, con el ejemplo que da GCS para hacer lo mismo con un fichero directamente, que lo que hace es leerlo completo en memoria y enviarlo, no me da problemas y transcribe bien el texto.<br>
<br>
Basandome en el código de ejemplo de GCS para streaming <br>
<br>
def read_in_chunks(file_object,chunk_size):<br>
"""Lazy function (generator) to read a file piece by piece.<br>
while True:<br>
chunk = file_object.read(chunk_size)<br>
if not chunk:<br>
return<br>
data = [chunk]<br>
yield b''.join(data)<br>
<br>
def transcribe_streaming(stream_file,language,timeout): <br>
"""Streams transcription of the given audio file.""" <br>
from google.cloud import speech <br>
from google.cloud.speech import enums <br>
from google.cloud.speech import types <br>
import io <br>
client = speech.SpeechClient() <br>
<br>
#audio_file = io.open(stream_file+'.sln16','rb',buffering=0) <br>
audio_file = io.open(stream_file+'.sln16','rb') <br>
# In practice, stream should be a generator yielding chunks of audio data. <br>
requests = (types.StreamingRecognizeRequest(audio_content=chunk) <br>
for chunk in read_in_chunks(audio_file,3200)) <br>
<br>
config = types.RecognitionConfig( <br>
encoding=enums.RecognitionConfig.AudioEncoding.LINEAR16, <br>
sample_rate_hertz=16000, <br>
language_code=language) <br>
#streaming_config = types.StreamingRecognitionConfig(config=config,single_utterance=True) <br>
streaming_config = types.StreamingRecognitionConfig(config=config) <br>
<br>
# streaming_recognize returns a generator. <br>
responses = client.streaming_recognize(streaming_config, requests) <br>
for response in responses: <br>
# Once the transcription has settled, the first result will contain the <br>
# is_final result. The other results will be for subsequent portions of <br>
# the audio. <br>
for result in response.results: <br>
if result.is_final: <br>
print('Finished: {}'.format(result.is_final)) <br>
print('Stability: {}'.format(result.stability)) <br>
alternatives = result.alternatives <br>
### The alternatives are ordered from most likely to least. <br>
for alternative in alternatives: <br>
print('Confidence: {}'.format(alternative.confidence)) <br>
print(u'Transcript: {}'.format(alternative.transcript))<br>
(null)<br>
_______________________________________________<br>
Python-es mailing list<br>
<a href="mailto:Python-es@python.org" target="_blank">Python-es@python.org</a><br>
<a href="https://mail.python.org/mailman/listinfo/python-es" rel="noreferrer" target="_blank">https://mail.python.org/mailman/listinfo/python-es</a><br>
</blockquote></div>
<br>_______________________________________________<br>Python-es mailing list<br>Python-es@python.org<br>https://mail.python.org/mailman/listinfo/python-es<br></blockquote></div></div><br>_______________________________________________<br>Python-es mailing list<br>Python-es@python.org<br>https://mail.python.org/mailman/listinfo/python-es<br></blockquote></div></div></body></html>