はじめに
この記事では、macOS環境で選択した範囲を文字起こしするシェルスクリプトの作り方を紹介します。
動機
AIに何かを聞く時、言葉を入れる。いろんなものをすぐ入れられるように、画面上の文字情報で範囲選択したところをOCR化するものがほしくなった。
実装
1. 必要なツールの準備
Homebrewのインストール
HomebrewはmacOS用のパッケージマネージャです。まだインストールしていない場合は、Homebrew公式サイトの手順に従ってインストールしてください。
Tesseractのインストール
OCRエンジンとしてTesseractを利用します。ターミナルを開いて以下のコマンドを実行します:
$ brew install tesseract
これでTesseractがインストールされます。
2. スクリプトの作成
ターミナルでテキストエディタ(nanoやVSCodeなど)を使い、以下の手順でスクリプトファイルを作成します。
ファイルの作成場所と名前
例として、/usr/local/bin/quick_ocr.sh
に作成します。管理者権限が必要なため、以下のコマンドを実行してください:
$ sudo nano /usr/local/bin/quick_ocr.sh
スクリプト内容
以下のコードをコピーして貼り付けます。出力先のファイルパスはうまく調整してください
#!/bin/bash
echo "連続OCRモードを開始しました。停止するには [CTRL+C] を押してください。"
# 出力先のファイルパス(必要に応じて変更)
OUTPUT_FILE="/Users/memo.txt"
while true; do
# 一時ファイルのパス設定(PNGとJPEG)
PNG_IMG="/private/tmp/screenshot.png"
JPG_IMG="/private/tmp/screenshot.jpg"
# 選択範囲のスクリーンショットを取得(PNG形式で取得)
screencapture -i -t png "$PNG_IMG"
# PNGが撮れているか確認
if [ ! -f "$PNG_IMG" ]; then
osascript -e 'display notification "スクリーンショットが取得できませんでした" with title "OCRエラー"'
# 取得できなかった場合は次のループへ(例:キャンセルした場合)
continue
fi
# PNGからJPEGに変換(sipsで)
sips -s format jpeg "$PNG_IMG" --out "$JPG_IMG"
# (オプション) 変換後のファイル情報をログ出力
echo "再エンコード後のファイル情報:"
file "$JPG_IMG"
# Tesseract のパス(環境に合わせて変更してください)
TESSERACT_PATH="/opt/homebrew/bin/tesseract"
# TesseractでOCRを実行し、結果を変数に格納
OCR_RESULT=$("$TESSERACT_PATH" "$JPG_IMG" stdout)
# OCR結果をテキストファイルに追記
echo "$OCR_RESULT" >> "$OUTPUT_FILE"
# 結果通知
osascript -e 'display notification "OCR結果がmemo.txtに追加されました" with title "OCR完了"'
# 一時ファイルを削除
rm "$PNG_IMG" "$JPG_IMG"
done
スクリプトのポイント
-
連続処理:
while true; do ... done
により、ユーザーが停止するまで連続してスクリーンショットとOCR処理を実行します。 -
スクリーンショット取得:
screencapture -i
で選択範囲を取得。ユーザーが選択をキャンセルした場合は次のループへ進みます。 -
画像変換: 取得したPNGファイルを
sips
コマンドでJPEGに変換。TesseractはJPEGの方が動作しやすい場合があるためです。 -
OCR実行: Tesseractを呼び出してOCRを実行し、得られたテキストを指定のファイル(ここではDesktop上の
memo.txt
)に追記します。 -
通知:
osascript
を使用して、macOSの通知センターに処理結果を表示します。
3. スクリプトに実行権限を付与
作成したスクリプトに実行権限を設定します。ターミナルで以下を実行してください:
$ sudo chmod +x /usr/local/bin/quick_ocr.sh
4. macOSのプライバシー設定
macOSでは、スクリーンショットの撮影やシステム操作には適切な権限が必要です。以下の手順で許可を与えてください。
- 「システム環境設定」→「プライバシーとセキュリティ」を開く。
- 「スクリーンレコーディング」または「画面収録」の項目で、使用するターミナル(Terminal.appやiTermなど)にチェックを入れる。
- 必要に応じて、他のセキュリティ関連の設定も確認してください。
スクリプトの実行
設定が完了したら、ターミナルで以下のコマンドを実行してスクリプトを開始します:
$ /usr/local/bin/quick_ocr.sh
スクリプトが起動すると、選択範囲のスクリーンショットを撮るためのカーソルが現れます。選択範囲を決めると、その画像に対してOCRが実行され、結果が指定したファイルに追記されます。停止する場合は、ターミナル上で [CTRL+C] を押してください。
まとめ
新しいMacBookに変えたとき、再現できるようにまとめました。