Vai al contenuto

SAM 2.1

Abbiamo appena aggiunto il supporto per il modello SAM2.1, più preciso. Provalo!

SAM 2: Segment Anything Model 2

Inferenza con Segment Anything 2 in Colab

SAM 2, il successore del Segment Anything Model (SAM) di Meta, è uno strumento all'avanguardia progettato per la segmentazione completa degli oggetti sia in immagini che in video. Eccelle nella gestione di dati visivi complessi attraverso un'architettura di modello unificata e richiedibile che supporta l'elaborazione in tempo reale e la generalizzazione zero-shot.

Risultati di esempio di SAM 2

Caratteristiche principali



Guarda: Come eseguire l'inferenza con SAM2 di Meta utilizzando Ultralytics | Guida dettagliata 🎉

Architettura del modello unificata

SAM 2 combina le capacità di segmentazione di immagini e video in un unico modello. Questa unificazione semplifica la distribuzione e consente prestazioni coerenti su diversi tipi di media. Sfrutta un'interfaccia flessibile basata su prompt, consentendo agli utenti di specificare gli oggetti di interesse attraverso vari tipi di prompt, come punti, bounding box o maschere.

Prestazioni in tempo reale

Il modello raggiunge velocità di inferenza in tempo reale, elaborando circa 44 fotogrammi al secondo. Questo rende SAM 2 adatto per applicazioni che richiedono un feedback immediato, come l'editing video e la realtà aumentata.

Generalizzazione Zero-Shot

SAM 2 può segmentare oggetti che non ha mai incontrato prima, dimostrando una forte generalizzazione zero-shot. Ciò è particolarmente utile in domini visivi diversi o in evoluzione in cui le categorie predefinite potrebbero non coprire tutti gli oggetti possibili.

Rifinitura interattiva

Gli utenti possono perfezionare iterativamente i risultati della segmentazione fornendo ulteriori prompt, consentendo un controllo preciso sull'output. Questa interattività è essenziale per la messa a punto dei risultati in applicazioni come l'annotazione video o l'imaging medicale.

Gestione avanzata delle sfide visive

SAM 2 include meccanismi per gestire le comuni sfide della segmentazione video, come l'occlusione e la ricomparsa degli oggetti. Utilizza un sofisticato meccanismo di memoria per tenere traccia degli oggetti nei fotogrammi, garantendo la continuità anche quando gli oggetti sono temporaneamente oscurati o escono e rientrano nella scena.

Per una comprensione più approfondita dell'architettura e delle capacità di SAM 2, consultare il paper di ricerca su SAM 2.

Prestazioni e dettagli tecnici

SAM 2 stabilisce un nuovo punto di riferimento nel settore, superando i modelli precedenti su varie metriche:

Metrica SAM 2 SOTA precedente
Segmentazione video interattiva Migliore -
Interazioni umane richieste 3 volte inferiore Baseline
Accuratezza della segmentazione delle immagini Migliorato SAM
Velocità di inferenza 6 volte più veloce SAM

Architettura del modello

Componenti Principali

  • Codificatore di immagini e video: utilizza un'architettura basata su trasformatori per estrarre funzionalità di alto livello sia da immagini che da fotogrammi video. Questo componente è responsabile della comprensione del contenuto visivo in ogni timestep.
  • Prompt Encoder: Elabora i prompt forniti dall'utente (punti, caselle, maschere) per guidare l'attività di segmentazione. Ciò consente a SAM 2 di adattarsi all'input dell'utente e di indirizzare oggetti specifici all'interno di una scena.
  • Meccanismo di memoria: Include un encoder di memoria, una banca di memoria e un modulo di attenzione della memoria. Questi componenti memorizzano e utilizzano collettivamente le informazioni dai frame precedenti, consentendo al modello di mantenere un object tracking coerente nel tempo.
  • Mask Decoder: Genera le maschere di segmentazione finali in base alle feature dell'immagine codificate e ai prompt. Nei video, utilizza anche il contesto di memoria per garantire un tracciamento accurato tra i frame.

Diagramma dell'architettura di SAM 2

Meccanismo di memoria e gestione dell'occlusione

Il meccanismo di memoria consente a SAM 2 di gestire le dipendenze temporali e le occlusioni nei dati video. Mentre gli oggetti si muovono e interagiscono, SAM 2 registra le loro caratteristiche in una banca di memoria. Quando un oggetto viene occluso, il modello può fare affidamento su questa memoria per prevedere la sua posizione e aspetto quando riappare. L'occlusion head gestisce specificamente gli scenari in cui gli oggetti non sono visibili, prevedendo la probabilità che un oggetto sia occluso.

Risoluzione dell'ambiguità Multi-Mask

In situazioni di ambiguità (ad esempio, oggetti sovrapposti), SAM 2 può generare più previsioni di maschere. Questa funzionalità è fondamentale per rappresentare accuratamente scene complesse in cui una singola maschera potrebbe non descrivere sufficientemente le sfumature della scena.

Dataset SA-V

Il dataset SA-V, sviluppato per l'addestramento di SAM 2, è uno dei dataset di segmentazione video più grandi e diversificati disponibili. Include:

  • Oltre 51.000 video: Acquisiti in 47 paesi, offrendo una vasta gamma di scenari del mondo reale.
  • Oltre 600.000 annotazioni di maschere: Annotazioni dettagliate di maschere spazio-temporali, denominate "masklets", che coprono interi oggetti e parti.
  • Scala del dataset: Presenta un numero di video 4,5 volte superiore e un numero di annotazioni 53 volte superiore rispetto ai precedenti dataset più grandi, offrendo una diversità e una complessità senza precedenti.

Benchmark

Segmentazione video di oggetti

SAM 2 ha dimostrato prestazioni superiori nei principali benchmark di segmentazione video:

Set di dati J&F J F
DAVIS 2017 82.5 79.8 85.2
YouTube-VOS 81.2 78.9 83.5

Segmentazione interattiva

Nelle attività di segmentazione interattiva, SAM 2 mostra notevole efficienza e accuratezza:

Set di dati NoC@90 AUC
DAVIS Interactive 1.54 0.872

Installazione

Per installare SAM 2, utilizzare il seguente comando. Tutti i modelli SAM 2 verranno scaricati automaticamente al primo utilizzo.

pip install ultralytics

Come utilizzare SAM 2: Versatilità nella segmentazione di immagini e video

La seguente tabella descrive in dettaglio i modelli SAM 2 disponibili, i loro pesi pre-addestrati, le attività supportate e la compatibilità con diverse modalità operative come Inferenza, Validazione, Addestramento ed Esportazione.

Tipo di modello Pesi pre-addestrati Task supportati Inferenza Validazione Training Esportazione
SAM 2 tiny sam2_t.pt Segmentazione delle istanze
SAM 2 small sam2_s.pt Segmentazione delle istanze
SAM 2 base sam2_b.pt Segmentazione delle istanze
SAM 2 large sam2_l.pt Segmentazione delle istanze
SAM 2.1 tiny sam2.1_t.pt Segmentazione delle istanze
SAM 2.1 small sam2.1_s.pt Segmentazione delle istanze
SAM 2.1 base sam2.1_b.pt Segmentazione delle istanze
SAM 2.1 large sam2.1_l.pt Segmentazione delle istanze

Esempi di previsione SAM 2

SAM 2 può essere utilizzato in un'ampia gamma di attività, tra cui l'editing video in tempo reale, l'imaging medicale e i sistemi autonomi. La sua capacità di segmentare dati visivi sia statici che dinamici lo rende uno strumento versatile per ricercatori e sviluppatori.

Segmenta con Prompt

Segmenta con Prompt

Utilizza prompt per segmentare oggetti specifici in immagini o video.

from ultralytics import SAM

# Load a model
model = SAM("sam2.1_b.pt")

# Display model information (optional)
model.info()

# Run inference with bboxes prompt
results = model("path/to/image.jpg", bboxes=[100, 100, 200, 200])

# Run inference with single point
results = model(points=[900, 370], labels=[1])

# Run inference with multiple points
results = model(points=[[400, 370], [900, 370]], labels=[1, 1])

# Run inference with multiple points prompt per object
results = model(points=[[[400, 370], [900, 370]]], labels=[[1, 1]])

# Run inference with negative points prompt
results = model(points=[[[400, 370], [900, 370]]], labels=[[1, 0]])

Segmenta Qualsiasi Cosa

Segmenta Qualsiasi Cosa

Segmenta l'intera immagine o il contenuto video senza prompt specifici.

from ultralytics import SAM

# Load a model
model = SAM("sam2.1_b.pt")

# Display model information (optional)
model.info()

# Run inference
model("path/to/video.mp4")
# Run inference with a SAM 2 model
yolo predict model=sam2.1_b.pt source=path/to/video.mp4

Segmenta video e traccia oggetti

Segmenta video

Segmenta l'intero contenuto video con prompt specifici e traccia gli oggetti.

from ultralytics.models.sam import SAM2VideoPredictor

# Create SAM2VideoPredictor
overrides = dict(conf=0.25, task="segment", mode="predict", imgsz=1024, model="sam2_b.pt")
predictor = SAM2VideoPredictor(overrides=overrides)

# Run inference with single point
results = predictor(source="test.mp4", points=[920, 470], labels=[1])

# Run inference with multiple points
results = predictor(source="test.mp4", points=[[920, 470], [909, 138]], labels=[1, 1])

# Run inference with multiple points prompt per object
results = predictor(source="test.mp4", points=[[[920, 470], [909, 138]]], labels=[[1, 1]])

# Run inference with negative points prompt
results = predictor(source="test.mp4", points=[[[920, 470], [909, 138]]], labels=[[1, 0]])
  • Questo esempio dimostra come SAM 2 può essere utilizzato per segmentare l'intero contenuto di un'immagine o di un video se non vengono forniti prompt (bounding box/punti/maschere).

Segmento e tracciamento dinamico interattivo

SAM2DynamicInteractivePredictor è un'estensione gratuita di SAM2 per l'addestramento avanzato che consente un'interazione dinamica con più fotogrammi e capacità di apprendimento continuo. Questo predittore supporta gli aggiornamenti in tempo reale e la gestione della memoria per migliorare le prestazioni di tracciamento su una sequenza di immagini. Rispetto al SAM2 originale, SAM2DynamicInteractivePredictor ricostruisce il flusso di inferenza per sfruttare al meglio i modelli SAM2 pre-addestrati senza richiedere un addestramento aggiuntivo.

Risultati di esempio di SAM 2

Caratteristiche principali

Offre tre miglioramenti significativi:

  1. Interattivo dinamico: Aggiunta di nuove richieste per unire/non separare nuove istanze nei fotogrammi successivi in qualsiasi momento durante l'elaborazione del video.
  2. Apprendimento continuo: Aggiungere nuove richieste per le istanze esistenti per migliorare le prestazioni del modello nel tempo.
  3. Supporto per immagini multiple indipendenti: Elaborazione di più immagini indipendenti (non necessariamente da una sequenza video) con condivisione della memoria e tracciamento degli oggetti tra le immagini

Capacità principali

  • Flessibilità dei prompt: Accetta caselle di delimitazione, punti e maschere come prompt.
  • Gestione del banco di memoria: Mantiene un banco di memoria dinamico per memorizzare gli stati degli oggetti nei vari frame.
  • Tracciamento di più oggetti: Supporta il tracciamento di più oggetti simultaneamente con ID oggetto individuali
  • Aggiornamenti in tempo reale: Consente di aggiungere nuove richieste durante l'inferenza senza dover rielaborare i fotogrammi precedenti.
  • Elaborazione indipendente delle immagini: Elaborazione di immagini indipendenti con un contesto di memoria condivisa per la coerenza tra gli oggetti dell'immagine.

Aggiunta dinamica di oggetti

from ultralytics.models.sam import SAM2DynamicInteractivePredictor

# Create SAM2DynamicInteractivePredictor
overrides = dict(conf=0.01, task="segment", mode="predict", imgsz=1024, model="sam2_t.pt", save=False)
predictor = SAM2DynamicInteractivePredictor(overrides=overrides, max_obj_num=10)

# Define a category by box prompt
predictor.inference(img="image1.jpg", bboxes=[[100, 100, 200, 200]], obj_ids=[1], update_memory=True)

# Detect this particular object in a new image
results = predictor(source="image2.jpg")

# Add new category with a new object ID
results = predictor(
    source="image4.jpg",
    bboxes=[[300, 300, 400, 400]],  # New object
    obj_ids=[2],  # New object ID
    update_memory=True,  # Add to memory
)
# Perform inference
results = predictor.inference(img="image5.jpg")

# Add refinement prompts to the same category to boost performance
# This helps when object appearance changes significantly
results = predictor(
    source="image6.jpg",
    points=[[150, 150]],  # Refinement point
    labels=[1],  # Positive point
    obj_ids=[2],  # Same object ID
    update_memory=True,  # Update memory with new information
)
# Perform inference on new image
results = predictor(source="image7.jpg")

Nota

Il SAM2DynamicInteractivePredictor è stato progettato per lavorare con i modelli SAM2 e supporta l'aggiunta/raffinamento di categorie da parte di tutti i modelli SAM2 . prompt di caselle/punti/maschere nativamente che SAM2 supporta. È particolarmente utile per gli scenari in cui gli oggetti appaiono o cambiano nel tempo, come ad esempio nell'annotazione video o nelle attività di editing interattivo.

Argomenti

Nome Valore predefinito Tipo di dati Descrizione
max_obj_num 3 str Il numero massimo preimpostato di categorie
update_memory False bool Se aggiornare la memoria con i nuovi prompt
obj_ids None List[int] Elenco degli ID degli oggetti corrispondenti ai prompt

Casi d'uso

SAM2DynamicInteractivePredictor è ideale per:

  • Flussi di lavoro di annotazione video in cui compaiono nuovi oggetti durante la sequenza
  • Montaggio video interattivo che richiede l'aggiunta e il perfezionamento di oggetti in tempo reale
  • Applicazioni di sorveglianza con esigenze di tracciamento dinamico degli oggetti
  • Imaging medico per il tracciamento di strutture anatomiche attraverso serie temporali
  • Sistemi autonomi che richiedono il rilevamento e l'inseguimento adattivo degli oggetti
  • Set di dati a più immagini per una segmentazione coerente degli oggetti su immagini indipendenti
  • Analisi della raccolta di immagini in cui è necessario tracciare gli oggetti su diverse scene
  • Segmentazione cross-domain sfruttando la memoria di diversi contesti di immagine
  • Annotazione semi-automatica per la creazione efficiente di set di dati con un intervento manuale minimo

Confronto tra SAM 2 e YOLO

Qui confrontiamo i modelli SAM 2 di Meta, inclusa la variante più piccola SAM2-t, con il modello di segmentazione più piccolo di Ultralytics, YOLO11n-seg:

Modello Dimensione
(MB)
Parametri
(M)
Velocità (CPU)
(ms/im)
Meta SAM-b 375 93.7 49401
Meta SAM2-b 162 80.8 31901
Meta SAM2-t 78.1 38.9 25997
MobileSAM 40.7 10.1 25381
FastSAM-s con backbone YOLOv8 23.7 11.8 55.9
Ultralytics YOLOv8n-seg 6.7 (11.7 volte più piccolo) 3.4 (11.4 volte inferiore) 24.5 (1061 volte più veloce)
Ultralytics YOLO11n-seg 5.9 (13,2 volte più piccolo) 2.9 (13,4 volte inferiore) 30.1 (864 volte più veloce)

Questo confronto dimostra le sostanziali differenze nelle dimensioni e nelle velocità dei modelli tra le varianti SAM e i modelli di segmentazione YOLO. Mentre SAM offre capacità uniche di segmentazione automatica, i modelli YOLO, in particolare YOLOv8n-seg e YOLO11n-seg, sono significativamente più piccoli, più veloci e più efficienti dal punto di vista computazionale.

Test eseguiti su un Apple M4 Pro 2025 con 24 GB di RAM utilizzando torch==2.6.0 e ultralytics==8.3.90. Per riprodurre questo test:

Esempio

from ultralytics import ASSETS, SAM, YOLO, FastSAM

# Profile SAM2-t, SAM2-b, SAM-b, MobileSAM
for file in ["sam_b.pt", "sam2_b.pt", "sam2_t.pt", "mobile_sam.pt"]:
    model = SAM(file)
    model.info()
    model(ASSETS)

# Profile FastSAM-s
model = FastSAM("FastSAM-s.pt")
model.info()
model(ASSETS)

# Profile YOLO models
for file_name in ["yolov8n-seg.pt", "yolo11n-seg.pt"]:
    model = YOLO(file_name)
    model.info()
    model(ASSETS)

Auto-Annotazione: creazione efficiente di dataset

L'auto-annotazione è una potente funzionalità di SAM 2, che consente agli utenti di generare dataset di segmentazione in modo rapido e accurato sfruttando modelli pre-addestrati. Questa capacità è particolarmente utile per creare dataset di grandi dimensioni e di alta qualità senza un ampio sforzo manuale.

Come eseguire l'annotazione automatica con SAM 2



Guarda: Auto Annotation con il modello Segment Anything 2 di Meta che utilizza Ultralytics | Etichettatura dei dati

Per annotare automaticamente il tuo set di dati utilizzando SAM 2, segui questo esempio:

Esempio di auto-annotazione

from ultralytics.data.annotator import auto_annotate

auto_annotate(data="path/to/images", det_model="yolo11x.pt", sam_model="sam2_b.pt")
Argomento Tipo Predefinito Descrizione
data str richiesto Percorso della directory contenente le immagini di destinazione per l'annotazione o la segmentazione.
det_model str 'yolo11x.pt' Percorso del modello di rilevamento YOLO per il rilevamento iniziale degli oggetti.
sam_model str 'sam_b.pt' Percorso del modello SAM per la segmentazione (supporta le varianti SAM, SAM2 e i modelli mobile_sam).
device str '' Dispositivo di calcolo (ad esempio, 'cuda:0', 'cpu' o '' per il rilevamento automatico del dispositivo).
conf float 0.25 Soglia di confidenza del rilevamento YOLO per filtrare i rilevamenti deboli.
iou float 0.45 Soglia IoU per la Non-Maximum Suppression per filtrare i riquadri sovrapposti.
imgsz int 640 Dimensione di input per il ridimensionamento delle immagini (deve essere un multiplo di 32).
max_det int 300 Numero massimo di rilevamenti per immagine per efficienza della memoria.
classes list[int] None Elenco degli indici di classe da rilevare (ad esempio, [0, 1] per persone e biciclette).
output_dir str None Salva la directory per le annotazioni (il valore predefinito è './labels' relativo al percorso dei dati).

Questa funzione facilita la rapida creazione di set di dati di segmentazione di alta qualità, ideale per ricercatori e sviluppatori che mirano ad accelerare i propri progetti.

Limitazioni

Nonostante i suoi punti di forza, SAM 2 ha alcune limitazioni:

  • Stabilità del tracking: SAM 2 potrebbe perdere la traccia degli oggetti durante sequenze estese o cambiamenti significativi del punto di vista.
  • Confusione Oggetti: Il modello a volte può confondere oggetti simili, in particolare in scene affollate.
  • Efficienza con più oggetti: L'efficienza della segmentazione diminuisce quando si elaborano più oggetti contemporaneamente a causa della mancanza di comunicazione tra gli oggetti.
  • Dettaglio Accuratezza: Potrebbe perdere dettagli fini, soprattutto con oggetti in rapido movimento. Ulteriori prompt possono parzialmente risolvere questo problema, ma la fluidità temporale non è garantita.

Citazioni e riconoscimenti

Se SAM 2 è una parte cruciale del vostro lavoro di ricerca o sviluppo, citatelo utilizzando il seguente riferimento:

@article{ravi2024sam2,
  title={SAM 2: Segment Anything in Images and Videos},
  author={Ravi, Nikhila and Gabeur, Valentin and Hu, Yuan-Ting and Hu, Ronghang and Ryali, Chaitanya and Ma, Tengyu and Khedr, Haitham and R{\"a}dle, Roman and Rolland, Chloe and Gustafson, Laura and Mintun, Eric and Pan, Junting and Alwala, Kalyan Vasudev and Carion, Nicolas and Wu, Chao-Yuan and Girshick, Ross and Doll{\'a}r, Piotr and Feichtenhofer, Christoph},
  journal={arXiv preprint},
  year={2024}
}

Estendiamo la nostra gratitudine a Meta AI per i loro contributi alla comunità AI con questo modello e dataset rivoluzionari.

FAQ

Cos'è SAM 2 e come migliora il Segment Anything Model (SAM) originale?

SAM 2, il successore del Segment Anything Model (SAM) di Meta, è uno strumento all'avanguardia progettato per la segmentazione completa degli oggetti sia in immagini che in video. Eccelle nella gestione di dati visivi complessi attraverso un'architettura di modello unificata e richiedibile che supporta l'elaborazione in tempo reale e la generalizzazione zero-shot. SAM 2 offre diversi miglioramenti rispetto al SAM originale, tra cui:

  • Architettura del modello unificata: Combina le capacità di segmentazione di immagini e video in un unico modello.
  • Prestazioni in tempo reale: Elabora circa 44 fotogrammi al secondo, rendendolo adatto per applicazioni che richiedono un feedback immediato.
  • Generalizzazione Zero-Shot: Segmenta oggetti che non ha mai incontrato prima, utile in diversi domini visivi.
  • Rifinitura Interattiva: Consente agli utenti di affinare iterativamente i risultati della segmentazione fornendo ulteriori prompt.
  • Gestione avanzata delle sfide visive: Gestisce le sfide comuni della segmentazione video come l'occlusione e la ricomparsa degli oggetti.

Per maggiori dettagli sull'architettura e le capacità di SAM 2, consulta il paper di ricerca su SAM 2.

Come posso usare SAM 2 per la segmentazione video in tempo reale?

SAM 2 può essere utilizzato per la segmentazione video in tempo reale sfruttando la sua interfaccia interattiva e le capacità di inferenza in tempo reale. Ecco un esempio di base:

Segmenta con Prompt

Utilizza prompt per segmentare oggetti specifici in immagini o video.

from ultralytics import SAM

# Load a model
model = SAM("sam2_b.pt")

# Display model information (optional)
model.info()

# Segment with bounding box prompt
results = model("path/to/image.jpg", bboxes=[100, 100, 200, 200])

# Segment with point prompt
results = model("path/to/image.jpg", points=[150, 150], labels=[1])

Per un utilizzo più completo, fare riferimento alla sezione Come usare SAM 2.

Quali set di dati vengono utilizzati per addestrare SAM 2 e in che modo migliorano le sue prestazioni?

SAM 2 è addestrato sul dataset SA-V, uno dei dataset di segmentazione video più grandi e diversificati disponibili. Il dataset SA-V include:

  • Oltre 51.000 video: Acquisiti in 47 paesi, offrendo una vasta gamma di scenari del mondo reale.
  • Oltre 600.000 annotazioni di maschere: Annotazioni dettagliate di maschere spazio-temporali, denominate "masklets", che coprono interi oggetti e parti.
  • Scala del dataset: Presenta un numero di video 4,5 volte superiore e un numero di annotazioni 53 volte superiore rispetto ai precedenti dataset più grandi, offrendo una diversità e una complessità senza precedenti.

Questo vasto set di dati consente a SAM 2 di ottenere prestazioni superiori nei principali benchmark di segmentazione video e migliora le sue capacità di generalizzazione zero-shot. Per maggiori informazioni, consultare la sezione SA-V Dataset.

In che modo SAM 2 gestisce le occlusioni e le ricomparse di oggetti nella segmentazione video?

SAM 2 include un sofisticato meccanismo di memoria per gestire le dipendenze temporali e le occlusioni nei dati video. Il meccanismo di memoria consiste in:

  • Encoder di memoria e banca di memoria: Memorizza le caratteristiche dei frame precedenti.
  • Modulo di attenzione alla memoria: Utilizza le informazioni memorizzate per mantenere un tracciamento coerente degli oggetti nel tempo.
  • Occlusion Head: Gestisce specificamente gli scenari in cui gli oggetti non sono visibili, prevedendo la probabilità che un oggetto sia occluso.

Questo meccanismo garantisce la continuità anche quando gli oggetti sono temporaneamente oscurati o escono e rientrano nella scena. Per maggiori dettagli, consultare la sezione Meccanismo di memoria e gestione dell'occlusione.

Come si confronta SAM 2 con altri modelli di segmentazione come YOLO11?

I modelli SAM 2, come SAM2-t e SAM2-b di Meta, offrono potenti capacità di segmentazione zero-shot, ma sono significativamente più grandi e più lenti rispetto ai modelli YOLO11. Ad esempio, YOLO11n-seg è circa 13 volte più piccolo e oltre 860 volte più veloce di SAM2-b. Mentre SAM 2 eccelle in scenari di segmentazione versatili, basati su prompt e zero-shot, YOLO11 è ottimizzato per velocità, efficienza e applicazioni in tempo reale, rendendolo più adatto per l'implementazione in ambienti con risorse limitate.



📅 Creato 1 anno fa ✏️ Aggiornato 4 giorni fa

Commenti