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.
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. ¿Que estoy haciendo rematadamente mal, que no soy capaz de leer un fichero binario a trozos? ... :-( > De: "Raúl Alexis Betancor Santana" <r...@dimension-virtual.com> > Para: "python-es" <python-es@python.org> > Enviados: Jueves, 4 de Julio 2019 13:55:56 > Asunto: Re: [Python-es] Leer fichero al mismo tiempo que se está escribiendo > por > otro proceso. > No puedo, los ficheros los genera Asterisk y no voy a estar tocando el código > para eso. > 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á. > 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. > 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. > Si ha alguien se le ocurre como resolver esto ... estoy abierto a ideas. >> De: "Daπid" <davidmen...@gmail.com> >> Para: "python-es" <python-es@python.org> >> Enviados: Jueves, 4 de Julio 2019 11:57:11 >> Asunto: Re: [Python-es] Leer fichero al mismo tiempo que se está escribiendo >> por >> otro proceso. >> Creo que has encontrado la solución, pero la has puesto en el lugar >> equivocado. >> #audio_file = io.open(stream_file+'.sln16','rb',buffering=0) >> 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. >> On Thu, 4 Jul 2019 at 12:28, Raúl Alexis Betancor Santana < [ >> mailto:r...@dimension-virtual.com | r...@dimension-virtual.com ] > wrote: >>> 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. >>> ¿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. >>> Basandome en el código de ejemplo de GCS para streaming >>> def read_in_chunks(file_object,chunk_size): >>> """Lazy function (generator) to read a file piece by piece. >>> while True: >>> chunk = file_object.read(chunk_size) >>> if not chunk: >>> return >>> data = [chunk] >>> yield b''.join(data) >>> def transcribe_streaming(stream_file,language,timeout): >>> """Streams transcription of the given audio file.""" >>> from google.cloud import speech >>> from google.cloud.speech import enums >>> from google.cloud.speech import types >>> import io >>> client = speech.SpeechClient() >>> #audio_file = io.open(stream_file+'.sln16','rb',buffering=0) >>> audio_file = io.open(stream_file+'.sln16','rb') >>> # In practice, stream should be a generator yielding chunks of audio data. >>> requests = (types.StreamingRecognizeRequest(audio_content=chunk) >>> for chunk in read_in_chunks(audio_file,3200)) >>> config = types.RecognitionConfig( >>> encoding=enums.RecognitionConfig.AudioEncoding.LINEAR16, >>> sample_rate_hertz=16000, >>> language_code=language) >>> #streaming_config = >>> types.StreamingRecognitionConfig(config=config,single_utterance=True) >>> streaming_config = types.StreamingRecognitionConfig(config=config) >>> # streaming_recognize returns a generator. >>> responses = client.streaming_recognize(streaming_config, requests) >>> for response in responses: >>> # Once the transcription has settled, the first result will contain the >>> # is_final result. The other results will be for subsequent portions of >>> # the audio. >>> for result in response.results: >>> if result.is_final: >>> print('Finished: {}'.format(result.is_final)) >>> print('Stability: {}'.format(result.stability)) >>> alternatives = result.alternatives >>> ### The alternatives are ordered from most likely to least. >>> for alternative in alternatives: >>> print('Confidence: {}'.format(alternative.confidence)) >>> print(u'Transcript: {}'.format(alternative.transcript)) >>> (null) >>> _______________________________________________ >>> Python-es mailing list >>> [ mailto:Python-es@python.org | Python-es@python.org ] >>> [ https://mail.python.org/mailman/listinfo/python-es | >>> https://mail.python.org/mailman/listinfo/python-es ] >> _______________________________________________ >> Python-es mailing list >> Python-es@python.org >> https://mail.python.org/mailman/listinfo/python-es > _______________________________________________ > Python-es mailing list > Python-es@python.org > https://mail.python.org/mailman/listinfo/python-es
_______________________________________________ Python-es mailing list Python-es@python.org https://mail.python.org/mailman/listinfo/python-es