🌁

GoogleCloudStoregeの画像をimgcatで見る

に公開

WED株式会社でデータエンジニアをしているthimi0412です。
WEDが運営するレシート買取アプリONEではレシートをOCR→構造化→DBといったフローでデータを格納しています。

今回はimgcatを使用してGoogleCloudStorageにある画像を表示しようと思います。

レシート画像の確認

OCRのミス等で取得できていない値や間違って取得しているもの、どのような画像なのかをしばしば目視で確認をしています。

レシートにはreceipt_idが振られており、弊社のMetabase等でreceipt_idを使用してGoogleCloudStorege(以下GCSと略)にある画像のURLを検索して確認をしています。

ターミナルでも画像を確認したい

OCRサーバーの開発を行う際に、ローカル環境でサーバーを立ち上げてローカルの画像ファイルを使用してOCRの検証をすることが多く、レシート画像をGCSからダウンロードする場合があります。

GCSのコンソールからダウンロードをしてもいいのですが、ターミナルのコマンド操作で画像の確認とダウンロードができればと思っていました。

imgcatを使う

https://iterm2.com/documentation-images.html
(インストール等のやり方は省きます)

以下のようなコマンドを実行すると画像のURLからターミナル上に画像を表示してくれます。
もちろんローカルにある画像も見ることが出来ます。

imgcat -u https://assets.wow.one/onekun/onekun-standard.png

gcs_imgcat

レシート画像を保存しているGCSには閲覧制限をつけているので、imgcatでurlを指定しても見ることはできません。よって以下のようなshell function(gcs_imgcat)を作成しました。.zshrc等に貼り付けて使用しています。

コード
function gcs_imgcat () {
    if [ $# -ne 1 ] && [ $# -ne 2 ];then
        echo "Usage: gcs_imgcat gs://hogehuga.jpg";
        echo "Option -d --delete Delete file";
        return
    fi

    gcs_uri=$1
    # URLチェック
    pattern="^gs://.*\.jpg$"
    if [[ $gcs_uri =~ $pattern ]]; then
        echo "Match: $gcs_uri"
    else
        echo "No match: $gcs_uri"
        return  
    fi
    echo $gcs_uri

    delete_flag=0
    if [[ $2 = "-d" || $2 = "--delete" ]]; then
        delete_flag=1
    fi

    directory="$HOME/Downloads/receipts/"

    if [ ! -d "$directory" ]; then
        mkdir -p "$directory"       
        echo "Directory created: $directory"
    else
        echo "Directory already exists: $directory"
    fi

    gsutil cp $gcs_uri $directory
    file_name=$(basename $gcs_uri)
    $HOME/.iterm2/imgcat "${directory}${file_name}"

    if [ $delete_flag = 1 ]; then
        rm "${directory}${file_name}"
    fi
}

行っていることは

  1. gsutilコマンドを使用してレシート画像をダウンロード
  2. ダウンロードしたファイルを対象にimgcatコマンドを実行
  3. -dのフラグがついていたらその画像を削除

使い方としては以下のように使います。

gcs_imgcat gs://hogehuga/test/receipt00.jpg


出力にもあるように/Downloads/receiptsに表示したレシート画像をダウンロードしています。
/Downloadsreceiptsのディレクトリがなければ作成します。

Directory already exists: /Users/<user_name>/Downloads/receipts/

-dのフラグをつけるとダウンロードして表示したファイルは削除されます。

gcs_imgcat gs://hogehuga/test/receipt00.jpg -d

終わりに

わざわざGCSコンソールを開かずとも、ターミナル上でレシート画像を確認できることが出来ました。
shell functionを自作してみましたが、画像そのものが大きいとターミナルに表示される領域も大きくなってしまうので、改善の余地ありだと思っております。

WED Engineering Blog

Discussion