Meili
Python

Meili

Meili (美丽) es un software que te permite traducir chino en vivo, con una superposición transparente con pinyin y significado.

GitHub|

美丽 (Meili) significa "hermoso".


image

HUD DE ESTUDIO DE MANDARÍN • TRADUCCIÓN LOCAL • TEXTO A VOZ


¿Qué es esto?

Meili (美丽) es un software que te permite traducir chino en vivo, con una superposición transparente con pinyin y significado.

Características

1. Región de visualización

  • Al iniciar, eliges la ventana a compartir en el diálogo del sistema.
  • Haz clic en la superposición para abrir un fotograma congelado de la transmisión, luego dibuja un cuadro sobre él para establecer la región observada (clic derecho o Esc cancela).
  • La aplicación sigue observando esa área de la ventana compartida: cada 3 segundos lee el chino allí y lo traduce solo cuando aparece una nueva línea.
  • Haz clic derecho en la superposición para borrar la región.

2. Tarjeta de estudio

  • Cada resultado muestra hanzi, pinyin (pypinyin), un desglose de palabras de CC-CEDICT y la traducción (MarianMT local, Helsinki-NLP/opus-mt-zh-en).
  • La tarjeta se centra horizontalmente en la parte inferior de la superposición. La aplicación dibuja el texto con un contorno para que siga siendo legible sobre el video.

3. Traducción por selección

  • Selecciona texto chino en cualquier lugar del escritorio y la aplicación lo procesa a través del mismo pipeline: filtro CJK → tarjeta → traducción.

4. Tecla de acceso rápido

  • Presiona Ctrl+Alt+S para capturar la pantalla. La aplicación la procesa con OCR y traduce cualquier chino encontrado.

5. Texto a Voz

  • NeuTTS (TTS neuronal local, opcional, habilitado en la configuración).
  • gTTS como respaldo.
  • La aplicación reproduce los hanzi o la traducción, en chino o inglés respectivamente.

6. Extensión del navegador (Chromium)

  • Selecciona texto chino en una página y la extensión muestra una información sobre herramientas de traducción en la página.
  • La extensión se comunica con el backend local en 127.0.0.1:8263.
  • La extensión mantiene el contexto de la página solo en memoria. No escribe nada en el disco.

Instalación

Requisitos previos

  • Python 3.12+
  • Node.js (última LTS, para la extensión del navegador)
  • Tesseract OCR con chi_sim y eng traineddata (incluido en data/tessdata/)
  • PyGObject + GStreamer + el plugin GStreamer de PipeWire (para compartir portal en Wayland)
  • Navegador basado en Chromium (para la extensión)

Configuración

# Dependencias del sistema (Arch Linux)
./scripts/install_dependencies.sh

# Dependencias de Python
make install-pip

# Opcional: NeuTTS
make vendor

# Extensión del navegador
make build-extension

# Configuración
cp config/example_config.yaml config/config.yaml

Configuración

Edita config/config.yaml:

ocr:
  engine: "pytesseract"
  languages: ["en", "zh"]     # chi_sim hace el trabajo de hanzi

translation:
  service: "helsinki-nlp"
  model: "Helsinki-NLP/opus-mt-zh-en"   # Chino -> Inglés
  target_language: "en"

performance:
  use_gpu: false
  neutts_enabled: false   # necesita vendor/neutts y src/assets/voice_ref.wav

use_gpu: false ejecuta el modelo de traducción en la CPU.

Ejecutar

make run

Cargar Extensión

  1. Compílala: make build-extension
  2. Abre chrome://extensions, habilita el Modo Desarrollador
  3. "Cargar sin empaquetar" y selecciona la salida de compilación de la extensión (src/extension/dist)

Estructura del Proyecto

Meili/
├── src/
│   ├── mesly/              # Aplicación Python
│   │   ├── capture/        # Transmisión de ventana Portal/PipeWire, captura de pantalla
│   │   ├── config/         # Configuración y especificaciones del sistema
│   │   ├── dictionary/     # Búsqueda CC-CEDICT, pinyin, segmentación
│   │   ├── ocr/            # Tesseract OCR + filtrado solo CJK
│   │   ├── server/         # Backend FastAPI (endpoint de la extensión)
│   │   ├── translation/    # Servicio local MarianMT (opus-mt-zh-en)
│   │   ├── tts/            # Síntesis de voz NeuTTS / gTTS
│   │   ├── utils/          # Registro, teclas de acceso rápido
│   │   └── window/         # Superposición HUD PyQt5
│   └── extension/           # Extensión Chromium (seleccionar para traducir)
├── data/                    # tessdata + CC-CEDICT incluidos
├── config/                  # Configuración en tiempo de ejecución
├── vendor/                  # NeuTTS (opcional)
├── scripts/                 # Scripts de instalación
└── main.py                  # Punto de entrada

Contribuciones

Se aceptan contribuciones. Consulta AGENTS.md para obtener directrices de desarrollo:

  • Importar en el nivel superior
  • Separar módulos en carpetas
  • Usar clases en extensiones