Commit 7f2bb3a1 authored by Matteo's avatar Matteo
Browse files

refactor to pythonic package

parent 6b43a93e
test/ tests/
.editorconfig .editorconfig
.gitignore .gitignore
.env .env
\ No newline at end of file
...@@ -4,10 +4,10 @@ WORKDIR /app ...@@ -4,10 +4,10 @@ WORKDIR /app
COPY . ./ COPY . ./
RUN apt install ffmpeg -y RUN apt update && apt install ffmpeg -y
RUN poetry install --no-cache --only main RUN poetry install --no-cache --only main
VOLUME [ "/data" ] VOLUME [ "/data" ]
CMD ["poetry", "run", "python", "src/server.py"] CMD ["poetry", "run", "python", "src/audio_analyzer/server.py"]
\ No newline at end of file \ No newline at end of file
...@@ -44,9 +44,6 @@ install: ...@@ -44,9 +44,6 @@ install:
test: test:
$(POETRY) pytest $(POETRY) pytest
test-coverage:
$(POETRY) pytest --cov-config .coveragerc --cov-report term-missing --cov-report html --cov=src
format: format:
$(POETRY) ruff check --fix ./src ./tests $(POETRY) ruff check --fix ./src ./tests
......
...@@ -5,6 +5,13 @@ description = "MPAI CAE-ARP Audio Analyser" ...@@ -5,6 +5,13 @@ description = "MPAI CAE-ARP Audio Analyser"
authors = ["Matteo Spanio <dev2@audioinnova.com>"] authors = ["Matteo Spanio <dev2@audioinnova.com>"]
license = "GPLv3" license = "GPLv3"
readme = "README.md" readme = "README.md"
packages = [
{ include = "audio_analyzer", from = "src" },
{ include = "ml", from = "src" }
]
[tool.poetry.scripts]
audio-analyser = 'audio_analyzer.cli:main'
[tool.poetry.dependencies] [tool.poetry.dependencies]
python = "^3.10" python = "^3.10"
......
...@@ -2,10 +2,10 @@ from pandas import DataFrame ...@@ -2,10 +2,10 @@ from pandas import DataFrame
from mpai_cae_arp.audio import AudioWave from mpai_cae_arp.audio import AudioWave
from mpai_cae_arp.types.irregularity import Irregularity, IrregularityProperties from mpai_cae_arp.types.irregularity import Irregularity, IrregularityProperties
from ml.classification import load_model, ClassificationResult from ml import classification as mlc
def classification_to_irreg_properties(classification: ClassificationResult) -> IrregularityProperties: def classification_to_irreg_properties(classification: mlc.ClassificationResult) -> IrregularityProperties:
return IrregularityProperties( return IrregularityProperties(
reading_equalisation=classification.reading_equalization, reading_equalisation=classification.reading_equalization,
reading_speed=classification.reading_speed, reading_speed=classification.reading_speed,
...@@ -19,7 +19,7 @@ def classify(audio_blocks: DataFrame) -> list[IrregularityProperties]: ...@@ -19,7 +19,7 @@ def classify(audio_blocks: DataFrame) -> list[IrregularityProperties]:
audio_blocks_classification = [] audio_blocks_classification = []
# classify the audioBlocks # classify the audioBlocks
eq_classifier = load_model("pretto_and_berio_nono_classifier") eq_classifier = mlc.load_model("pretto_and_berio_nono_classifier")
prediction = eq_classifier.predict(audio_blocks) prediction = eq_classifier.predict(audio_blocks)
for i in range(len(prediction)): for i in range(len(prediction)):
......
...@@ -2,13 +2,14 @@ import argparse ...@@ -2,13 +2,14 @@ import argparse
import os import os
import sys import sys
from rich.console import Console from rich.console import Console
import segment_finder as sf
import classifier as cl
from mpai_cae_arp.types.irregularity import IrregularityFile, Source from mpai_cae_arp.types.irregularity import IrregularityFile, Source
from mpai_cae_arp.files import File, FileType from mpai_cae_arp.files import File, FileType
from mpai_cae_arp.io import prettify, Style from mpai_cae_arp.io import prettify, Style
from . import segment_finder as sf
from . import classifier as cl
def get_args() -> tuple[str | None, str | None]: def get_args() -> tuple[str | None, str | None]:
if len(sys.argv) > 1: if len(sys.argv) > 1:
...@@ -27,7 +28,6 @@ def get_args() -> tuple[str | None, str | None]: ...@@ -27,7 +28,6 @@ def get_args() -> tuple[str | None, str | None]:
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}") console.print(f"[red bold]Error: {error_message}")
quit(os.EX_USAGE) quit(os.EX_USAGE)
......
from rich.console import Console from rich.console import Console
from rich.markdown import Markdown
import os import os
import grpc import grpc
...@@ -9,7 +8,7 @@ from mpai_cae_arp.network import arp_pb2_grpc ...@@ -9,7 +8,7 @@ from mpai_cae_arp.network import arp_pb2_grpc
channels = { channels = {
"AudioAnalyser": grpc.insecure_channel("[::]:50051"), "AudioAnalyser": grpc.insecure_channel("[::]:50051"),
"VideoAnalyser": grpc.insecure_channel("[::]:50052"), "VideoAnalyser": grpc.insecure_channel("[::]:50052"),
"TapeIrregularityClassifier": grpc.insecure_channel("[::]:50051/tape-irregularity-classifier"), "TapeIrregularityClassifier": grpc.insecure_channel("[::]:50053"),
"TapeAudioRestoration": grpc.insecure_channel("[::]:50051/tape-audio-restoration"), "TapeAudioRestoration": grpc.insecure_channel("[::]:50051/tape-audio-restoration"),
"Packager": grpc.insecure_channel("[::]:50051/packager"), "Packager": grpc.insecure_channel("[::]:50051/packager"),
} }
...@@ -18,15 +17,15 @@ def run(console: Console): ...@@ -18,15 +17,15 @@ def run(console: Console):
audio_analyser = arp_pb2_grpc.AIMStub(channels["AudioAnalyser"]) audio_analyser = arp_pb2_grpc.AIMStub(channels["AudioAnalyser"])
video_analyser = arp_pb2_grpc.AIMStub(channels["VideoAnalyser"]) video_analyser = arp_pb2_grpc.AIMStub(channels["VideoAnalyser"])
tape_irreg_classifier = arp_pb2_grpc.AIMStub(channels["TapeIrregularityClassifier"])
request = arp_pb2.InfoRequest() request = arp_pb2.InfoRequest()
for analyser in [audio_analyser, video_analyser]: for analyser in [audio_analyser, video_analyser, tape_irreg_classifier]:
response = analyser.getInfo(request) response = analyser.getInfo(request)
console.print("[bold]{}[/], v{}".format(response.title, response.version)) console.print("[bold]{}[/], v{}".format(response.title, response.version))
console.print(Markdown(response.description))
request = arp_pb2.JobRequest( request = arp_pb2.JobRequest(
working_dir="../data", working_dir="/data",
files_name="BERIO100", files_name="BERIO100",
index=1, index=1,
) )
...@@ -64,8 +63,19 @@ def run(console: Console): ...@@ -64,8 +63,19 @@ def run(console: Console):
exit(os.EX_SOFTWARE) exit(os.EX_SOFTWARE)
console.print(result.message) console.print(result.message)
with console.status("[bold]Computing TapeIrregularityClassifier...", spinner="bouncingBall"):
for result in tape_irreg_classifier.work(request):
if result.status == "error":
console.print("[bold red]Error![/] :boom:")
console.print(f"[italic red]{result.message}")
for channel in channels.values():
channel.close()
exit(os.EX_SOFTWARE)
console.print(result.message)
channels["AudioAnalyser"].close() channels["AudioAnalyser"].close()
channels["VideoAnalyser"].close() channels["VideoAnalyser"].close()
channels["TapeIrregularityClassifier"].close()
console.print("[bold green]Success![/] :tada:") console.print("[bold green]Success![/] :tada:")
......
...@@ -16,8 +16,8 @@ from mpai_cae_arp.network.arp_pb2 import ( ...@@ -16,8 +16,8 @@ from mpai_cae_arp.network.arp_pb2 import (
License, License,
) )
import segment_finder as sf from . import segment_finder as sf
import classifier as cl from . import classifier as cl
info = File('config.yml', FileType.YAML).get_content() info = File('config.yml', FileType.YAML).get_content()
......
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