見出し画像

Gemini-Translation:GeminiAPIを使用した翻訳アプリ(Pythonとexe版有り)

初めに

大変困ったことにOpenAI-TranslatorでGeminiAPIを使用して翻訳しようとした場合、エラーが発生するようになったのですが、エラー発生から2週間ほど立ちましたが修正されること無く、先日のアプデでも修正されなかったため、代替のアプリを作成することにしました。

残念ながらすべての機能を実装しているわけではありません。まず、選択した所に、アイコンが出てそこをクリックすると翻訳される機能は、コードは作成できたのですが機能が安定せず、アイコンが出るタイミングがまちまちだったりしたため、実装を見送りました。

また、OCR機能やTTS機能なども実装していません。

他の似たようなアプリとしてはPOTがあり、試用していましたがこちらもGeminiAPIでの翻訳ができなくなったため利用を断念しました。

Gemini-Translation&Summarize-FutagoHonyakuのインストールと初期設定

こちらのgithubのレポジトリから、インストールしてください。
https://github.com/willailora/gemini-translator
exe版は仕様上、毎回起動時に展開を行うので、使用できるようになるまでそこそこ時間がかかります。

初期設定

画像
メインウィンドウ

起動するとこのようなウィンドウが表示されます。まずは左上の⚙APIボタンを押して、APIの設定をしましょう。APIKEYを入力してSaveボタンを押してください。

画像
設定画面

APIKEYの取得の仕方はこちらをご参照ください。
設定したらお手数ですが一旦アプリを再起動してください。一度入力すれば、次回以降の入力は不要です。
APIKEYが正しければ、モデルが読み込まれるので、下の画像のようにモデルを選択できるようになります。

画像
モデル選択

モデルは一度選択したら、次回も同じモデルが選択されます。
フォントサイズは8-24ptの範囲で設定可能です。適宜選択してください。こちらも、変更すると保存され、次回も同じ数値で開始されます。
フォントサイズが適用されるのは、SourceとResultの表示部分のみです。

Gemini-Translation&Summarize-FutagoHonyakuの機能

実装されている機能は翻訳と要約になります。デフォルトのプロンプトはシンプルなものになっていて英訳ぐらいしか出来ませんが、プロンプトの変更機能を備えていますので、例えば以下のようなプロンプトに変更することで、おそらく全言語対応になります。ついでに要約もつけるようにしています。
「あなたはプロフェッショナルな翻訳家です。提示した文書を、まず、一字一句丁寧に省略や要約すること無く全文を翻訳してください。また余計な文言を付け加えてもいけません。すべての翻訳が完了したら、要約を作成し[]で囲んで表示してください。:
{text}」
プロンプトの変更は左上の⚙APIボタンのsettings内のTlanslatePromptとSummarizePromptを変更して、Saveボタンを押すとプロンプトの変更が適用されます。
こちらも、一度変更すれば次回以降は変更したプロンプトが適用されています。
プロンプトの注意点として、必ず最後に「:
{text}」(改行も必要)を付加する必要があります。これがないと、Source内のテキストが読み込まれませんので、ご注意ください。

翻訳と要約の仕方

Source入力欄にtextを入力した後に、🌎️の絵文字のボタンを押すと翻訳が開始されます。
✒️のボタンを押すと要約になります。

画像
翻訳と要約ボタン

設定したプロンプトによって挙動は変わるので、要約じゃなくて別のことをさせることも可能です。

ショートカットキーによる翻訳

Ctrl+Alt+Tの同時押しで、現在範囲指定しているtextがSourceに送られて、自動で翻訳を開始します。挙動安定のために少しだけレイテンシを設けています。申し訳ありませんが、ショートカットキーの変更機能は実装していません。

翻訳・要約結果の自動保存

アプリのあるフォルダ内にlogフォルダが自動作成され、年月日時間分秒.txtで結果が保存されるようになっています。

画像
翻訳結果のtxt

このような形で保存されます。特にボタンを押す必要はなく自動です。要約が付いているのはプロンプトを変更しているためです。

アプリのあるフォルダに保存するため、フォルダによっては機能しない可能性があるので、その場合は権限を確認するか、アプリの場所を変更してください。

ウィンドウの移動とリサイズ

ウィンドウの移動は狭いですが、枠をマウスでホールドすれば自由に移動可能です。
ウィンドウのリサイズは右下の三角部分をマウスでホールドして移動すれば、自由に変更可能です。

config.jsonとwindow_config.jsonについて

config.jsonには、APIKEYとフォントサイズ、選択しているモデル、翻訳用プロンプトと要約用プロンプトが保存されています。
APIKEYは他人に使用されないように適切に保管してください。
window_config.jsonにはウィンドウサイズと位置が保存されています。何かで、位置がおかしくなった場合はこのファイルを削除すれば、デフォルトの位置にウィンドウが出現します。

おまけ

アイコンと同じこのページの表紙画像は、コードをClaude3.5Sonnetに見せて、Flux用の画像生成のプロンプトを作成してくださいとお願いして、でてきたプロンプトで作成したものです。アイコンはPythonで画像をいれると、.icoファイルを作成してくれるものを使用。これは以前Claude3Opusに作ってもらったコードです。

import os
from tkinterdnd2 import DND_FILES, TkinterDnD
from tkinter import Label
from PIL import Image

def create_ico(file_path, sizes):
    img = Image.open(file_path).convert("RGBA")  # 透明度を保持するためにRGBAモードに変換
    icon_sizes = []
    for size in sizes:
        icon = img.resize((size, size), Image.Resampling.LANCZOS)
        icon_sizes.append(icon)  # アイコン画像オブジェクトをリストに追加
    ico_path = os.path.splitext(file_path)[0] + '.ico'
    # 32ビット深度でICOファイルを保存
    img.save(ico_path, format='ICO', sizes=[(icon.size[0], icon.size[1]) for icon in icon_sizes], bits=32)
    return ico_path

def on_drop(event):
    file_path = event.data
    if file_path:
        try:
            sizes = [16, 32, 48, 64, 128, 256]  # アイコンのサイズを指定
            ico_path = create_ico(file_path, sizes)
            label.config(text=f'変換完了: {os.path.basename(ico_path)}')
        except Exception as e:
            label.config(text=f'エラー: {str(e)}')

if __name__ == '__main__':
    root = TkinterDnD.Tk()
    root.title('Image to ICO Converter')
    root.geometry('400x300')

    label = Label(root, text='画像ファイルをここにドラッグしてください')
    label.pack(pady=20)

    root.drop_target_register(DND_FILES)
    root.dnd_bind('<<Drop>>', on_drop)

    root.mainloop()

ドネーションをしてくれる方は以下のURLからお願いします。 https://ko-fi.com/ailorawill


連絡先 プロジェクトに関する質問やコメントがある場合は、https://x.com/plionplionか、Discordで@willlionまでご連絡ください。


いいなと思ったら応援しよう!

コメント

コメントするには、 ログイン または 会員登録 をお願いします。
Gemini-Translation:GeminiAPIを使用した翻訳アプリ(Pythonとexe版有り)|ailora will
word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word

mmMwWLliI0fiflO&1
mmMwWLliI0fiflO&1
mmMwWLliI0fiflO&1
mmMwWLliI0fiflO&1
mmMwWLliI0fiflO&1
mmMwWLliI0fiflO&1
mmMwWLliI0fiflO&1