- Python 98.3%
- Nix 1.7%
| .gitignore | ||
| config.py | ||
| debug_heights.py | ||
| image_editor.py | ||
| mangadex_downloader.py | ||
| ocr.py | ||
| reader.py | ||
| README.md | ||
| requirements.txt | ||
| shell.nix | ||
| text_grouper.py | ||
| translate.py | ||
| translator.py | ||
Manga Translator
Traduzione automatica del testo in immagini manga con inpainting neurale e OCR avanzato.
Struttura
transmanga/
├── config.py # Configurazione globale
├── ocr.py # Rilevamento testo (PaddleOCR)
├── text_grouper.py # Raggruppamento testo (Union-Find)
├── translator.py # Traduzione (Google/DeepL)
├── image_editor.py # Editing immagini (LaMa inpainting + text rendering)
├── translate.py # Script principale traduzione
├── mangadex_downloader.py # Download capitoli da MangaDex
├── reader.py # Lettore manga (Qt6/PySide6)
├── requirements.txt
└── README.md
Caratteristiche
- OCR: PaddleOCR per rilevamento testo multi-lingua
- Inpainting: LaMa (Large Mask) neural network per rimozione testo pulita
- Speech Bubble Detection: Rilevamento automatico delle bolle di dialogo
- Font Adattivo: Dimensione font variabile (riempie le bolle, proporzionale fuori)
- Raggruppamento Intelligente: Union-Find per raggruppare righe di testo
- Lettore Integrato: App Qt6 per leggere i manga tradotti con confronto sorgente
Installazione
Con Nix (consigliato)
cd transmanga
nix-shell
Con pip
cd transmanga
python -m venv .venv
source .venv/bin/activate
pip install -r requirements.txt
Nota: La prima esecuzione scarica i modelli OCR e LaMa (~2-3 GB).
Utilizzo
Struttura cartelle
I file vengono salvati automaticamente in ~/transmanga/:
~/transmanga/
├── <Nome Manga>/
│ ├── metadata.json # Info manga (titolo, lingua, ecc.)
│ ├── sources/
│ │ └── <lingua sorgente>/ # es: pt, en, ja
│ │ ├── 1/ # Capitolo 1
│ │ │ ├── page1.jpg
│ │ │ └── ...
│ │ ├── 2/
│ │ └── ...
│ └── translated/
│ └── <lingua target>/ # es: it, en
│ ├── 1/
│ ├── 2/
│ └── ...
└── <Altro Manga>/
└── ...
Download capitoli
python mangadex_downloader.py
Inserisci URL o ID del manga da MangaDex, seleziona lingua e capitoli.
Traduzione
Modalità interattiva
python translate.py
Seleziona manga, lingua target e capitoli da tradurre.
Linea di comando
# Lista manga disponibili
python translate.py --list
# Traduci tutti i capitoli di un manga
python translate.py "Nome Manga" --all
# Traduci un capitolo specifico
python translate.py "Nome Manga" 5
# Traduci range di capitoli
python translate.py "Nome Manga" 1 10
Lettore manga
python reader.py
Funzionalità del lettore:
- Selezione manga: Dropdown per scegliere tra i manga tradotti
- Navigazione: Pulsanti < > o frecce tastiera per cambiare capitolo
- Toggle SRC: Pulsante per confrontare traduzione con originale
- Header auto-hide: L'header scompare durante lo scroll e riappare tornando su
- Shortcut tastiera:
←/→: Capitolo precedente/successivoSpazio: Scroll giùS: Toggle sorgente/tradottoEsc: Chiudi
Configurazione
Modifica config.py per personalizzare:
# OCR
DEFAULT_LANGUAGES = ['pt', 'en'] # Lingue sorgente
OCR_CONFIDENCE_THRESHOLD = 0.3
# Traduzione
TARGET_LANGUAGE = 'it'
DEEPL_API_KEY = '' # Opzionale, usa Google se vuoto
# Inpainting
INPAINT_METHOD = 'lama' # LaMa neural network
MASK_PADDING = 10
MASK_DILATION = 5
# Font
FONT_MIN_SIZE = 14
FONT_MAX_SIZE = 120
# Speech Bubble Detection
BUBBLE_DETECTION_ENABLED = True
BUBBLE_MIN_ASPECT_RATIO = 0.4 # Filtra bolle troppo larghe
BUBBLE_MAX_ASPECT_RATIO = 2.5 # Filtra bolle troppo alte
Come funziona
- OCR (PaddleOCR): Rileva testo e posizione nelle immagini
- Raggruppamento (Union-Find): Unisce righe di testo nella stessa bolla
- Traduzione (Google/DeepL): Traduce ogni blocco in italiano
- Bubble Detection: Rileva i contorni delle speech bubble
- Inpainting (LaMa): Rimuove il testo originale con rete neurale
- Rendering: Inserisce testo tradotto con font adattivo:
- Bolle: Font grande che riempie lo spazio
- Fuori bolle: Font proporzionale all'originale
Lingue supportate
Sorgente (OCR)
| Codice | Lingua |
|---|---|
| ja | Giapponese |
| ko | Coreano |
| zh | Cinese (semplificato) |
| en | Inglese |
| pt | Portoghese |
| pl | Polacco |
Destinazione (Traduzione)
Qualsiasi lingua supportata da Google Translate o DeepL.
API Modules
ocr.py
from ocr import get_ocr_engine
ocr = get_ocr_engine(['pt', 'en'])
ocr.initialize()
results = ocr.detect(image_rgb)
# [{'bbox': [[x1,y1], [x2,y2], [x3,y3], [x4,y4]], 'text': '...', 'confidence': 0.95}, ...]
text_grouper.py
from text_grouper import group_ocr_results
grouped = group_ocr_results(ocr_results, ['pt', 'en'])
# [{'bbox': [...], 'text': '...', 'original_bboxes': [...], 'items': [...]}, ...]
translator.py
from translator import translate_text
result = translate_text("Hello world", 'it')
# "Ciao mondo"
image_editor.py
from image_editor import get_editor
editor = get_editor()
result = editor.process(image_bgr, text_items)
# text_items: [{'bbox': [...], 'translated': '...', 'original_bboxes': [...]}, ...]
Troubleshooting
Font non trovato
Il programma cerca automaticamente font nel sistema. Su NixOS cerca in /nix/store/.
# Ubuntu/Debian
sudo apt install fonts-dejavu
# Fedora
sudo dnf install dejavu-sans-fonts
Modelli lenti a scaricare
Normale alla prima esecuzione. I modelli sono salvati in:
- PaddleOCR:
~/.paddlex/ - LaMa:
~/.cache/torch/
Testo duplicato
Può accadere se l'OCR rileva lo stesso testo più volte. Prova ad aumentare MASK_DILATION in config.py.
Traduzioni mancanti
Google Translate ha limiti di rate. Attendi e riprova, oppure configura una chiave DeepL.
Licenza
MIT