こんにちはデータアナリティクス部のフバチ(Robert Hubacz)です。このブログは、日本語ユーザーにOpenRecallを提供することです。
※OpenRecallについては「NPU不要で「ReCall」機能をWindows・Mac・Linuxで再現するツール「OpenRecall」が登場」などをご覧ください。
はじめに
OpenRecallは、MicrosoftのWindows RecallやLimitlessのRewind.aiのような有料サービスの無料でプライバシー重視の代替品です。デジタル活動を見直すことで、記憶を助け、生産性を向上させながら、情報をプライベートに保ちます。
OpenRecallはコンピュータの活動のスクリーンショットを定期的にキャプチャします。これらのスクリーンショットを分析することで、テキストや画像を検索することができます。キーワードを入力するか、履歴を手動でスクロールすることで、必要なスクリーンショットを素早く見つけることができます。
OpenRecallは光学文字認識(OCR)ツールを使用してスクリーンショットからテキストを抽出します。抽出されたテキストは自然言語処理ツール(NLP)を使用して処理されます。この処理されたテキストは、ユーザーが入力したキーワードと比較するために保存されますが、そのキーワードも同じNLPツールで処理する必要があります。
現在の問題は、OpenRecallがOCRにDoctrライブラリを使用し、NLPに’all-MiniLM-L6-v2’モデルを使用していることです。これらは英語やラテン文字向けに設計されています。
OpenRecallを日本語に適応させるために、DoctrライブラリをEasyOCRライブラリに、’all-MiniLM-L6-v2’モデルを’colorfulscoop/sbert-base-ja’モデルに置き換えることを提案します。EasyOCRは、日本語を含む80以上の言語をサポートするオープンソースのOCRライブラリです。’colorfulscoop/sbert-base-ja’モデルは、日本語の自然言語推論データを含むJapanese SNLI(JSNLI)データセットを使用してファインチューニングされた日本語BERTベースモデルです。
Ryeを使用したインストール (Windows)
インストールの順序は重要です。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 |
# ステップ1 rye init openrecall_easyocr # ステップ2 cd openrecall_easyocr # ステップ3 rye sync # ステップ4 rye add easyocr # ステップ5 rye add sentencepiece # ステップ6 rye add protobuf # ステップ7 python -m ensurepip –upgrade # ステップ8 rye run python -m pip install –upgrade –no-cache-dir git+https://github.com/openrecall/openrecall.git # ステップ9 rye run python -m pip install torch torchvision torchaudio –index-url https://download.pytorch.org/whl/cu118 # ステップ10 #カタログ: `C:\Users\{ユーザ名}\openrecall_easyocr.venv\Lib\site-packages\openrecall` #`ocr.py`を削除して、`orc_easyocr.py`を`ocr.py`として保存してください。 # ステップ11 #カタログ: `C:\Users\{ユーザ名}\openrecall_easyocr.venv\Lib\site-packages\openrecall` #ファイル `npl.py`, 6行目の `("all-MiniLM-L6-v2")` を `("colorfulscoop/sbert-base-ja")` に置き換えてください。 # ステップ12 (起動するためのコマンド) rye run python -m openrecall.app –primary-monitor-only |
Pytorchはすでにeasyocrと一緒にインストールされているため、OpenRecallが正常に動作するにはステップ9は必要ありません。しかし、Cudaを使用するには必要です。
orc_easyocr.py
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 |
import easyocr # 日本語用のEasyOCRリーダーを初期化 reader = easyocr.Reader(['ja']) # 画像に対してOCRを実行し、テキストを抽出する関数 def extract_text_from_image(image): # 画像に対してOCRを実行 result = reader.readtext(image) # フォーマットされたテキストを保存するための空の文字列を初期化 text = "" # 認識されたテキストを抽出し、フォーマットする for detection in result: text += detection[1] + " " # 行としてフォーマットするために、スペースに続くスペースを改行に置き換える text = text.replace(" ", "\n") return text |
使用上の注意ポイント
OCRまたはNPLに関連するコードの変更は、基本的に蓄積されたスクリーンショットを削除する必要があります。つまり、screenshotsディレクトリとrecall.dbファイルを削除することを意味します。私の場合、これらはC:\Users\ {ユーザ名} \AppData\Roaming\openrecallディレクトリにあります。これは、単語の検出と埋め込みの違いによるものです。
テスト
キーワードを使用したスクリーンショットの検索結果。検索されたスクリーンショットは赤い枠で囲まれています。キーワード「統計」の場合、目的のスクリーンショットが最初に選択されなかったことが分かります。しかし、他のケースではプログラムは間違いを犯しませんでした。ただし、保存されたスクリーンショットの数が増えると、キーワードの作成がより難しくなる可能性があります。これは、類似した言葉が異なるスクリーンショットに表示される可能性があるためです。
https://github.com/openrecall/openrecall
https://github.com/JaidedAI/EasyOCR
https://huggingface.co/colorfulscoop/sbert-base-ja