Meili
Python

Meili

Meili (美丽) è un software che ti permette di tradurre il cinese dal vivo, con una sovrapposizione trasparente con pinyin e significato.

GitHub|

美丽 (Meili) significa "bello".


immagine

HUD STUDIO MANDARINO • TRADUZIONE LOCALE • TEXT-TO-SPEECH


Cos'è questo?

Meili (美丽) è un software che ti permette di tradurre il cinese dal vivo, con una sovrapposizione trasparente con pinyin e significato.

Funzionalità

1. Regione di visualizzazione

  • All'avvio, scegli la finestra da condividere nella finestra di dialogo del sistema.
  • Fai clic sulla sovrapposizione per aprire un fotogramma congelato dello stream, quindi disegna un riquadro su di esso per impostare la regione osservata (fare clic con il pulsante destro del mouse o Esc annulla).
  • L'app continua a osservare quell'area della finestra condivisa: ogni 3 secondi legge il cinese presente e lo traduce solo quando appare una nuova riga.
  • Fai clic con il pulsante destro del mouse sulla sovrapposizione per cancellare la regione.

2. Scheda di studio

  • Ogni risultato mostra hanzi, pinyin (pypinyin), una scomposizione di parole da CC-CEDICT e la traduzione (MarianMT locale, Helsinki-NLP/opus-mt-zh-en).
  • La scheda è centrata orizzontalmente in fondo alla sovrapposizione. L'app disegna il testo con un contorno in modo che rimanga leggibile sopra il video.

3. Traduzione della selezione

  • Seleziona testo cinese ovunque sul desktop e l'app lo elabora attraverso la stessa pipeline: filtro CJK → scheda → traduzione.

4. Tasto di scelta rapida

  • Premi Ctrl+Alt+S per acquisire lo schermo. L'app lo OCRizza e traduce qualsiasi cinese trovato.

5. Text-to-Speech

  • NeuTTS (TTS neurale locale, opzionale, abilitato nella configurazione).
  • Fallback gTTS.
  • L'app pronuncia gli hanzi o la traduzione, rispettivamente in cinese o inglese.

6. Estensione del browser (Chromium)

  • Seleziona testo cinese in una pagina e l'estensione mostra un tooltip di traduzione nella pagina.
  • L'estensione comunica con il backend locale su 127.0.0.1:8263.
  • L'estensione mantiene il contesto della pagina solo in memoria. Non scrive nulla su disco.

Installazione

Prerequisiti

  • Python 3.12+
  • Node.js (ultima LTS, per l'estensione del browser)
  • Tesseract OCR con traineddata chi_sim e eng (fornito in data/tessdata/)
  • PyGObject + GStreamer + il plugin GStreamer PipeWire (per la condivisione del portale su Wayland)
  • Browser basato su Chromium (per l'estensione)

Configurazione

# Dipendenze di sistema (Arch Linux)
./scripts/install_dependencies.sh

# Dipendenze Python
make install-pip

# Opzionale: NeuTTS
make vendor

# Estensione del browser
make build-extension

# Configurazione
cp config/example_config.yaml config/config.yaml

Configurazione

Modifica config/config.yaml:

ocr:
  engine: "pytesseract"
  languages: ["en", "zh"]     # chi_sim fa il lavoro degli hanzi

translation:
  service: "helsinki-nlp"
  model: "Helsinki-NLP/opus-mt-zh-en"   # Cinese -> Inglese
  target_language: "en"

performance:
  use_gpu: false
  neutts_enabled: false   # richiede vendor/neutts e src/assets/voice_ref.wav

use_gpu: false esegue il modello di traduzione sulla CPU.

Esecuzione

make run

Carica Estensione

  1. Costruiscila: make build-extension
  2. Apri chrome://extensions, abilita la Modalità sviluppatore
  3. "Carica non pacchettizzata" e seleziona l'output di build dell'estensione (src/extension/dist)

Struttura del Progetto

Meili/
├── src/
│   ├── mesly/              # Applicazione Python
│   │   ├── capture/        # Streaming finestra Portal/PipeWire, acquisizione schermo
│   │   ├── config/         # Impostazioni e specifiche di sistema
│   │   ├── dictionary/     # Ricerca CC-CEDICT, pinyin, segmentazione
│   │   ├── ocr/            # Tesseract OCR + filtraggio solo CJK
│   │   ├── server/         # Backend FastAPI (endpoint estensione)
│   │   ├── translation/    # Servizio MarianMT locale (opus-mt-zh-en)
│   │   ├── tts/            # Sintesi vocale NeuTTS / gTTS
│   │   ├── utils/          # Logging, tasti di scelta rapida
│   │   └── window/         # Sovrapposizione HUD PyQt5
│   └── extension/           # Estensione Chromium (selezione per tradurre)
├── data/                    # Tessdata forniti + CC-CEDICT
├── config/                  # Configurazione runtime
├── vendor/                  # NeuTTS (opzionale)
├── scripts/                 # Script di installazione
└── main.py                  # Punto di ingresso

Contribuzioni

Contributi benvenuti. Vedi AGENTS.md per le linee guida di sviluppo:

  • Importa a livello principale
  • Separa i moduli in cartelle
  • Usa classi nelle estensioni