La distribuzione dei vari componenti avviene tramite pacchetti generati usando setuptools.
Ogni pacchetto deve essere chiamato come unchained-nomepacchetto al fine di poterli facilmente identificare tra tutti i package Python installati.
Ogni rilascio di un pacchetto deve incrementare il numero di versione specificato nel file di configurazione di setuptools, seguendo le regole del versionamento semantico: la MAJOR RELEASE indica versioni non compatibili, la MINOR RELEASE versioni compatibili in avanti.
È disponibile un pacchetto di esempio contenente la documentazione tecnica per la creazione di un pacchetto su Gitea.
Ogni feature extractor viene richiamato con un dizionario relativo a tutte le query caricate; le chiavi indicano l'ID (e.g. il nome del contenuto), i valori rappresentano il path sul disco del contenuto.
Per ogni query viene restituito un array numpy rappresentante le feature estratte.
# Funzione relativa a un singolo feature extractor
def extract_features(file_paths: Mapping[ProbeID, Path]) -> Mapping[ProbeID, FeatureVector]:
pass
Ogni feature classifier viene richiamato con l'ID del classifier desiderato e un dizionario relativo a tutte le query caricate; le chiavi indicano l'ID (e.g. il nome del contenuto), i valori rappresentano le feature estratte dal corrispondente extractor.
Per ogni query viene restituita una stringa rappresentante la label della classe assegnata.
CLASSIFIER_IDS = ["classifier_a", "classifier_b"]
# Funzione relativa a un singolo feature classifier
def classify_features(classifier: ClassifierID, features: Mapping[ProbeID, FeatureVector]) -> Mapping[ProbeID, ClassName]:
pass
Il decision fuser viene richiamato con un dizionario relativo a tutte le query caricate; le chiavi indicano l'ID (e.g. il nome del contenuto), i valori rappresentano dei dizionari relativi a tutti i classifier chiamati -- le chiavi indicano l'ID del classifier, i valori rappresentano le decisioni prese da ogni classifier.
Per ogni query viene restituita una sequenza di dizionari, ognuno relativo a un insieme di classi; le chiavi indicano le label delle classi, i valori rappresentano la probabilità associata a ogni classe.
def fuse_decisions(decisions: Mapping[ProbeID, Mapping[ClassifierID, ClassName]]) -> Mapping[ProbeID, Sequence[Mapping[ClassName, Probability]]]:
pass
Il signature builder viene richiamato con un dizionario relativo a tutte le query caricate; le chiavi indicano l'ID (e.g. il nome del contenuto), i valori rappresentano le feature ottenute da ogni extractor.
Per ogni query viene restituito un numpy array rappresentante la signature del contenuto, ottenuta combinando le feature in ingresso.
def build_signatures(features: Mapping[ProbeID, Sequence[FeatureVector]]) -> Mapping[ProbeID, FeatureVector]:
pass
I moduli (estrattori, classificatori, ...) possono essere caricati dinamicamente tramite l'uso di importlib.
La lista dei pacchetti per ogni funzione può essere salvata in un file di configurazione esterno.
Riportiamo di seguito un esempio per i feature extractors. Analogamente possono essere caricati i moduli per classificatori, fusori, ...
import importlib
# Nomi dei pacchetti da caricare per la specifica funzione (e.g. feature extractors)
FEATURE_EXTRACTORS_NAMES = ["package1", "package2"]
extractors = []
# Caricamento degli estrattori
for package_name in FEATURE_EXTRACTORS_NAMES:
extractors.append(importlib.import_module(package_name))
# Uso degli estrattori
for pkg in extractors:
results.append(pkg.extract_features(file_paths))
A preliminary interface is available at: dimostrazione-beta-frontend.mp4
tmux attachsource ~/.bashrc
cd /data/lesc/staff/shullani/Documents/Research/IAPP/RED/Dimostratore/unchained-nice-frontend
npm run serve
sudo su
sudo docker run --rm -t --name milvus_cpu -p 19530:19530 -p 19121:19121 -v /home/virgilio-admin/milvus/db:/var/lib/milvus/db -v /home/virgilio-admin/milvus/conf:/var/lib/milvus/conf -v /home/virgilio-admin/milvus/logs:/var/lib/milvus/logs -v /home/virgilio-admin/milvus/wal:/var/lib/milvus/wal milvusdb/milvus:1.1.1-cpu-d061621-330cc6
tmux attachsource ~/.bashrc
conda activate unchained-test
(unchained-test) cd /Prove/Shullani/Dimostratore-RED/unchained-backend-complete/unchained-backend
(unchained-test) python manage.py runserver 0.0.0.0:8000