質問: linuxで、イメージファイル(pngなど)を開かずに、パラメータで指定した文字列を見つけて、パラメータで指定した色でマーキングして出力するようなことはできるでしょうか? 例えば: $ convert image.png 文字列 色 marked.png
回答: Tesseract OCRコマンドを利用し、出力形式を`tsv`や`hocr`に指定することでテキストの領域を取得できます。 これとimagemagickのconvertを組み合わせることで任意のテキスト領域に枠線を描画可能です。 **コマンド例** 下記の例はtesseractの英語OCRで"character"という文字列を抽出し、青枠で囲います。 ``` tesseract ocr.png ocr -l eng hocr region=`awk 'match($0, /]*>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 ``` * 1行目: tesseractでpngを読み込み、htmlで結果を抽出する(`hocr`ではなく`tsv`の方が再利用しやすい気がしますが、気づいたのはコマンドを組んだ後でした) * 2行目: 上記のhtmlから正規表現で本文が"character"となっているspanタグ(下記サンプル)の領域を取得、整形する + `character` * 3行目: convertで`-stroke blue -strokewidth 3`の枠線を描画する **事前準備** ``` sudo apt install tesseract-ocr libtesseract-dev tesseract-ocr-eng sudo apt install graphicsmagick-imagemagick-compat ``` **成果物** !成果物 **参考資料** tesseractコマンドの使い方(Tesseract OCR 4.x) OCRを使用してLinuxコマンドラインで画像をテキストに変換する