本ソフトウェアは画面上の文字を読み取り字幕表示するソフトウェアです。
ランタイム
配布サイトにアクセスし、インストーラもしくはwingetを使用して.Netデスクトップランタイムをインストールしてください。
OCRエンジン
本ソフトウェアでは言語とともにインストールされるOCRエンジンを使用します。
表示言語の設定を管理するにしたがって、テキストの読み取りを行う言語を追加してください。また、インストールする際に表示される言語機能に光学式文字認識が含まれていることを確認してください。
トランスレータ
HTTP POSTに対応したクラウドのトランスレータをご用意ください。
初期値の設定(Default)では翻訳は行いません。テキスト読み出しや表示確認にお使いください。
Google Apps Scriptを用いたトランスレータはGoogleアカウントがあれば用意できるため[1] [2]、比較的導入が容易なものとして挙げられます。設定方法については後述のサンプルを参照ください。
ダウンロードしたファイルを削除してください。
ファイルを実行するとタスクバーの通知領域にアイコンが表示されます。
アイコンを右クリックするとコンテキストメニューが表示されます。
左クリックすると画面が少し暗くなり、読み取り領域を設定する状態になります。左クリックでドラッグ&ドロップすることで領域を設定できます。また、右クリックで設定をキャンセルできます。
字幕は左ドラッグ&ドロップで移動できます。
自動的に表示を更新することができます(Repeatモード)。
以下のジェスチャーに対応しています。
ジェスチャー | 説明 |
---|---|
![]() 左ダブルクリック |
キャプチャ領域を再度読み出し字幕を更新します。 |
![]() ホイール |
バックログを前進・後退します。 |
![]() 中クリック |
表示テキストを切り替えます(原文 ⇔ 訳文)。 |
![]() ![]() |
表示中のテキストをコピーします。 |
![]() ![]() ![]() |
表示中のテキストと対になるテキスト(原文 ⇔ 訳文)をコピーします。 |
右クリックでコンテキストメニューが表示されます。
項目 | 説明 |
---|---|
字幕を更新 | キャプチャ領域を再度読み出し字幕を更新します。 |
字幕をクリア | 字幕の表示をクリアします。 |
設定 | 設定画面を開きます。通知領域のSettingsとの違いは最後に表示していたPresetの扱いが異なります。通知領域のSettingsでは最後に選択していたPresetが標準のPresetになります。一方でこちらのSettingsでは標準のPresetは変更されません。代わりに字幕の設定が最後に選択していたPresetの内容に変更されます。 |
原文をコピー | 読み出したテキストをクリップボードにコピーします。 |
訳文をコピー | 翻訳したテキストをクリップボードにコピーします。 |
キャプチャ画像をコピー | キャプチャしたイメージをクリップボードにコピーします。 |
OneShot | キャプチャモードをOneShotモードに切り替えます。 |
Repeat | キャプチャモードをRepeatモードに切り替えます。 |
Overlap | キャプチャモードをOverlapモードに切り替えます。 |
字幕を閉じる | 字幕を閉じます。 |
トランスレータ設定 | 説明 |
---|---|
モード | 使用するトランスレータを設定します。Default, HttpPost, Clipboard |
翻訳元言語 | テキストの言語および翻訳元の言語を選択します。OCRエンジンが使用可能な言語のみ選択可能です。 |
翻訳先言語 | 翻訳先の言語を選択します。一覧には多くの候補が表示されます。実際にAPIが対応している言語を選択してください。 |
Clipboardモードについて
ClipboardモードではTexTra Clipboardのアプリ間連携機能を使用します。
TexTra Clipboardについて
TexTra Clipboardは"様々なアプリ上のテキストを翻訳するアプリケーション"です。みんなの自動翻訳@TexTra[3]の便利アプリとして公開されています。導入・設定および詳細については当該サイトにてご確認ください。
本ソフトウェアとの連携において必要な設定は以下の通りです。
設定 > 外部アプリ呼び出し > 他のアプリからの翻訳リクエストを受け付ける
キャプチャ設定 | 説明 |
---|---|
モード | キャプチャの動作モードを選択します。 OneShot: 一度だけキャプチャします。 Repeat: 周期的にキャプチャします。 Overlap: キャプチャ範囲と字幕を重ねた状態での表示を可能にします。 |
フィルタ | 画像処理フィルタを選択します。 None: フィルタを使用しません。 Basic: 基本的なフィルタを使用します。 |
Overlapモードについて
Overlapモードは以下のように字幕とキャプチャ範囲を重ねての表示が可能です。
一方で、その他のモードでは字幕はキャプチャ範囲と重ならないように配置されます。
字幕設定 | 説明 |
---|---|
モード | 字幕の表示モードを選択します。 Text: 一連のテキストを対象として表示します。 Item: 項目など一行ごとに意味があるものを対象として表示します。 |
フォント | 字幕で表示されるフォントファミリーを選択します。 |
フォントサイズ | フォントサイズを入力します。 |
文字の色 | 表示する文字の色を選択します。 |
文字のフチ色 | 表示する文字の縁の色を選択します。 |
背景色 | 字幕の背景色を選択します。 |
Textモードについて
Textモードを選択した場合、文章内の段落分けについて選択することができます。
モードをDefault以外に選択すると追加の設定を行うためのリンクが表示されます。具体的な設定例については後述のサンプルを参照ください。
URL
アクセスするサービスのURLを入力してください。
Header
サービスへのリクエストヘッダを設定します。右下のボタンでヘッダフィールドの追加・削除を行います。また、リクエストデータのContent-Typeとしてapplication/json, application/x-www-form-urlencodedのいずれかを選択します。
Request
サービスへのリクエストデータを設定します。右下のボタンでリクエストデータの追加・削除を行います。
Request | Description |
---|---|
Type | Valueの種類を選択します。 string: 文字列, number: 数値, boolean: 真偽値, source: 翻訳元言語, target: 翻訳先言語, text: 翻訳元テキスト, array: 配列, object: オブジェクト |
Key | JSONおよびリクエストクエリのキー(文字列)を設定します。 |
Value | リクエストのキーに対応する値を設定します。 |
source, target, textについて
source, targetはPresetの設定値、textは読み出したテキストがValueとして設定されます。
TranslatorのSource Language=英語、Target Langugae=日本語、OCRにより認識された文字列が"Sample"の場合、以下の値がValueとして設定されます。
source: "en", target: "ja", text: "Sample"
araryおよびobjectについて
Content-Typeがapplication/jsonの際にJSON ArrayおよびObjectとして扱われます。ValueにはArrayおよびObjectのサイズを設定します。
以下に設定例とその結果を示します。
{ "root": [ "direct_value", { "object_key": "object_value" }, { "1st_key": { "2nd_key": "2nd_value" } } ] }
Response
応答データにアクセスするためのKeyを設定します。右下のボタンでKeyの追加・削除を行います。
本ソフトウェアでは一つの応答データにのみアクセス可能です。複数のKeyを設定した場合、上から順にアクセス階層が深くなります。
応答データがObjectではなくArrayの場合はIndexに✔を入れ、Arrayのインデックスを入力してください。
FilterをNone以外に選択すると追加の設定を行うためのリンクが表示されます。
チェックボックスをクリックし有効・無効を切り替えます。
操作 | 説明 |
---|---|
グレースケール化 | 画像をグレースケール画像に変換します。必ず使用されます。 |
コントラスト強調 | コントラストを強調します。 |
ガンマ補正 | ガンマ補正を行います。スライドが左に行くほど暗く、右に行くほど明るくなります。 |
二値化 (Otsu) | 画像を2値化します。 |
リサイズ ( × 2) | 画像を2倍のサイズに拡大します。対象となる文字が小さい場合に有効です。 |
CAPTURE | キャプチャ範囲を指定します。キャプチャおよび加工した画像が右側に表示されます。 |
元画像:木々の上に白文字のテキスト
CAPTUREで赤枠の範囲を設定します。画像の下にOCRで認識された文字列が表示されます。(背景の木々のせいでテキストがうまく認識されていないことがわかります。)
ガンマ補正を有効にし画像を暗め(1→0.4)に加工します。背景と文字列がうまく分離され正しく認識されるようになりました。
トグルスイッチをクリックし有効・無効を切り替えます。このとき無効になったコマンドおよびキー設定はグレーアウトされます。キー設定は入力ボックス上で任意のキーを入力して行います。
コマンド | 説明 |
---|---|
字幕を新規作成 | 字幕を新規に作成します。アイコンをクリックした場合と同じです。 |
字幕を更新 | 表示中のすべての字幕を更新します。 |
字幕を非表示 | 字幕を非表示にします。再度実行するかもしくは字幕を更新すると字幕が再表示されます。 |
Info
ホットキーは1つ以上の修飾キー(Control, Alt, Shift, Windows) + 1つのキー(修飾キー以外)の組み合わせが設定可能です。ただし、一部設定できない組み合わせ(Shift + アルファベット or 数字など)や例外的に1つで設定可能なキー(ファンクションキー or テンキーキー)が存在します。
Warning
ホットキーを有効化すると他のアプリケーションでは設定したキーの組み合わせが使用できなくなります。他のアプリケーションで使用したい場合は、キー設定を変更するかホットキーを無効化してください。
ここでは一例としてGoogle Apps Scriptを用いる例を紹介します。
Info
Google Apps ScriptはGoogle社の提供するプラットフォームサービスです。
Warning
サービスの利用については別途詳細をご確認の上ご利用ください。
サービスにアクセスしStart Scriptingをクリックし、サービスにログインします。
新しいプロジェクトをクリックするとエディタが立ち上がります。
エディタに以下の内容[4]を入力(コピー&ペースト)します。
function doPost(e) { var p = JSON.parse(e.postData.getDataAsString()); var translatedText = LanguageApp.translate(p.text, p.source, p.target); var output = ContentService.createTextOutput(); output.setMimeType(ContentService.MimeType.JSON); output.setContent(JSON.stringify({ result: translatedText })); return output; }
(オプション)上部のプロジェクト名をクリックし分かりやすい名称に変更します。
上部のデプロイをクリックし、新しいデプロイを選択します。
デプロイタイプの選択を求められるので、左上の歯車をクリックしウェブアプリを選択します。
以下のように項目を選択し、デプロイをクリックします。
デプロイが完了すると以下の表示が現れます。
URLはアクセス先として使用するためコピーしておくことを推奨します。
詳細設定は以下のようになります。
これまでの設定で"This is a sample."の文字列を読み出した場合、以下のように翻訳されたテキスト受け取ります。
ここではDeepL APIのFreeプランを用いる例を紹介します。
Info
DeepLはDeepL社の提供する翻訳サービスです。
Warning
サービスの利用については別途詳細をご確認の上ご利用ください。
DeepLのアカウント登録を行い、翻訳に必要となる認証キーを確認します。アカウントページで下図の黒塗り部分に認証キーが表示されます。
詳細設定は以下のようになります(DeepLのAPI参照)。
Requestについて
Requestの設定は図と同じ順で設定することを推奨します。順番によってはエラー応答が返ってきます。
ここではOpenAIのChatGPT API (gpt-3.5-turbo)を用いる例を紹介します。
Info
ChatGPTはOpenAIの提供する人工知能チャットボットです。
Warning
サービスの利用については別途詳細をご確認の上ご利用ください。
OpenAIのアカウント登録を行い、翻訳に必要となるAPIキーを取得します。
詳細設定は以下のようになります(OpenAIのAPI参照)。
https://秀丸マクロ.net/?page=nobu_tool_hm_google_app_script_lang_trans ↩︎
「みんなの自動翻訳」および「TexTra」は、国立研究開発法人情報通信研究機構の登録商標です。 ↩︎
https://秀丸マクロ.net/?page=nobu_tool_hm_google_app_script_lang_trans ↩︎