GoogleのGeminiは無料で使える生成AIです。
Geminiのマイク入力と音声読み上げボタンを利用すれば英会話チャットに使えます。
しかしマイクとスピーカーのボタンを都度、押さなければなりません。
そこで少しでも手間を減らせるようにPythonを使って
キーボード操作で各ボタンを押せるようにします。
目標はEnterキー操作だけにすることです。
パソコン限定の内容になります。スマフォは対応してません。
私のパソコンがWindowsなので、それしか確認していません。
Pythonのコードの詳細を書いていますので英語の勉強とPythonの勉強もできます。
実行環境はpythonが実行できればOKですが
GoogleColaboratoryでは実行できません。
PyAutoguiはキー操作を自動化できますが、
よく動きを把握していないと想定外の動きになるので
自己責任で実施してください。
プログラミングに興味がない方は、こちら↓↓がおすすめ!
Python実行環境
Pythonの標準ライブラリに1つだけ追加すれば動作します。
pip install pyautogui
私はAnacondaのbaseの仮想環境にpyautoguiをpip(インストール)してますが
Anacondaを使っている場合、condaとpipの問題があるので、以下も参考にしてください。
Geminiの英語サイトを使う
Geminiで検索すると日本語サイトに行きますが、
ここだと英語でマイクに話しても、日本語として扱われるためうまく英語になりません。
そこでGeminiの英語版サイトを使用します。
URLパラメータで切り替わっているようです。
英語:https://gemini.google.com/app?hl=en
日本語:https://gemini.google.com/app?hl=jp
ここはWindowsの音声入力とは違いWindowsの表示言語を英語にする必要がありません。
初期設定
何も指示しないで会話を始めると返答が長いです。
1番最初に以下を貼り付けてEnterしてからはじめると回答が短く答えてくれます。
これは下の件の調査でGeminiに質問ようとして貼り付けた段階で誤ってEnter押したら
「わかりました」とGeminiから回答があったので使っています。
多分、このようなフォーマットは決まっていないと思うので参考程度にとらえてください。
初期設定で最初に質問する文
{‘role’: ‘system’, ‘content’: “You are a friendly and patient English teacher for beginners. Please keep your responses within 100 characters. you don’t need to show me how many charactors.Please evaluate and correct my questions each time.”}
途中で効力がなくなったり()内に何文字で回答したというのを出してくる場合があります。
答えが長くなったら
I want you to answer shortlyやPlease answer short sentenceと言うと短く答えてくれます。
添削してほしかったら
I want everything I asked you. I want you to correct my sentence
もっといい言い方があるかもしれません。
目次へ
動作解説
使い方
Gemini英語:https://gemini.google.com/app?hl=enにアクセス。
最大表示(全画面表示ではない)にして
必ず「Enter a prompt here」と書いてある入力欄をクリックしてからプログラムを実行する。
プログラムを実行すると「ALT+TAB」の自動でキー操作がされる。
これは直前のアプリケーション(Window)に切り替えるキー操作です。
まず「Enter a prompt here」の座標を記録するダイアログが出る。OKはクリックしないでください。
「Enter a prompt here」の欄の左端にマウスを移動し、クリックはせずキーボードでEnter。
座標がダイアログ表示されるのでOK。
次に「マイクをクリックします」のダイアログが出るので「OK」が選択されている状態でEnter。
先ほど登録した座標を自動的にクリックし
自動的にキー操作「TAB」×2回を行い。その後、自動的に「Enter」します。
これによりマイク入力になります。
入力欄の表示が「Listening」になったら、英語で質問でいてください。
やり直したい場合は→キーで「やり直し」を選択しEnterすると「マイクをクリックします」に戻るので同じようにやってください。
手動入力したい場合は、キーボードで質問を入力します。入力後Enterキーや▶️は押さないでください。
必ず「私の質問が完了しましたか」でOK(選択されていると破線で囲まれている)をEnterして先に進んでください。
Geminiの回答が完全に終了したら(回っている星みたいのが停止したら)
「Geminiの答えの表示が終わりましたか?~」のOKをEnterしてください。
自動的にキー操作「TAB」×7回を行い。その後、自動的に「Enter」します。
うまくいくときは、その位置にスピーカーがあります。
しかし下のように「Shift+TAB」×7回の位置に下のようにリンク(下の場合Update location)があると、
それをクリック(Enter)してしまいます。
画像が表示されている場合も「Shift+TAB」×7回の位置が画像のリンク先にあたるので、リンク先が開いてしまいます。
このようにスピーカが「Shift+TAB」×7回の位置にない場合は「キャンセル」をEnterしてください。
ダイアログに「終了」があれば選択してEnterすればプログラムを終了します。
目次へ
コード
イチゲをOFUSEで応援する(御質問でもOKです)Vプリカでのお支払いがおすすめです。
import pyautogui
import time
def get_click_position():
pyautogui.alert("「Enter a prompt here」と書いてある入力欄にマウスをおいて。\nEnterしてください。")
return pyautogui.position()
def activate_browser_window():
pyautogui.hotkey('alt', 'tab')#直前のアプリケーション(Window)へ切り替える
time.sleep(1) # ウィンドウがアクティブになるのを待つ
# ユーザーがクリックするのを待つ
click_x, click_y = get_click_position()
# ユーザーに座標を表示
pyautogui.confirm(f"「Enter a prompt here」の位置は: ({click_x}, {click_y}) で記録しました")
return click_x, click_y
def perform_ok_actions(ptn):
if ptn == 0:
# 少し待つ
time.sleep(1)
# tabキーを2回押す
pyautogui.press('tab')
pyautogui.press('tab')
else:
# shift + tabを7回押す
for _ in range(7):
if ptn == 1:
pyautogui.hotkey('shift', 'tab')
elif ptn==2:
pyautogui.hotkey('tab')
# enterキーを押す
pyautogui.press('enter')
def show_dialog():
x,y=activate_browser_window()
# ターミナルに座標表示
print(x,y)
gemini_fin=0
while True:
if gemini_fin == 1:
gemini_fin=0
perform_ok_actions(2)
# ダイアログを表示
choice = pyautogui.confirm(text='マイクをクリックします', title='マイクをクリック', buttons=['OK', '終了'])
pyautogui.click(x, y) # 入力欄をクリック。この位置は環境によって異なるので調整が必要です
if choice == 'OK':
perform_ok_actions(0)
elif choice == '終了':
break # ループを終了し、スクリプトを終了
# 初期のキー操作を実行
# ダイアログを表示
choice = pyautogui.confirm(text='私の質問が完了しましたか?', title='私の番、完了', buttons=['OK', 'やり直し','終了'])
if choice == 'OK':
pyautogui.click(x, y) # 入力欄をクリック。この位置は環境によって異なるので調整が必要です
pyautogui.press('enter')
# ダイアログを表示
choice = pyautogui.confirm(text='Geminiの答えの表示が終わりましたか?\n本文にリンクや画像が含まれている場合、キャンセルしてください', title='Geminiの返答完了?', buttons=['OK', 'キャンセル', '終了'])
if choice == 'OK':
perform_ok_actions(1)
gemini_fin=1
elif choice == 'キャンセル':
pass # 何もせずダイアログを再表示
elif choice == '終了':
break # ループを終了し、スクリプトを終了
elif choice == 'やり直し':
pass # 何もせずダイアログを再表示
elif choice == '終了':
break # ループを終了し、スクリプトを終了
# ダイアログを表示
show_dialog()
役に立ちそうな質問
Geminiに聞いた英会話に役立ちそうな回答を貼っておきます。
Direct:
- “How can I say…?”
- “What’s the best way to say…?”
- “I’m not sure how to say this in English, can you help?”
Example: “How can I say ‘I like this song’ in English?”
More specific:
- “I want to ask if something is original, but I’m not sure the right word. How can I say that?”
- “I’m trying to describe the feeling of a powerful song. Is there a good word for that?”
Example: “I want to ask if ‘Domination’ by BAND-MAID is an original song, but I’m not sure the right word for ‘original’ in this context.”
Using an example:
- “I want to say something like this, but I’m not sure if it’s grammatically correct: ‘This song is booming.'”
Remember:
- Feel free to use simpler words or shorter sentences if that’s easier.
- Don’t worry about making mistakes – that’s how we learn!
- I’m here to help you improve your English communication skills.
So, what would you like to say in English today?
まとめ
本当は音声入出力を目指して始めたのですが、このような形になりました。
別にPythonを使わずマイクやスピーカーをクリックすれば済む話です。
でも個人的には慣れると、この方法のほうが使いやすいです。
イチゲをOFUSEで応援する(御質問でもOKです)Vプリカでのお支払いがおすすめです。
MENTAやってます(ichige)
目次へ