Meili
Python

Meili

Meili (美丽) é um software que permite traduzir o chinês ao vivo, com uma sobreposição transparente com pinyin e significado.

GitHub|

美丽 (Meili) significa "bonito".


image

HUD DE ESTUDO DE MANDARIM • TRADUÇÃO LOCAL • TEXTO PARA FALA


O que é isso?

Meili (美丽) é um software que permite traduzir chinês ao vivo, com uma sobreposição transparente com pinyin e significado.

Funcionalidades

1. Região de visualização

  • Ao iniciar, você escolhe a janela a ser compartilhada na caixa de diálogo do sistema.
  • Clique na sobreposição para abrir um quadro congelado do fluxo, em seguida, desenhe uma caixa sobre ele para definir a região observada (clique com o botão direito ou Esc cancela).
  • O aplicativo continua observando essa área da janela compartilhada: a cada 3 segundos ele lê o chinês ali e o traduz apenas quando uma nova linha aparece.
  • Clique com o botão direito na sobreposição para limpar a região.

2. Cartão de estudo

  • Cada resultado mostra hanzi, pinyin (pypinyin), uma divisão de palavras do CC-CEDICT e a tradução (MarianMT local, Helsinki-NLP/opus-mt-zh-en).
  • O cartão fica centralizado horizontalmente na parte inferior da sobreposição. O aplicativo desenha o texto com um contorno para que ele permaneça legível sobre o vídeo.

3. Tradução por seleção

  • Selecione texto em chinês em qualquer lugar da área de trabalho e o aplicativo o executa através do mesmo pipeline: filtro CJK → cartão → tradução.

4. Atalho de teclado

  • Pressione Ctrl+Alt+S para capturar a tela. O aplicativo faz OCR dela e traduz qualquer chinês encontrado.

5. Texto para Fala

  • NeuTTS (TTS neural local, opcional, ativado na configuração).
  • Fallback gTTS.
  • O aplicativo fala o hanzi ou a tradução, em chinês ou inglês, respectivamente.

6. Extensão de Navegador (Chromium)

  • Selecione texto em chinês em uma página e a extensão mostra uma dica de tradução na página.
  • A extensão se comunica com o backend local em 127.0.0.1:8263.
  • A extensão mantém o contexto da página apenas na memória. Ela não grava nada em disco.

Instalação

Pré-requisitos

  • Python 3.12+
  • Node.js (última LTS, para a extensão do navegador)
  • Tesseract OCR com traineddata chi_sim e eng (fornecido em data/tessdata/)
  • PyGObject + GStreamer + o plugin GStreamer PipeWire (para o compartilhamento de portal no Wayland)
  • Navegador baseado em Chromium (para a extensão)

Configuração

# Dependências do sistema (Arch Linux)
./scripts/install_dependencies.sh

# Dependências do Python
make install-pip

# Opcional: NeuTTS
make vendor

# Extensão do navegador
make build-extension

# Configuração
cp config/example_config.yaml config/config.yaml

Configuração

Edite config/config.yaml:

ocr:
  engine: "pytesseract"
  languages: ["en", "zh"]     # chi_sim faz o trabalho de hanzi

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

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

use_gpu: false executa o modelo de tradução na CPU.

Executar

make run

Carregar Extensão

  1. Compile-a: make build-extension
  2. Abra chrome://extensions, ative o Modo Desenvolvedor
  3. "Carregar sem pacote" e selecione a saída de compilação da extensão (src/extension/dist)

Estrutura do Projeto

Meili/
├── src/
│   ├── mesly/              # Aplicação Python
│   │   ├── capture/        # Streaming de janela Portal/PipeWire, captura de tela
│   │   ├── config/         # Configurações e especificações do sistema
│   │   ├── dictionary/     # Consulta CC-CEDICT, pinyin, segmentação
│   │   ├── ocr/            # Tesseract OCR + filtragem apenas CJK
│   │   ├── server/         # Backend FastAPI (endpoint da extensão)
│   │   ├── translation/    # Serviço local MarianMT (opus-mt-zh-en)
│   │   ├── tts/            # Síntese de voz NeuTTS / gTTS
│   │   ├── utils/          # Logging, atalhos de teclado
│   │   └── window/         # Sobreposição HUD PyQt5
│   └── extension/           # Extensão Chromium (selecionar para traduzir)
├── data/                    # Tessdata fornecido + CC-CEDICT
├── config/                  # Configuração de tempo de execução
├── vendor/                  # NeuTTS (opcional)
├── scripts/                 # Scripts de instalação
└── main.py                  # Ponto de entrada

Contribuições

Contribuições são bem-vindas. Veja AGENTS.md para diretrizes de desenvolvimento:

  • Importar no nível superior
  • Separar módulos em pastas
  • Usar classes em extensões