Explorar el Código

Servicio de streamlit para comparación individual

Rolando Valenzuela hace 4 años
padre
commit
829009f97d
Se han modificado 3 ficheros con 34 adiciones y 30 borrados
  1. 4 3
      Dockerfile
  2. 28 25
      ondemand/service1.py
  3. 2 2
      run.sh

+ 4 - 3
Dockerfile

@@ -1,9 +1,10 @@
-FROM python:2.7.18-buster
+FROM python:2.7.18-slim-buster
 RUN apt-get update -y
 RUN apt-get install -y gcc portaudio19-dev python-setuptools ffmpeg tk
 RUN python -m pip install --upgrade pip
-RUN pip install cryptography numpy pydub matplotlib scipy tornado requests pyaudio firebase_admin psutil mutagen
+RUN pip install cryptography numpy pydub matplotlib scipy tornado requests pyaudio firebase_admin psutil mutagen streamlit
 ADD . /code/
 WORKDIR /code/ondemand/
-ENTRYPOINT [ "python", "service.py"]
+EXPOSE 8501
+ENTRYPOINT [ "streamlit", "run" ,"service1.py"]
 #RUN python setup.py install

+ 28 - 25
ondemand/service1.py

@@ -1,24 +1,20 @@
 # -*- coding: utf8 -*-
 from __future__ import print_function, absolute_import
 from tornado.ioloop import IOLoop
-from tornado.web import Application
 from client import Client, ConnectionError
 from boxconfig import parse_config
 from dejavu.recognize import FilePerSecondRecognizer
-from datetime import datetime, timedelta
 from endpoint import setup_endpoint
 from calibration import Calibrations
 from dejavu import Dejavu, CouldntDecodeError
-from firebase_admin import credentials
-from firebase_admin import db as fbdb
 from multiprocessing import Process
-from subprocess import Popen, PIPE
 import logging as log
-import firebase_admin
 import mutagen.mp3
 import math
 import sys
 import os
+from datetime import datetime
+import streamlit as st
 
 if sys.version_info >= (3, 0):
     from queue import Queue, Empty
@@ -58,13 +54,9 @@ client = Client(config['device_id'],
 cloud_base_url = 'https://storage.googleapis.com/{}' \
     .format(config['bucket'])
 base_path = config.get("basepath", "/var/fourier")
-fb_credentials = credentials.Certificate('/code/Fourier-key.json')
-firebase_admin.initialize_app(fb_credentials, config['firebase'])
 device_id = config['device_id']
 device_path = os.path.join(base_path, device_id)
 recognizer = FilePerSecondRecognizer
-device_ref = fbdb.reference('devices').child(config['device_id'])
-calibrations = Calibrations(config['device_id'], client=client)
 
 # settings
 queue_mode = QUEUE_SINGLE
@@ -74,9 +66,9 @@ db_path = config.get('localDatabase', os.path.join(device_path, 'files.db'))
 #db = sqlite3.connect(db_path)
 cloud_cache = {}
 
-def process_segment(audios=None, calibration=None):
+def process_segment(anuncio, audio_busqueda, audios=None, calibration=None):
     """ Procesa una hora de audio """
-
+    print(anuncio +" y "+ audio_busqueda)
     #date = dateutil.parser.parse(item['fecha'], ignoretz=True)
     segment_size = 5
     audio_length = 0
@@ -85,7 +77,8 @@ def process_segment(audios=None, calibration=None):
     # 1.1 Calcular el número de segmentos requeridos
     # de acuerdo a la duración total del audio.
     try:
-        filename = "/tmp/anuncios/-MOiAvmUkZLmXrAWCy9u.mp3"
+        #filename = "/tmp/anuncios/RDF2112020ORIGINAL.MP3"
+        filename = anuncio
         audio = mutagen.mp3.MP3(filename)
         audio_length = audio.info.length
 
@@ -112,8 +105,8 @@ def process_segment(audios=None, calibration=None):
     audios_counter = 0
     results = []
     v = []
-    audios_iterable = []
-
+    #audios_iterable = [("/tmp/anuncios/RDF2112020GDL115271020NOESTAENREPORTEPEROESCORRECTO.mp3", "RDF2112020GDL115271020NOESTAENREPORTEPEROESCORRECTO.mp3", 1000)]
+    audios_iterable = [(audio_busqueda, audio_busqueda, 1000)]
     for path, name, ts in audios_iterable:
         audios_counter += os.path.isfile(path)
         values = []
@@ -139,12 +132,17 @@ def process_segment(audios=None, calibration=None):
                 os.path.split(path)[-1],
                 ','.join(values),
             ))
+            st.text('[process_segment] {0}) {1}'.format(
+                os.path.split(path)[-1],
+                ','.join(values),
+            ))
 
         except CouldntDecodeError as ex:
             log.error('[process_segment] {}'.format(ex))
 
     try:
         encontrados = {}
+        item_ids = []
         for i in item_ids:
             r = [result for result in results if result["name"] == i]
             encontrados[i] = find_repetitions(r, segments_needed=segments_needed, calibration=calibration,)
@@ -257,13 +255,18 @@ def find_repetitions(results, segments_needed=2, calibration=None):
 
     return found
 
-app = setup_endpoint(queue=queue)
-loop = IOLoop.current()
-loop.add_callback(process_segment)
-
-if __name__ == '__main__':
-    try:
-        log.info('Starting ondemand service')
-        loop.start()
-    except KeyboardInterrupt:
-        log.error('Process killed')
+def WebService():
+    anuncio_file = st.file_uploader("Selecciona el anuncio")
+    if anuncio_file is not None:
+        name = "anuncio"
+        with open(name, "wb") as anuncio:
+            anuncio.write(anuncio_file.getvalue())
+    
+    audio_file = st.file_uploader("Selecciona el audio")
+    if audio_file is not None:
+        with open("audio", "wb") as audio:
+            audio.write(audio_file.getvalue())
+    if st.button("Comparar"):
+        process_segment("anuncio", "audio")
+
+WebService()

+ 2 - 2
run.sh

@@ -2,6 +2,6 @@
 ###construir imagen ondemand
 docker build -t ondemand .
 ###prueba
-#docker run -it -v /var/fourier:/var/fourier ondemand bash
+#docker run -it -v /var/fourier:/var/fourier -v /tmp:/tmp -p 8501:8501 ondemand bash
 ###produccion
-docker run -d -v /var/fourier:/var/fourier ondemand
+docker run -d -v /var/fourier:/var/fourier -v /tmp:/tmp -p 8501:8501 ondemand