GCPのFunctionsで開発をする際に困ったOPENCVの使い方メモ
1.本記事について
本記事は著者がGCPでOPENCVを利用して画像処理をしようとしたときにもがいた先にたどり着いた解決方法を記したものです。
なお、社会人になりたてで、開発経験がまだ薄いので、間違ったりしてるところがあればご教授お願い致します。
2.本記事で使ったもの
- Functions
- GCPの中にあるツールの一つでサーバレス開発で使用する。
- storage
- GCPの中にあるツールの一つでデータの保管、トリガーとして利用したりできる。
- OPENCV
- よく使われる画像処理関係のオープンソース
- GoogleVisionAPI
- Googleの画像関係のAIツールが簡単に安く利用できるAPIツール
3.今回はGCP(Google Cloud Platform)の中にある画像データにVison AI と OPENCV を利用して処理を加えて。違う所に保存するプログラムを例に進める
1.画像をstorageからダウンロード
こちらのurlを開き少しスクロールするとバケットからオブジェクトをダウンロードするというのが書かれていて、そこに出てきたプログラミング言語の候補の中から自分の使っている言語を選択
そこに書かれているソースコードをコピーしfunctionsの中に関数として入れれば画像をstorageからローカル環境にダウンロードできる(今回はpythonを選択)
正直、クラウドの勉強を始めたのがついこの二三か月でFunctionsでダウンロードしたものがどこに入っているのか全く分からなかったです。
ログを見たところ
File "/workspace/main.py", line 162,
どうやらmain.pyはworkspaceというフォルダの中に格納されてるみたい。
つまりダウンロードした画像はmain.pyと同じフォルダに格納されていると考えてよさそう。
ログを出力させる際
まだGCPを使いこなせていないのですがログをCLIを使ってみる際に注意すべきことをここにメモ
1.ログを見る時
1.リージョンについて
デフォルトでfunctionをコマンド等から生成した時は自動でUSリージョンになってしまいます。もし近いリージョンを利用したい場合はリージョンの指定が必要です。
今いるリージョンのログを見たいときは
gcloud functions logs read --region=asia-northeast2
の様にリージョンを指定する必要があります。
もし指定しないと自動的にUSリージョンのログが表示されます。
2.デメリット
1.今直したfunctionの内容が反映されてないと勘違いする危険性
2.何度もfunctionをデプロイして無駄なタイムロス
ログは各リージョンごとに管理されているようです。
2.ログの見方
vs等とは違い、ログは上が最も新しく、下に行けば行くほど古いログになります。
一つの関数のみを実行している場合でしたら
gcloud functions logs read --limit 3
と制限をつければ間違えて何個も前のログを見なくても済みます。
2.画像OPENCV(cv2.imread)を使って読み込み(cv2.imwrite)を利用して同じフォルダに保存
1の説明にあるように1でダウンロードした画像はworkspaceというフォルダにダウンロードされています。
読み込み方法としては普段同じフォルダに画像を保存した時と同じように
img = cv2.imread(file_name) #filenameには画像のファイル名を文字列で入力
これ以降は普段の様にOPENCVで処理すればいい
cv2.imwrite(file_name, image_data) #image_dataには最終的な処理したデータを代入
3.画像をstorageへアップロード
手順はダウンロード時とほぼ同じ
4.最後に
クラウドでプログラムを構築してデプロイするのにまだまだ不慣れですがこれからより知識と技術を蓄えその都度記事ももっといい書き方があれば更新します。