Meili
Python

Meili

Meili (美丽) は、中国語をライブで、ピンインと意味を表示する透明なオーバーレイ付きで翻訳できるソフトウェアです。

GitHub|

美丽 (Meili) は「美しい」を意味します。


image

MANDARIN STUDY HUD • LOCAL TRANSLATION • TEXT-TO-SPEECH


これはなんですか?

Meili (美丽) は、中国語をリアルタイムで翻訳し、ピンインと意味を表示する透明なオーバーレイを備えたソフトウェアです。

機能

1. 監視領域

  • 起動時に、システムダイアログで共有するウィンドウを選択します。
  • オーバーレイをクリックするとストリームのフリーズフレームが開き、その上にボックスを描画して監視領域を設定します(右クリックまたはEscでキャンセル)。
  • アプリケーションは共有ウィンドウのその領域を監視し続けます。3秒ごとにそこにある中国語を読み取り、新しい行が表示された場合にのみ翻訳します。
  • オーバーレイを右クリックすると領域がクリアされます。

2. 学習カード

  • 各結果には、漢字、ピンイン (pypinyin)、CC-CEDICT からの単語の分解、および翻訳(ローカル MarianMT、Helsinki-NLP/opus-mt-zh-en)が表示されます。
  • カードはオーバーレイの下部中央に水平に配置されます。アプリケーションは、ビデオ上で読みやすくするために、アウトライン付きでテキストを描画します。

3. 選択翻訳

  • デスクトップ上のどこでも中国語テキストを選択すると、アプリケーションは同じパイプライン(CJKフィルター → カード → 翻訳)で処理します。

4. ホットキー

  • Ctrl+Alt+S を押すと画面がキャプチャされます。アプリケーションはそれをOCR処理し、見つかった中国語を翻訳します。

5. テキスト読み上げ

  • NeuTTS(ローカルニューラルTTS、オプション、設定で有効化)。
  • gTTS フォールバック。
  • アプリケーションは、漢字または翻訳を中国語または英語でそれぞれ読み上げます。

6. ブラウザ拡張機能 (Chromium)

  • ページ上の中国語テキストを選択すると、拡張機能がページ内翻訳ツールチップを表示します。
  • 拡張機能は 127.0.0.1:8263 のローカルバックエンドと通信します。
  • 拡張機能はページコンテキストをメモリ内のみに保持します。ディスクには何も書き込みません。

インストール

前提条件

  • Python 3.12+
  • Node.js (最新LTS、ブラウザ拡張機能用)
  • Tesseract OCR (chi_sim および eng traineddata を含む) (data/tessdata/ にバンドル)
  • PyGObject + GStreamer + PipeWire GStreamer プラグイン (Wayland でのポータル共有用)
  • Chromiumベースのブラウザ (拡張機能用)

セットアップ

# システム依存関係 (Arch Linux)
./scripts/install_dependencies.sh

# Python依存関係
make install-pip

# オプション: NeuTTS
make vendor

# ブラウザ拡張機能
make build-extension

# 設定
cp config/example_config.yaml config/config.yaml

設定

config/config.yaml を編集します:

ocr:
  engine: "pytesseract"
  languages: ["en", "zh"]     # chi_sim が漢字処理を行います

translation:
  service: "helsinki-nlp"
  model: "Helsinki-NLP/opus-mt-zh-en"   # 中国語 -> 英語
  target_language: "en"

performance:
  use_gpu: false
  neutts_enabled: false   # vendor/neutts と src/assets/voice_ref.wav が必要です

use_gpu: false は、翻訳モデルをCPUで実行します。

実行

make run

拡張機能の読み込み

  1. ビルドします: make build-extension
  2. chrome://extensions を開き、開発者モードを有効にします。
  3. 「 unpacked を読み込む」を選択し、拡張機能のビルド出力 (src/extension/dist) を選択します。

プロジェクト構造

Meili/
├── src/
│   ├── mesly/              # Pythonアプリケーション
│   │   ├── capture/        # ポータル/PipeWireウィンドウストリーミング、画面キャプチャ
│   │   ├── config/         # 設定とシステム仕様
│   │   ├── dictionary/     # CC-CEDICT検索、ピンイン、セグメンテーション
│   │   ├── ocr/            # Tesseract OCR + CJKのみのフィルタリング
│   │   ├── server/         # FastAPIバックエンド (拡張機能エンドポイント)
│   │   ├── translation/    # ローカルMarianMT (opus-mt-zh-en) サービス
│   │   ├── tts/            # NeuTTS / gTTS音声合成
│   │   ├── utils/          # ロギング、ホットキー
│   │   └── window/         # PyQt5 HUDオーバーレイ
│   └── extension/           # Chromium拡張機能 (選択して翻訳)
├── data/                    # バンドルされたtessdata + CC-CEDICT
├── config/                  # ランタイム設定
├── vendor/                  # NeuTTS (オプション)
├── scripts/                 # インストールスクリプト
└── main.py                  # エントリポイント

貢献

貢献を歓迎します。開発ガイドラインについては AGENTS.md を参照してください:

  • トップレベルでインポートする
  • モジュールをフォルダに分割する
  • 拡張機能でクラスを使用する