3 ポイント 投稿者 GN⁺ 2024-03-17 | 1件のコメント | WhatsAppで共有
  • TextSnatcherは、Linuxで画像内のテキストをすばやくコピーするためのOCRアプリで、画像をドラッグして文字認識を行い、結果を貼り付けられる
  • 主な機能は、多言語対応、画像からのテキストコピー、任意の画像上でドラッグしてから貼り付け、すばやく簡単に使える操作性
  • 文字認識には Tesseract OCR 4.x を使用し、TesseractドキュメントとTesseractプロジェクトへのリンクも提供
  • 配布は Flathub と elementary OS AppCenter を通じて提供され、直接ビルドする場合はMesonとNinjaベースのインストール手順を使う
  • 実行にはscrot、tesseract-ocr、Tesseract言語データが必要で、現在プロジェクトは来月、アップデートと修正を伴って戻ってくる予定だと案内している

TextSnatcherができること

  • TextSnatcherは、画像からテキストをコピーし、数秒以内にOCR処理を行うLinux向けアプリ
  • ユーザーは画像上をドラッグしてテキストをコピーし、貼り付けられる
  • 提供機能:
    • 多言語対応

      • ドラッグで画像からテキストをコピー
      • 任意の画像上でドラッグした後に貼り付け
      • すばやく簡単に使える操作性

OCRエンジンと関連プロジェクト

インストールと配布経路

  • アプリは Flathub から入手できる
  • elementary OSユーザーは AppCenter 経由で入手できる

依存関係とビルド

  • 実行時に必要なランタイム依存関係:
    • scrot
    • tesseract-ocr
    • Tesseract言語データ
      • ArchリポジトリとDebianリポジトリへのリンクを提供
  • ビルド時に必要なビルドタイム依存関係:
    • granite
    • gtk+-3.0
    • gobject-2.0
    • gdk-pixbuf-2.0
    • libhandy-1
    • libportal-0.5
  • 直接ビルドして実行する場合は、リポジトリをクローンした後、Mesonのビルドディレクトリを作成し、Ninjaでインストールしてから com.github.rajsolai.textsnatcher を実行する流れ

開発状況と出典

  • プロジェクトにはValaで作られたことを示すバッジが含まれている
  • READMEには、現在Linux PC購入資金を集めている最中で、まもなく来月、アップデートと修正を伴ってプロジェクトが戻ってくる予定だと書かれている
  • インスピレーションとして挙げられているのは、PlannerのREADME、Developのアプリケーション構造、macOSアプリTextSniper

1件のコメント

 
GN⁺ 2024-03-17
Hacker News の意見
  • Dibby053 と同じようなスクリプトを使っていて、Stack Overflow から持ってきたあと、KDE/GNOMEWayland/X11 で動くように少し直し、現在の状態を通知で表示するようにした
    X11/Wayland の判別はまだ自分ではテストしていないが、試して結果を教えてくれてもよい

    • スクリプトを少し変えてクリーンアップ処理が正しく動くようにし、スクリーンショット後にウィンドウが飛び出してこないよう spectacleバックグラウンドモードで実行するようにした
    • エラー処理は良いが、一時ファイルは省略してパイプで渡せばよい
      grimslurpmogrifytesseractwl-copy をつなげ、fuzzel で OCR 言語を選ぶ方式
    • 自分も同じスクリプトを使っていたが、HN でこの方法を見つけた
      dmenu で言語を選び、maim -us | tesseract --dpi 145 -l eng+${lang} - - | xsel -bi のように処理する
      https://news.ycombinator.com/item?id=33704483#33705272
    • trap "cleanup '$SCR_IMG'" EXIT で ShellCheck が誤検知を出すこともあるが、この場合は完全に的外れというわけではない
      trap に渡したコマンドは通常評価されるため変数展開が起き、trap 'cleanup "$SCR_IMG"' EXIT のほうがより安全に動作する
      新しい Bash なら trap "cleanup ${SCR_IMG@Q}" EXIT も選択肢
    • ショートカットキーに bash -c 'flameshot gui -s -r | tesseract - - | gxmessage -title "Decoded Data" -fn "Consolas 12" -wrap -geometry 640x480 -file -' をバインドして使っている
      Super+O を押して OCR したい領域をドラッグすると、キャプチャされたテキストがすぐポップアップダイアログに表示される
  • 以前どこかからコピーしたスクリプトが、この作業をかなりうまくやってくれる
    scrot で領域をキャプチャし、mogrify で白黒化・拡大の前処理をしたあと、tesseract でテキストを抽出して xsel でクリップボードに入れ、通知まで出す方式

    • 共有として付け加えると、scrot より maim のほうが好み
      --nodrag オプションのおかげで、トラックパッドで領域選択するときに一度クリックしてカーソルを移動し、もう一度クリックすればよいので便利
      maim -s --nodrag --quality=10 $IMG.png10scrot100 に相当する
    • こういう形でしばらく使っていたが、Tesseract はかなり頻繁に期待外れだった
      拡大前処理でも大きな違いは感じられず、どんな前処理なら良くなるのかもよく分からない
      TextSnatcher がこれより改善している点があるのか気になるが、GitHub ページは不透明
    • PowerShell でも似たようなスクリプトを持っていたが、前の職場の細々したスクリプトと一緒に時間の彼方へ消えてしまった
      Unix と Windows の間で暮らす同僚たちには申し訳ない
    • trap "rm $IMG*" EXIT については https://www.shellcheck.net/wiki/SC2064 を参照するとよい
      mktemp -d を使い、ディレクトリを再帰削除するほうがよい
    • 自分にはこの方式がぴったり
      ボタン付きのウィンドウを押さなければならないより、スクリプトをショートカットキーにバインドするほうがずっと良い
  • Windows を使う同僚の一般庶民向けに言うと、公式の Microsoft PowerToys アドオンにもこの機能がある
    標準のスクリーンショットツールにも入ったが、個人的には PowerToys の単一キーボードショートカットのほうが使いやすい
    https://github.com/microsoft/PowerToys

    • 組み込みのキャプチャツール OCR は、別途言語 OCR パックをインストールしなくても、英語、ロシア語、中国語、日本語など複数の言語で動作する
    • 標準のキャプチャツールもこの機能を提供している
      WIN+SHIFT+S を押せばよく、“Text actions” アイコンがなければ Windows Store で最新版に更新すればよい
  • ずっと前から気になっていたが、Tesseract が本当にこの分野の最新・最高水準の解なのか分からない
    体感ではかなり物足りなく、2019年ごろには、コンピュータビジョンの進歩を考えればテキスト認識は事実上解決済みの問題であるべきだと感じていた
    人間よりうまくできるはずに思えるが、低解像度のレシートスキャンですら、特に英語でない場合は正確に変換できなかった
    自分の使い方が悪いだけかもしれない

    • Tesseract を半定期的に使っているが、レシートのスキャンや写真でも認識問題はめったになかった
      具体的にどのような使い方をしているのか気になる
  • Tesseract がますます頻繁に言及されるようになっているのが見える
    10〜15年前にスキャンした科学論文で使ってみたときは結果が残念で、手作業の後処理は自分でタイプするより大幅に少ないわけではなかった
    そのため自分にとって Tesseract は「試す価値なし」の同義語になったが、時間がたって良くなっている可能性もあるので、また試してみる価値はありそう

    • 今では、スキャン文書だけを OCR する場合や、画像の準備過程をかなり制御できる場合なら問題ない
      変なフォントや悪い画質まで含む汎用認識では、EasyOCR のほうがはるかに良い結果を出した
    • このプロジェクトには、少なくとも数年前の Tesseract 4.1.1 が含まれている
    • https://github.com/ocrmypdf/OCRmyPDF を試すとよい
      内部的には Tesseract を使っているが、本当に優秀
    • 今はずっと良くなっている
      15年前は、まだましな結果を得るにはかなり前処理が必要だったが、今は前処理なしでも良い結果が得られている
    • 3〜4年前に初めて使ってみたときは悪くなかった
  • 実際に使ってみたが、かなりうまく動作する
    Flatpakアプリなので完全に動作するにはデスクトップポータルが必要だが、既存のxdg-desktop-portal-wlr構成では追加設定なしでうまく動いた
    Screenshot APIをサポートするxdg-desktop-portal設定があるX11またはWayland環境なら、問題なく動作しそう
    結果にはばらつきがあるが悪くはなく、きれいに読めるテキストなら空白の問題やたまの誤認識程度なので、エラーダイアログのような場所からテキストをコピーするときに役立つかもしれない
    ただしLinuxではそもそもエラーダイアログのテキストを選択できる場合のほうが多く、Windowsの標準MessageBoxはCtrl+Cに反応する

  • 似たアプリとしてFrogを使っているが、とても順調に使えている
    https://getfrog.app

    • AppImageもなく、.debもなく、brewもない
  • macOSには、Previewで文書を開いてテキスト選択を試す以上のことをしてくれるユーティリティがある
    https://github.com/schappim/macOCR
    作者が好きだ

    • 参考までに、Previewを経由せずにCmd-Shift-3でスクリーンショットを撮ってからサムネイルをクリックすれば、Quick Lookでテキストを操作できる
      その後、右上のゴミ箱で画像を削除すればよく、Cmd-Aも動作する
      このコメントで試した例はここにある: https://imgur.com/a/q0NvcS6
  • iOSでは、アクションボタンに紐づけたショートカットで似た解決策を作って使っている
    一部のアプリではテキストのコピーが簡単でなかったり外国語だったりすることがあるので、スクリーンショットを撮ってテキストを抽出し、原文の言語を自動検出して英語に翻訳し、原文と翻訳文をQuick Viewに表示して選択・コピーできるようにしている
    実装例はここで試せる: https://www.icloud.com/shortcuts/f420d24e4960415da1a43f230abfce39
    ちなみに最新のiOSでは、写真アプリで写真を開き、写真内のテキストを指で選択してコピーすることもできる

    • すばらしいショートカットだ
      画像から共有ボタンを押して共有シートで使ってみたところ動作したが、すでに画像を渡している状況ならスクリーンショットの手順は重複している
  • 「Linux Desktop向け」とは言うが、これはFlatpakであり、すべてのLinuxディストリビューションがFlatpakを標準提供しているわけではない
    Fedoraの仮想マシンで一度動かしてみる予定で、こういうツールはよく見てきたが、大半はTesseractを活用している
    粗かったりノイズの多い画像、文字が湾曲していたり傾いていたりする場合には大きく失敗し、CAPTCHAを解いてはくれない
    https://tesseract-ocr.github.io/tessdoc/Home.html

    • Flatpakが動かないディストリビューションってどこ?
    • これは単なるValaコードの塊だ
      正確には、作者があなたのディストリビューション向けパッケージを作っておらず、ほかの誰も時間と意欲を出してパッケージングしていない、という意味に近い
      探しているメンテナーは、まさにあなたかもしれない
    • それは特に欠点ではない
      もし.debしかなかったなら、Ubuntu/Debian以外では使えないと言えるし、そのほうがはるかに大きな欠点だ