82279


linuxで、イメージファイル(pngなど)を開かずに、パラメータで指定した文字列を見つけて、パラメータで指定した色でマーキングして出力するようなことはできるでしょうか？  
例えば：  
$ convert image.png 文字列 色 marked.png


CC BY-SA 4.0
2021-09-06T01:48:54.803
82271
2021-09-06T09:21:11.123
24431
question
linux 画像 png
CLIでイメージファイル(pngなど)中の文字列をマーキングしたい。


[Tesseract OCR](https://github.com/tesseract-
ocr/tesseract)コマンドを利用し、出力形式を`tsv`や`hocr`に指定することでテキストの領域を取得できます。  
これと[imagemagick](https://imagemagick.org/index.php)のconvertを組み合わせることで任意のテキスト領域に枠線を描画可能です。

**コマンド例**

下記の例はtesseractの英語OCRで"character"という文字列を抽出し、青枠で囲います。

[code]

    tesseract ocr.png ocr -l eng hocr
    region=`awk 'match($0, /<span .+ ?title='\''bbox ([0-9 ]+) ([0-9 ]+) ([0-9 ]+) ([0-9 ]+)[^>]*>character<\/span>/, a){print "rectangle "a[1]","a[2]" "a[3]","a[4]}' ocr.hocr`
    convert ocr.png -stroke blue -strokewidth 3 -fill none -draw "${region}" rect.png
    
[/code]

  * 1行目: tesseractでpngを読み込み、htmlで結果を抽出する(`hocr`ではなく`tsv`の方が再利用しやすい気がしますが、気づいたのはコマンドを組んだ後でした)
  * 2行目: 上記のhtmlから正規表現で本文が"character"となっているspanタグ(下記サンプル)の領域を取得、整形する 
    * ` <span class="ocrx_word" id="word_1_6" title="bbox 25 185 315 236; x_wconf 96">character</span>`
  * 3行目: convertで`-stroke blue -strokewidth 3`の枠線を描画する

**事前準備**

[code]

    sudo apt install tesseract-ocr libtesseract-dev tesseract-ocr-eng
    sudo apt install graphicsmagick-imagemagick-compat
    
[/code]

**成果物**

![成果物](https://i.stack.imgur.com/dxbl2.png)

**参考資料**

[tesseractコマンドの使い方（Tesseract OCR 4.x）](https://blog.machine-
powers.net/2018/08/02/learning-tesseract-command-
utility/#%E5%87%BA%E5%8A%9B%E5%BD%A2%E5%BC%8F)  
[OCRを使用してLinuxコマンドラインで画像をテキストに変換する](https://technoglitz.com/japan/ocr%E3%82%92%E4%BD%BF%E7%94%A8%E3%81%97%E3%81%A6linux%E3%82%B3%E3%83%9E%E3%83%B3%E3%83%89%E3%83%A9%E3%82%A4%E3%83%B3%E3%81%A7%E7%94%BB%E5%83%8F%E3%82%92%E3%83%86%E3%82%AD%E3%82%B9%E3%83%88%E3%81%AB/)


CC BY-SA 4.0
2021-09-06T05:29:39.550
82279
2021-09-06T09:21:11.123
2021-09-06T09:21:11.123
9820
9820
82271
answer