Python
Meili
Meili (美丽) to oprogramowanie, które pozwala tłumaczyć chiński na żywo, z przezroczystą nakładką z pinyin i znaczeniem.
美丽 (Meili) oznacza "piękny".

HUD DO NAUKI MANDARYŃSKIEGO • LOKALNE TŁUMACZENIE • TEKST NA MOWĘ
Co to jest?
Meili (美丽) to oprogramowanie, które pozwala tłumaczyć chiński na żywo, z przezroczystą nakładką zawierającą pinyin i znaczenie.
Funkcje
1. Region obserwacji
- Po uruchomieniu wybierasz okno do udostępnienia w oknie dialogowym systemu.
- Kliknij nakładkę, aby otworzyć zamrożoną klatkę strumienia, a następnie narysuj na niej prostokąt, aby ustawić region obserwacji (prawy przycisk myszy lub Esc anuluje).
- Aplikacja nadal obserwuje ten obszar udostępnionego okna: co 3 sekundy odczytuje tam chiński tekst i tłumaczy go tylko wtedy, gdy pojawi się nowa linia.
- Kliknij prawym przyciskiem myszy na nakładce, aby wyczyścić region.
2. Karta nauki
- Każdy wynik pokazuje hanzi, pinyin (
pypinyin), podział słów z CC-CEDICT i tłumaczenie (lokalny MarianMT,Helsinki-NLP/opus-mt-zh-en). - Karta jest wyśrodkowana poziomo na dole nakładki. Aplikacja rysuje tekst z obrysem, aby pozostał czytelny na wideo.
3. Tłumaczenie zaznaczenia
- Zaznacz chiński tekst w dowolnym miejscu na pulpicie, a aplikacja przetworzy go przez ten sam potok: filtr CJK → karta → tłumaczenie.
4. Klawisz skrótu
- Naciśnij
Ctrl+Alt+S, aby przechwycić ekran. Aplikacja wykonuje na nim OCR i tłumaczy znaleziony chiński tekst.
5. Tekst na mowę
- NeuTTS (lokalny neuronowy TTS, opcjonalny, włączony w konfiguracji).
- gTTS jako zapasowy.
- Aplikacja odczytuje hanzi lub tłumaczenie, odpowiednio po chińsku lub angielsku.
6. Rozszerzenie przeglądarki (Chromium)
- Zaznacz chiński tekst na stronie, a rozszerzenie wyświetli podpowiedź z tłumaczeniem na stronie.
- Rozszerzenie komunikuje się z lokalnym backendem pod adresem
127.0.0.1:8263. - Rozszerzenie przechowuje kontekst strony tylko w pamięci. Nic nie zapisuje na dysku.
Instalacja
Wymagania wstępne
- Python 3.12+
- Node.js (najnowsza wersja LTS, dla rozszerzenia przeglądarki)
- Tesseract OCR z wytrenowanymi danymi
chi_simieng(dołączone wdata/tessdata/) - PyGObject + GStreamer + wtyczka GStreamer PipeWire (dla udostępniania portalu w Wayland)
- Przeglądarka oparta na Chromium (dla rozszerzenia)
Konfiguracja
# Zależności systemowe (Arch Linux)
./scripts/install_dependencies.sh
# Zależności Pythona
make install-pip
# Opcjonalnie: NeuTTS
make vendor
# Rozszerzenie przeglądarki
make build-extension
# Konfiguracja
cp config/example_config.yaml config/config.yaml
Konfiguracja
Edytuj config/config.yaml:
ocr:
engine: "pytesseract"
languages: ["en", "zh"] # chi_sim wykonuje pracę z hanzi
translation:
service: "helsinki-nlp"
model: "Helsinki-NLP/opus-mt-zh-en" # Chiński -> Angielski
target_language: "en"
performance:
use_gpu: false
neutts_enabled: false # wymaga vendor/neutts i src/assets/voice_ref.wav
use_gpu: false uruchamia model tłumaczenia na CPU.
Uruchomienie
make run
Załadowanie rozszerzenia
- Zbuduj je:
make build-extension - Otwórz
chrome://extensions, włącz tryb deweloperski - Wybierz "Załaduj rozpakowane" i wskaż wyjście kompilacji rozszerzenia (
src/extension/dist)
Struktura projektu
Meili/
├── src/
│ ├── mesly/ # Aplikacja Pythona
│ │ ├── capture/ # Strumieniowanie okien Portal/PipeWire, przechwytywanie ekranu
│ │ ├── config/ # Ustawienia i specyfikacje systemu
│ │ ├── dictionary/ # Wyszukiwanie w CC-CEDICT, pinyin, segmentacja
│ │ ├── ocr/ # Tesseract OCR + filtrowanie tylko CJK
│ │ ├── server/ # Backend FastAPI (endpoint rozszerzenia)
│ │ ├── translation/ # Lokalna usługa MarianMT (opus-mt-zh-en)
│ │ ├── tts/ # Synteza mowy NeuTTS / gTTS
│ │ ├── utils/ # Logowanie, klawisze skrótu
│ │ └── window/ # Nakładka HUD PyQt5
│ └── extension/ # Rozszerzenie Chromium (tłumaczenie po zaznaczeniu)
├── data/ # Dołączone tessdata + CC-CEDICT
├── config/ # Konfiguracja czasu wykonania
├── vendor/ # NeuTTS (opcjonalnie)
├── scripts/ # Skrypty instalacyjne
└── main.py # Punkt wejścia
Współpraca
Mile widziane są propozycje współpracy. Szczegółowe wytyczne dotyczące rozwoju znajdują się w pliku AGENTS.md:
- Importuj na najwyższym poziomie
- Dziel moduły na foldery
- Używaj klas w rozszerzeniach