|
@@ -1,24 +1,20 @@
|
|
# -*- coding: utf8 -*-
|
|
# -*- coding: utf8 -*-
|
|
from __future__ import print_function, absolute_import
|
|
from __future__ import print_function, absolute_import
|
|
from tornado.ioloop import IOLoop
|
|
from tornado.ioloop import IOLoop
|
|
-from tornado.web import Application
|
|
|
|
from client import Client, ConnectionError
|
|
from client import Client, ConnectionError
|
|
from boxconfig import parse_config
|
|
from boxconfig import parse_config
|
|
from dejavu.recognize import FilePerSecondRecognizer
|
|
from dejavu.recognize import FilePerSecondRecognizer
|
|
-from datetime import datetime, timedelta
|
|
|
|
from endpoint import setup_endpoint
|
|
from endpoint import setup_endpoint
|
|
from calibration import Calibrations
|
|
from calibration import Calibrations
|
|
from dejavu import Dejavu, CouldntDecodeError
|
|
from dejavu import Dejavu, CouldntDecodeError
|
|
-from firebase_admin import credentials
|
|
|
|
-from firebase_admin import db as fbdb
|
|
|
|
from multiprocessing import Process
|
|
from multiprocessing import Process
|
|
-from subprocess import Popen, PIPE
|
|
|
|
import logging as log
|
|
import logging as log
|
|
-import firebase_admin
|
|
|
|
import mutagen.mp3
|
|
import mutagen.mp3
|
|
import math
|
|
import math
|
|
import sys
|
|
import sys
|
|
import os
|
|
import os
|
|
|
|
+from datetime import datetime
|
|
|
|
+import streamlit as st
|
|
|
|
|
|
if sys.version_info >= (3, 0):
|
|
if sys.version_info >= (3, 0):
|
|
from queue import Queue, Empty
|
|
from queue import Queue, Empty
|
|
@@ -58,13 +54,9 @@ client = Client(config['device_id'],
|
|
cloud_base_url = 'https://storage.googleapis.com/{}' \
|
|
cloud_base_url = 'https://storage.googleapis.com/{}' \
|
|
.format(config['bucket'])
|
|
.format(config['bucket'])
|
|
base_path = config.get("basepath", "/var/fourier")
|
|
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_id = config['device_id']
|
|
device_path = os.path.join(base_path, device_id)
|
|
device_path = os.path.join(base_path, device_id)
|
|
recognizer = FilePerSecondRecognizer
|
|
recognizer = FilePerSecondRecognizer
|
|
-device_ref = fbdb.reference('devices').child(config['device_id'])
|
|
|
|
-calibrations = Calibrations(config['device_id'], client=client)
|
|
|
|
|
|
|
|
# settings
|
|
# settings
|
|
queue_mode = QUEUE_SINGLE
|
|
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)
|
|
#db = sqlite3.connect(db_path)
|
|
cloud_cache = {}
|
|
cloud_cache = {}
|
|
|
|
|
|
-def process_segment(audios=None, calibration=None):
|
|
|
|
|
|
+def process_segment(anuncio, audio_busqueda, audios=None, calibration=None):
|
|
""" Procesa una hora de audio """
|
|
""" Procesa una hora de audio """
|
|
-
|
|
|
|
|
|
+ print(anuncio +" y "+ audio_busqueda)
|
|
#date = dateutil.parser.parse(item['fecha'], ignoretz=True)
|
|
#date = dateutil.parser.parse(item['fecha'], ignoretz=True)
|
|
segment_size = 5
|
|
segment_size = 5
|
|
audio_length = 0
|
|
audio_length = 0
|
|
@@ -85,7 +77,8 @@ def process_segment(audios=None, calibration=None):
|
|
# 1.1 Calcular el número de segmentos requeridos
|
|
# 1.1 Calcular el número de segmentos requeridos
|
|
# de acuerdo a la duración total del audio.
|
|
# de acuerdo a la duración total del audio.
|
|
try:
|
|
try:
|
|
- filename = "/tmp/anuncios/-MOiAvmUkZLmXrAWCy9u.mp3"
|
|
|
|
|
|
+ #filename = "/tmp/anuncios/RDF2112020ORIGINAL.MP3"
|
|
|
|
+ filename = anuncio
|
|
audio = mutagen.mp3.MP3(filename)
|
|
audio = mutagen.mp3.MP3(filename)
|
|
audio_length = audio.info.length
|
|
audio_length = audio.info.length
|
|
|
|
|
|
@@ -112,8 +105,8 @@ def process_segment(audios=None, calibration=None):
|
|
audios_counter = 0
|
|
audios_counter = 0
|
|
results = []
|
|
results = []
|
|
v = []
|
|
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:
|
|
for path, name, ts in audios_iterable:
|
|
audios_counter += os.path.isfile(path)
|
|
audios_counter += os.path.isfile(path)
|
|
values = []
|
|
values = []
|
|
@@ -139,12 +132,17 @@ def process_segment(audios=None, calibration=None):
|
|
os.path.split(path)[-1],
|
|
os.path.split(path)[-1],
|
|
','.join(values),
|
|
','.join(values),
|
|
))
|
|
))
|
|
|
|
+ st.text('[process_segment] {0}) {1}'.format(
|
|
|
|
+ os.path.split(path)[-1],
|
|
|
|
+ ','.join(values),
|
|
|
|
+ ))
|
|
|
|
|
|
except CouldntDecodeError as ex:
|
|
except CouldntDecodeError as ex:
|
|
log.error('[process_segment] {}'.format(ex))
|
|
log.error('[process_segment] {}'.format(ex))
|
|
|
|
|
|
try:
|
|
try:
|
|
encontrados = {}
|
|
encontrados = {}
|
|
|
|
+ item_ids = []
|
|
for i in item_ids:
|
|
for i in item_ids:
|
|
r = [result for result in results if result["name"] == i]
|
|
r = [result for result in results if result["name"] == i]
|
|
encontrados[i] = find_repetitions(r, segments_needed=segments_needed, calibration=calibration,)
|
|
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
|
|
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()
|