Commit 32789bf3 authored by Matteo's avatar Matteo
Browse files

update

parent 35dfb875
...@@ -8,4 +8,4 @@ RUN poetry install --no-cache --only main ...@@ -8,4 +8,4 @@ RUN poetry install --no-cache --only main
VOLUME [ "/data" ] VOLUME [ "/data" ]
CMD ["poetry", "run", "uvicorn", "src.server:app", "--host", "0.0.0.0", "--port", "80", "--log-config", "config/logger.yaml"] CMD ["poetry", "run", "python", "src/server.py"]
\ No newline at end of file \ No newline at end of file
This diff is collapsed.
...@@ -8,11 +8,12 @@ readme = "README.md" ...@@ -8,11 +8,12 @@ readme = "README.md"
[tool.poetry.dependencies] [tool.poetry.dependencies]
python = "^3.10" python = "^3.10"
mpai-cae-arp = "^0.2.3"
numpy = "1.23.3" numpy = "1.23.3"
rich = "^13.3.3" rich = "^13.3.3"
pandas = "^2.0.0" pandas = "^2.0.0"
scikit-learn = "^1.2.2" scikit-learn = "^1.2.2"
grpcio-tools = "^1.53.0"
mpai-cae-arp = "^0.3.0"
[tool.poetry.group.docs.dependencies] [tool.poetry.group.docs.dependencies]
...@@ -25,9 +26,6 @@ pytest = "^7.3.0" ...@@ -25,9 +26,6 @@ pytest = "^7.3.0"
pytest-xdist = "^3.2.1" pytest-xdist = "^3.2.1"
[tool.poetry.group.server.dependencies]
fastapi = {extras = ["all"], version = "^0.95.0"}
[build-system] [build-system]
requires = ["poetry-core"] requires = ["poetry-core"]
build-backend = "poetry.core.masonry.api" build-backend = "poetry.core.masonry.api"
......
...@@ -9,7 +9,7 @@ from mpai_cae_arp.files import File, FileType ...@@ -9,7 +9,7 @@ from mpai_cae_arp.files import File, FileType
from mpai_cae_arp.io import prettify, Style from mpai_cae_arp.io import prettify, Style
def get_args() -> tuple[str, str]: def get_args() -> tuple[str | None, str | None]:
if len(sys.argv) > 1: if len(sys.argv) > 1:
parser = argparse.ArgumentParser( parser = argparse.ArgumentParser(
prog="audio-analyzer", prog="audio-analyzer",
...@@ -24,11 +24,11 @@ def get_args() -> tuple[str, str]: ...@@ -24,11 +24,11 @@ def get_args() -> tuple[str, str]:
return args.working_directory, args.files_name return args.working_directory, args.files_name
else: else:
return os.getenv("WORKING_DIRECTORY"), os.getenv("FILES_NAME") return os.getenv("WORKING_DIRECTORY"), os.getenv("FILES_NAME")
def exit_with_error(error_message: str, console) -> None: def exit_with_error(error_message: str, console) -> None:
console.print(f"[red bold]Error: {error_message} :t-rex:") console.print(f"[red bold]Error: {error_message}")
quit(os.EX_USAGE) quit(os.EX_USAGE)
...@@ -42,6 +42,7 @@ def main() -> None: ...@@ -42,6 +42,7 @@ def main() -> None:
"Working directory or files name not specified!", "Working directory or files name not specified!",
"Try -h/--help to know more about Audio Analyser usage"), console) "Try -h/--help to know more about Audio Analyser usage"), console)
os.makedirs(os.path.join(working_directory, "temp", files_name))
with console.status("[purple]Reading input files", spinner="dots"): with console.status("[purple]Reading input files", spinner="dots"):
audio_src = os.path.join(working_directory, "PreservationAudioFile", f"{files_name}.wav") audio_src = os.path.join(working_directory, "PreservationAudioFile", f"{files_name}.wav")
...@@ -54,17 +55,17 @@ def main() -> None: ...@@ -54,17 +55,17 @@ def main() -> None:
case True, True: case True, True:
console.print("[green]Input files found!") console.print("[green]Input files found!")
case False, True: case False, True:
exit_with_error("Audio file not found!", console) exit_with_error("Audio file not found! :loud_sound:", console)
case True, False: case True, False:
exit_with_error("Video file not found!", console) exit_with_error("Video file not found! :vhs:", console)
case False, False: case False, False:
exit_with_error("Input files not found!", console) exit_with_error("Input files not found! :t-rex:", console)
# create irregularity file 1 # create irregularity file 1
with console.status("[purple]Creating irregularity file 1", spinner="dots"): with console.status("[purple]Creating irregularity file 1", spinner="dots"):
irreg1 = sf.create_irreg_file(audio_src, video_src) irreg1 = sf.create_irreg_file(audio_src, video_src)
console.log(f"Found {len(irreg1.irregularities)} irregularities from Audio source") console.log(f"Found {len(irreg1.irregularities)} irregularities from Audio source")
File(f"{working_directory}/IrregularityFile1.json", FileType.JSON).write_content(irreg1.to_json()) File(f"{working_directory}/temp/{files_name}/IrregularityFile1.json", FileType.JSON).write_content(irreg1.to_json())
console.log("[geen]Irregularity file 1 created") console.log("[geen]Irregularity file 1 created")
# create irregularity file 2 # create irregularity file 2
...@@ -86,11 +87,11 @@ def main() -> None: ...@@ -86,11 +87,11 @@ def main() -> None:
} }
console.log("Video irregularity file 1 found") console.log("Video irregularity file 1 found")
irreg2 = sf.merge_irreg_files(irreg1, IrregularityFile.from_json(video_irreg_1)) irreg2 = sf.merge_irreg_files(irreg1, IrregularityFile.from_json(video_irreg_1))
File(f"{working_directory}/IrregularityFile2.json", FileType.JSON).write_content(irreg2.to_json())
console.log("[geen]Irregularity file 2 created") console.log("[geen]Irregularity file 2 created")
with console.status("[cyan]Extracting audio irregularities", spinner="dots"): with console.status("[cyan]Extracting audio irregularities", spinner="dots"):
sf.extract_audio_irregularities(audio_src, irreg2, working_directory) irreg2= sf.extract_audio_irregularities(audio_src, irreg2, working_directory + "/temp/" + files_name)
File(f"{working_directory}/temp/{files_name}/IrregularityFile2.json", FileType.JSON).write_content(irreg2.to_json())
console.log("[green]Audio irregularities extracted") console.log("[green]Audio irregularities extracted")
# classify audio irregularities # classify audio irregularities
......
...@@ -106,7 +106,7 @@ def extract_audio_irregularities( ...@@ -106,7 +106,7 @@ def extract_audio_irregularities(
audio_src: str, audio_src: str,
irreg_file: IrregularityFile, irreg_file: IrregularityFile,
path: str path: str
) -> None: ) -> IrregularityFile:
channels_map = File(TMP_CHANNELS_MAP, FileType.JSON).get_content() channels_map = File(TMP_CHANNELS_MAP, FileType.JSON).get_content()
os.makedirs(f"{path}/AudioBlocks", exist_ok=True) os.makedirs(f"{path}/AudioBlocks", exist_ok=True)
...@@ -115,9 +115,9 @@ def extract_audio_irregularities( ...@@ -115,9 +115,9 @@ def extract_audio_irregularities(
for irreg in irreg_file.irregularities: for irreg in irreg_file.irregularities:
if channels_map.get(str(irreg.irregularity_ID)) is None: if channels_map.get(str(irreg.irregularity_ID)) is None:
audio[seconds_to_frames( audio[seconds_to_frames(
time_to_seconds(irreg.time_label), audio.samplerate time_to_seconds(irreg.time_label), audio.samplerate
):seconds_to_frames( ):seconds_to_frames(
time_to_seconds(irreg.time_label), audio.samplerate)+audio.samplerate//2]\ time_to_seconds(irreg.time_label), audio.samplerate)+audio.samplerate//2]\
.save(f"{path}/AudioBlocks/{irreg.irregularity_ID}.wav") .save(f"{path}/AudioBlocks/{irreg.irregularity_ID}.wav")
else: else:
audio.get_channel(channels_map[str(irreg.irregularity_ID)])[ audio.get_channel(channels_map[str(irreg.irregularity_ID)])[
...@@ -126,4 +126,7 @@ def extract_audio_irregularities( ...@@ -126,4 +126,7 @@ def extract_audio_irregularities(
):seconds_to_frames( ):seconds_to_frames(
time_to_seconds(irreg.time_label), audio.samplerate)+audio.samplerate//2]\ time_to_seconds(irreg.time_label), audio.samplerate)+audio.samplerate//2]\
.save(f"{path}/AudioBlocks/{irreg.irregularity_ID}.wav") .save(f"{path}/AudioBlocks/{irreg.irregularity_ID}.wav")
irreg.audio_block_URI = f"{path}/AudioBlocks/{irreg.irregularity_ID}.wav"
os.remove(TMP_CHANNELS_MAP) os.remove(TMP_CHANNELS_MAP)
return irreg_file
from fastapi import FastAPI from concurrent import futures
from rich.console import Console
from mpai_cae_arp.files import File, FileType from mpai_cae_arp.files import File, FileType
from mpai_cae_arp.types.irregularity import IrregularityFile from mpai_cae_arp.types.irregularity import IrregularityFile
from mpai_cae_arp.types.schema import Info import grpc
from mpai_cae_arp.network import arp_pb2_grpc as arp_pb2_grpc
from mpai_cae_arp.network.arp_pb2 import (
ComputationRequest,
ComputationResult,
Contact,
Info,
License,
)
import time
info = File('config/server.yaml', FileType.YAML).get_content() info = File('config/server.yaml', FileType.YAML).get_content()
app = FastAPI(**info)
@app.get('/')
async def get_endpoints_list() -> list[str]:
"""Get list of all endpoints."""
return [route.path for route in app.routes]
@app.get('/description')
async def get_description() -> Info:
"""Get description of the server."""
return info
@app.get('/irregularityFile/{id}') class AudioAnalyserServicer(arp_pb2_grpc.AudioAnalyserServicer):
async def get_irregularity_file(id: int) -> IrregularityFile:
"""Get irregularity file by id.""" def __init__(self, console: Console):
return IrregularityFile(irregularities=[], offset=150) self.console = console
\ No newline at end of file
def getAimInfo(self, request, context) -> Info:
self.console.log('Received request for AIM info')
return Info(
title=info['title'],
description=info['description'],
version=info['version'],
contact=Contact(
name=info['contact']['name'],
email=info['contact']['email'],
),
license=License(
name=info['license_info']['name'],
url=info['license_info']['url'],
)
)
def analyse(self, request: ComputationRequest, context):
self.console.log('Received request for computation')
for x in range(10):
yield ComputationResult(
success=True,
message=f'Processing {x * 10}%'
)
time.sleep(2)
def serve(console):
server = grpc.server(futures.ThreadPoolExecutor(max_workers=10))
arp_pb2_grpc.add_AudioAnalyserServicer_to_server(AudioAnalyserServicer(console), server)
server.add_insecure_port('[::]:50051')
server.start()
server.wait_for_termination()
if __name__ == '__main__':
console = Console()
console.print('Server started at localhost:50051 :satellite:')
serve(console)
\ No newline at end of file
Supports Markdown
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment