Colaboratory+GoogleドライブでVision APIの実験環境を作る
本記事では、VisionAPIの特性を知るためにColaboratoryとGoogleドライブを利用した実験環境を作って試してみます。
<<お知らせ(2020/10/05)>>
Vision API Pythonクライアントライブラリの新バージョン(v2.0.0)が2020年9月29日付でリリースされています。v2.0.0については、『Vision API Pythonクライアントライブラリ v2.0.0リリース(BREAKING CHANGES 有り)』を参照してください。
なお、現時点では、まだGoogleの公式ガイドにあるサンプルがv2.0.0向けに改定されていないため、記事内容はそのままとして、関係個所にv2.0.0に関する補足を追記しました。
[1]Vision APIの特性を知る必要性
本記事では、『「エージェント」と「環境」を意識して業務システムを少し賢くしたい』に書いたような、業務システムを少し賢くするという立場から、Vsion APIの利用を考えてみます。
具体的には、紙にかかれた情報を業務システムに手入力するのではなく、紙を画像化してVision APIによりテキスト情報を検出し、その情報を業務システムに登録するという基本的な機能を考えてみます。
このような機能を持つ業務システムを導入する動機づけとしては、現状より業務効率が良くなるのか?、また費用対効果は良いのか?などが重要視されると思いますので、そのような評価の参考になるような機能仕様や運用シナリオ、制限事項などを考える必要があります。
具体的には、以下のようなことを考えて、業務システムにおける機能仕様と運用シナリオを作成する必要があると思います。
- 機能的側面
- 画像から業務システムに自動的に取り込める項目と精度など(正答率より、利用者によるデータのチェックや修正にかかる手間の程度が重要視されるかもしれません)。
- 運用的側面
- 妥当なコストで、手間がかからない画像の取込み方法、推奨機器など。
ここで、以下のサイトを利用すると、(差しさわりの無い)試したい画像をドラッグ&ドロップするだけでVision APIの解析内容を大雑把に確認することができます。
そして、Vision APIを利用するための外部仕様(入力と出力のデータ形式)は厳密に定義されていますし、Googleからプログラミング言語ごとにクライアントライブラリも提供されています。
- Vision クライアント ライブラリ(https://cloud.google.com/vision/docs/libraries?hl=ja)
- Cloud Vision API(https://cloud.google.com/vision/docs/reference/rest)
しかしながら、Vision APIは、画像から文字などを検出するという機能目標と外部仕様は明確ですが、良い認識結果が得られる画像の条件や、認識対象範囲、誤認識の程度などは明確に示されていません。
例えば、Vision APIを試してみると、人間には明確に認識できる文字が、誤って認識されたり、見落とされたりする(認識されない)ことがあります。一方で、人間が迷うような文字を正しく認識することもあります。また、同じ紙を画像化する場合でも、カメラやスキャナなどの機器による違いや、画像の傾きや歪などの要因による認識結果の違いもあるようです。
つまり、人間が認識する文字とVision APIが認識する文字の違いや、高い精度が出る画像の条件について、Vision APIのドキュメントには示されていません。
さらに、『Google Vision APIの画像認識(特にOCR)を業務システムの立場から検討してみる(6)業務システム連携に必要な機能』に書いたような、Vision APIから得られた文字情報を業務システムの入力項目に対応させる意味付け処理も必要になります。この意味付け処理(Vision APIの解析結果を業務システムの入力項目に対応させる処理)が可能かどうかは、各種条件で実験を行って検討する必要があります。
このようなことから、機能面や運用面を考えた業務システムの仕様を作成するために、まず、Vision APIの認識に関する特性を知る必要があります。仕様として認識特性が明示されていない以上、実験や試行錯誤を繰り返して把握する必要があると思います。
(補足)
- 個人的にはVision APIは汎用OCRとしては認識精度が非常に良いと思います(ここでいう「精度」はざっくりした意味です)。ただし、汎用的な精度が高くても、適用する実務分野で期待される認識精度が出せないと採用できません。一方で、汎用的精度は低くても、業務利用では、一定の運用方法に絞って期待する認識精度が出せれば業務効率の向上につながるので、よい精度が出る条件を探れば十分使えることになります。
- Vision APIの認識特性が明示されていないのは、Vision APIの問題というよりも、機械学習を応用しないと実現できないような問題を扱うサービス全般に言えることですが、認識特性を仕様として示すことが大変難しい、ということだと思います。
[2]実験環境の要件
Vision APIの特性を知り、業務システムの機能や運用を考えるために、まずは手軽に事件環境を作って、以下のような実験や試行錯誤をしたいところです。
- 目的とする文書に対して、良い認識結果が出る画像とはどのようなものかを知りたい(画像の画質、解像度や傾き、文字サイズなどが解析にどのように影響するか、など)。
- OCRが検出できる文字コードの範囲(例えばJISの漢字水準)を知りたい。
- API呼び出しのパラメータを調整すると結果がどのように変化するか知りたい。
- 認識結果から自分に興味があるデータに絞って可視化して評価したい。
- 認識結果を業務アプリケーションの項目に対応させる処理のプロトタイプを作って試してみたい。
- 多くのサンプルを評価するため、テスト(呼び出しと結果の評価)を自動化して統計的に認識状況を把握したい。
- 実験や試行錯誤の結果を整理してレポートにまとめて管理したい。
このような実験環境の要件をざっくりまとめてみました。
- 低コストで手軽に実験環境が構築できること。
- 試行錯誤しやすい対話型のプログラム実行環境が望ましい。
- 結果の解析やプロトタイピングなどを行うため、ツール(ライブラリ)が豊富にあり、それを利用したり、自作したりして、複雑なプログラムも実行したい。
- 解析結果を可視化するなど、実験結果を把握しやすい機能がほしい。
- プログラム、実験結果、説明文などをまとめて管理したい。
このような要件にぴったりな環境があります!
それは、Jupyter Notebook(+プログラミング言語Python)です。
(あまりに結論誘導的な要件整理で失礼しました。。。)
[3]Jupyter Notebook(+プログラミング言語Python)
データサイエンスや機械学習の分野では、Jupyter NotebookとPython言語の組み合わせは、今や標準的というか、必須の環境と言ってよいのかもしれません。
私が初めてこの環境に触れたとき、正直、かなり衝撃を受けました。
- Project Jupyter(https://jupyter.org/)
それは、Jupyter NotebookがPythonのコードを気軽に実行でき、かつ、そのコードと実行結果、説明用の文章などを混在させたノートブックとして管理(保存、読込)できるだけでなく、Pythonには統計分析、機械学習、可視化のためのライブラリも豊富にあり、まさに「THE 実験環境」という印象を受けました。
そして、このような環境がオープンソースで提供され、無料で利用できることも、技術が加速度的に進化する1つの理由ではないかと思ったりしました。
ネットでJupyter Notebookと検索すると、初心者向けから上級者向けまで、本当に多くの情報が得られますので、ぜひ検索してみてください。また、本屋さんに行ってコンピュータ書籍のコーナーに行くと、「Python」、「データ分析」、「機械学習」、「ディープラーニング」のような言葉が入った書籍がズラリと並んでおり、特に最近の書籍はこの環境で説明しているものも多いため、学習素材には事欠きません。
ところで、Vision APIは事前トレーニング済みのモデルですので、機械学習を行う必要はありませんが、Vision APIの解析結果を分析したりプロトタイピングをするには、対話型のプログラム実行環境であり、データサイエンスや機械学習分野で用いられる質の高いライブラリが利用でき、さらにレポートのように実験結果をまとめられるのは大きなメリットです。
なお、手軽に手元のPCなどにJupyter Notebook環境を作る場合は、Anacondaを利用するのがお勧めです。
- Anaconda(https://www.anaconda.com/)
とはいいつつ、もっと手軽にJupyter Notebook環境を利用する方法がありますので、次に進みます。
[4]Colaboratory+Googleドライブ
Colaboratory(略称: Colab)は、Googleが無料で提供しているホスト型の Jupyter Notebook サービスです。
Colaboratoryは主に以下の特徴があります。
- 環境構築が不要で、ブラウザから簡単に利用できます。
- 実行には、Googleがクラウド上の仮想マシンを自動で割り当ててくれますので、ブラウザを利用すればPCだけでなくスマホからも利用できます。
- Colaboratoryは、制限事項はありつつも基本的には無料で利用できます。
- 但し、Vision APIの利用については、無料枠を超えると課金されます。
- ノートブックはGoogleドライブで管理(保存、読込、共有他)できます。
- GoogleドライブをColaboratoryの仮想マシンにマウントして、Googleドライブ内のデータへセキュアにアクセスできます。
これにより、クラウドで完結する実験環境を無料で手軽に作ることが出来ます。
とはいえ、制限事項もありますので、以下のFAQをご一読することをお勧めします。
- Colaboratory よくある質問(https://research.google.com/colaboratory/faq.html)
さて、Colaboratoryは以下のURLから利用することが出来ます。
- Colaboratory へようこそ(https://colab.research.google.com/notebooks/welcome.ipynb?hl=ja)
このページはノートブックで作られており、説明文書とプログラムコードが混在するイメージを確認することが出来ます。(「はじめに」の項に簡単な説明があります。)
Jupyter Notebookと同様に、Colaboratoryとネット検索すると、多くの情報が得られますので、ぜひ検索して参考にしてください。
[5]Colaboratoryを利用したVision API実験環境の概要
ColaboratoryとGoogleドライブを利用したVision APIの実験環境を概観します。
この構成は、Vision APIの認証情報、テスト用画像ファイルやノートブック(コードや実験結果他)などをGoogleドライブでセキュアに管理し、実験を行うユーザインターフェイスやプログラム処理はColaboratoryを利用します。
Googleドライブに保存したノートブックを開く度に異なる仮想マシンがColaboratoryに割り当てられますが、保存したノートブックの内容が再現されて、実験可能な状態になります。
(補足)ノートブックは、拡張子が.ipynbのファイルとして保存されます。
さて、Colaboratoryで実験する前準備として、①Google Cloud Platform(GCP)でVision APIの利用設定を行い、②Googleドライブへ実験に利用するデータなどをアップロードします。
①Vision API利用設定
Vision APIを利用できるように、Google Cloud Platform(GCP)のプロジェクトを設定する必要があります。これには以下の処理が必要です。
- 利用するプロジェクトの決定
- 課金を有効にする
- APIの有効化
- 認証の設定
これらについては、『Google Vision APIの画像認識(特にOCR)を業務システムの立場から検討してみる/Vision API利用環境の整備と検討事項』を参考にしてください。
また、具体的な操作手順は以下が参考になります。
- Vision API を設定する(https://cloud.google.com/vision/docs/setup)
今回の実験環境では、Vision APIのクライアントライブラリに与える認証情報として、サービスアカウントの秘密鍵ファイル(JSONファイル)を利用します。
このため、認証の設定においては、サービス アカウントを作成し、秘密鍵ファイル(JSONファイル)をダウンロードします。
②Googleドライブへ画像や設定等をアップロード
Vision APIの実験に必要なファイルをGoogle ドライブへアップロードします。整理しやすいように、Googleドライブに実験用のフォルダを作成して管理するのが便利です。
実験用のフォルダには主に以下のファイルをアップロードします。
- (先の手順で作成した)サービス アカウントの秘密鍵ファイル(JSONファイル)
- Vision APIの実験に利用する画像
- (必要なら)自作Pythonパッケージなど
- 『自作パッケージの利用』を参考にしてください。
[6]ノートブックを新規作成、開く、保存ほか
(1)新規作成
実験を始めるにはColaboratoryのノートブックが必要です。新規にノートブックを作成するには、Colaboratoryから作成する方法、Googleドライブから作成する方法があります。
(A)Colaboratoryからノートブックを新規作成する方法
- Colaboratory へようこそ(https://colab.research.google.com/notebooks/welcome.ipynb?hl=ja)を開きます。
- ログインしていない場合、画面右上の「ログイン」ボタンをクリックして、Googleアカウントでログインします。
- 画面左上の「ファイル」メニューから、「ノートブックを新規作成」を選択します。
上記手順で新しいタブに「Untitled0.ipynb」というノートブックが作成されます。画面左上にも「Untitled0.ipynb」とファイル名が表示されています。
また、同時にGoogleドライブに「Colab Notebooks」フォルダが作成され、その下に「Untitled0.ipynb」ファイルが作られています。
(B)Googleドライブからノートブックを新規作成する方法
- Googleドライブにログインして、新規にノートブックを作成したいフォルダへ移動します。
- 左上にある「+新規」ボタンをクリックし、メニューの「その他」にある「Google Colaboratory」を選択します。もし、「Google Colaboratory」がメニューに無い場合は、「+アプリを追加」を選択して、G Suite Marketplaceの画面でColaboratoryを追加します。
Googleドライブから作成する方法は、新規作成するフォルダを明示的に指定できるところがメリットかと思います。
(2)開く
Googleドライブに保存されているノートブック(.ipynb)ファイルを開くには、Colaboratoryから開く方法、Googleドライブから開く方法があります。
(A)Colaboratoryから既存のノートブックを開く方法
- Colaboratory へようこそ(https://colab.research.google.com/notebooks/welcome.ipynb?hl=ja)を開きます。
- ログインしていない場合、画面右上の「ログイン」ボタンをクリックして、Googleアカウントでログインします。
- 画面左上の「ファイル」メニューから、「ノートブックを開く」を選択します。ダイアログ画面で「Googleドライブ」タブをクリックし、開きたいノートブックを選択します。
(B)Googleドライブから既存のノートブックを開く方法
- Googleドライブにログインし、開きたいノートブックがあるフォルダへ移動して、ノートブックをクリックします。
- 「プレビューできません」という表示が出たら、画面上部に表示されている「Google Colaboratoryで開く」ボタンをクリックします。(または、下部に表示される「接続済みのアプリ」のGoogle Colaboratoryをクリックします。)
(3)保存
Colaboratoryのメニュー「ファイル/保存」を選択して明示的に保存することもできますが、コードを実行する等のアクションを実行した時にも自動的に保存されます(メニューバーに状態が表示されます)。これは、うっかり保存し忘れた、ということを防いでくれるので、ありがたいところです。
(4)その他
ノートブック(拡張子が.ipynbのファイル)は、Googleドライブの通常のファイル操作(名前の変更、コピー、移動、削除、共有など)を行うことができます。
このため、例えば、実験途中のファイルをバックアップとして残しておくためにコピーを作成して名前を変更しておく、とか、フォルダ構成を変更するためにファイルを移動する、ということも可能です。
[7]Googleドライブのマウント
ColaboratoryからGoogleドライブにアップロードしたファイルへアクセスできるように、Googleドライブをマウントする必要があります。
最も簡単な方法は、Colaboratoryの画面から行う方法です。
- 画面左端にあるファイルのアイコンをクリックします。
- 「ファイルのブラウジングを有効にするには、ランタイムに接続してください。」という表示が出る場合、しばらく待つとフォルダ内容が表示されます(自動的にランタイムが初期化されます)。
- ファイル画面が展開されると、3つあるアイコンのうち右端の「ドライブをマウント」をクリックします。
- 「このノートブックに Google ドライブのファイルへのアクセスを許可しますか?」の画面が表示されたら、「GOOGLE ドライブに接続」をクリックします。
この操作により、プログラムからは/content/drive/My Drive以下にGoogleドライブの内容が見えるようになります。
以下のコマンドを実行すると、Googleドライブの内容が見えると思います。(先頭の「!」はシェルのコマンドを意味します。この場合、lsコマンドを実行します。)
!ls '/content/drive/My Drive'
ところで、下記のコードを実行してマウントすることもできます。この方法はマウントする位置を指定することが可能です。
from google.colab import drive
drive.mount('/content/drive')
(補足)
上記の google.colabパッケージのソースコードは、GitHubで公開されています。
- Python libraries for Google Colaboratory(https://github.com/googlecolab/colabtools)
また、画面左側の「<>」アイコン(コードスニペットパネルを表示)をクリックすると、様々な用途に応じたコードを利用できます。
[8]セッションストレージへのアップロード、ダウンロード
Googleドライブをマウントすることで、Googleドライブにある画像などのデータを、仮想マシンのセッションストレージに統合して利用することができますが、同様に、PCにあるデータをセッションストレージにアップロードして利用したり、ダウンロードすることもできます。
なお、セッションストレージは、アップロードが完了したときに、「注: アップロードしたファイルはランタイムのリサイクル時に削除されます。」と表示される通り、永続的に利用できるものではありません。
よって、セッションストレージにアップロードするファイルは、一時的な作業用ファイルとしての用途になると思います。
また、セッションストレージにあるファイルを保存しておきたいときは、Googleドライブまたは、PCなどにダウンロードする必要があります。
①PCからのアップロード
PCからのアップロードは、Colaboratoryの画面から簡単に行うことが出来ます。
(なお、下記の手順は、一度に複数ファイルをアップロードすることはできますが、ディレクトリを指定してアップロードすることはできないようです。)
<ファイル選択ダイアログによる方法>
- 画面左端にあるファイルのアイコンをクリックします。
- ファイル画面が展開されると、3つあるアイコンのうち右端の「セッションストレージにアップロード」をクリックします。
- OSのファイルを開くダイアログボックスが表示されますので、アップロードしたいファイルを選択します。
<ドラッグ&ドロップによる方法>
- 画面左端にあるファイルのアイコンをクリックします。
- アップロードしたいファイルをファイルの一覧へドラッグし、コピーしたい位置でドロップします。
<プログラムによる方法>
同じことは、Pythonプログラムからもできます。(コードスニペットの「Open files from your local file system」を選択します。)
from google.colab import files
uploaded = files.upload()
for fn in uploaded.keys():
print('User uploaded file "{name}" with length {length} bytes'.format(
name=fn, length=len(uploaded[fn])))
②PCへのダウンロード
PCへのダウンロードも、Colaboratoryの画面から簡単に行うことが出来ます。
- 画面左端にあるファイルのアイコンをクリックします。
- ダウンロードしたいファイルを選択し、右クリック(または右端に表示されているボタンをクリック)して表示されるメニューからダウンロードを選択します。
同じことは、Pythonプログラムからもできます。
from google.colab import files
files.download([ダウンロードしたいファイル名])
[9]Vision APIクライアントライブラリの準備
①クライアントライブラリのインストール
下記のコマンドを実行してクライアントライブラリをインストールします。
なお「RESTART RUNTIME」ボタンが表示されたら、ボタンをクリックしてランタイムを再起動します。(再度実行すると、RESTAT RUNTIMEボタンは表示されなくなります。)
!pip install --upgrade google-cloud-vision
(補足:2020/10/15追記)
上記のインストールにより、google-cloud-visionのバージョン2.0.0がインストールされます。現時点(2020/10/15)では、Googleの公式ドキュメントのサンプルコードがバージョン2.0.0に対応していないものもあります。もしサンプルコードが実行エラーになる場合は、下記のコマンドで旧バージョン(1.0.0)をインストールして試してみてください。
!pip install google-cloud-vision==1.0.0
②環境変数 GOOGLE_APPLICATION_CREDENTIALS の設定
プロジェクトの正当な呼び出し元であることをVision APIに知らせるために、先にGoogleドライブにアップロードしているサービス アカウントの秘密鍵ファイル(JSONファイル)を利用します。
具体的には、JSONファイルのパスを、環境変数 GOOGLE_APPLICATION_CREDENTIALS に設定します。
例えば、JSONファイルが、GoogleドライブのColab Notebooksフォルダの下にxxx.jsonだとすると、以下のコードを実行します。
import os
os.environ["GOOGLE_APPLICATION_CREDENTIALS"] = '/content/drive/My Drive/Colab Notebooks/xxx.json'
以上で、クライアントライブラリを利用してVision APIを呼び出す準備が出来ました。
[10]Vision APIを呼び出して結果を確認する
実験環境のテストを兼ねて、Vision APIを呼び出してGoogleドライブにある画像ファイルから簡単なテキスト検出(OCR)を行ってみます。
(1)Googleドライブにある画像を解析する関数を定義する
まず、画像ファイルを与えると、Vision APIを呼び出して、結果の概要(検出した文字と座標)を表示するdetect_text関数を定義します。
以下のコードをセルに張り付けて実行します。
def detect_text(path):
"""Detects text in the file."""
from google.cloud import vision
import io
client = vision.ImageAnnotatorClient()
with io.open(path, 'rb') as image_file:
content = image_file.read()
image = vision.types.Image(content=content)
response = client.text_detection(image=image)
texts = response.text_annotations
print('Texts:')
for text in texts:
print('\n"{}"'.format(text.description))
vertices = (['({},{})'.format(vertex.x, vertex.y)
for vertex in text.bounding_poly.vertices])
print('bounds: {}'.format(','.join(vertices)))
if response.error.message:
raise Exception(
'{}\nFor more info on error messages, check: '
'https://cloud.google.com/apis/design/errors'.format(
response.error.message))
(補足1)
上記関数は、
- 画像内のテキストを検出する(https://cloud.google.com/vision/docs/ocr?hl=ja)
にある関数で、GitHubでも公開(https://github.com/GoogleCloudPlatform/python-docs-samples/blob/master/vision/cloud-client/detect/detect.py)されていましたが、現在(2020/10/05)は削除されて、v2.0.0に対応したコードに置き換えられているようです(https://github.com/googleapis/python-vision/blob/master/samples/snippets/detect/detect.py)。
(補足2)
クライアントライブラリv2.0.0がインストールされている場合、上記コードを実行すると以下のエラーが発生すると思います。
---> 10 image = vision.types.Image(content=content)
AttributeError: module 'google.cloud.vision' has no attribute 'types'
v1.0.0ではtypesが必要でしたが、v2.0.0では構成が変わってtypesが不要になりました。このため、この行をtypesをとって以下のように修正すると動作すると思います。
image = vision.Image(content=content)
(2)Googleドライブにある画像の解析を実行する
続いて、上記のdetect_text関数を使ってGoogleドライブの画像を解析してみます。
簡単なサンプルで恐縮ですが、『「エージェント」と「環境」を意識して業務システムを少し賢くしたい』で使った以下の画像からテキストを検出してみます。
この画像をダウンロードして、GoogleドライブのColab Notebooksフォルダの下にsample.jpgとして保存します。
そして、以下のコードを実行します。
detect_text('/content/drive/My Drive/Colab Notebooks/sample.jpg')
すると、以下のような実行結果が表示されると思います。
Texts:
"業務システム
入力
処理
人間
記憶装置
出力
"
bounds: (24,25),(471,25),(471,217),(24,217)
"業務"
bounds: (289,25),(332,25),(332,47),(289,47)
"システム"
bounds: (334,25),(397,25),(397,47),(334,47)
"入力"
bounds: (230,103),(263,104),(263,120),(230,119)
"処理"
bounds: (423,120),(458,120),(458,136),(423,136)
"人間"
bounds: (24,183),(57,183),(57,199),(24,199)
"記憶"
bounds: (410,187),(439,187),(439,201),(410,201)
"装置"
bounds: (442,187),(471,187),(471,201),(442,201)
"出力"
bounds: (230,201),(263,200),(263,216),(230,217)
この結果を見ると、画像中の文字とその領域の座標が認識されていることが分かります。
ここで、「業務」と「システム」、「記憶」と「装置」のように単語が分割されているところも興味深いところです。
なお、上記の出力では文字と領域座標の関係が分かりにくいため、Pillowなどの描画ライブラリを利用して、元画像に領域を描画したものが以下の画像です。これだけでも結果を把握しやすくなります。(なお、1つ目の領域を赤、それ以降を緑で描画しています。コードは省略しますが、とても簡単に描画できます。)
補足
- 上記detect_text関数は利用例を示すコードであるため、Vision API呼び出しと結果出力の2つの機能が1つの関数にまとまっています。このため、1つの画像の解析結果を試行錯誤しながら分析などを行うと、毎回Vision APIの呼び出しが発生してしまいます。これを回避するには、例えば、ある画像に対する解析結果(レスポンス)をPickleファイルとして保存して再利用する方法が考えられます。
- 上記サンプルはTEXT_DETECTIONの例ですが、この解析結果には、文字と座標領域以外にも有用な情報を含んでいます。
- DOCUMENT_TEXT_DETECTIONを利用して手書き文字の検出やページ、ブロック、段落、単語、改行の情報を取得することもできます。
[11]自作パッケージの利用
Colaboratoryのセルにコードを書いて実行することはできますが、関数定義が多くなると、ノートブックに占める関数定義の割合が大きくなって、実験結果の見通しが悪くなります。
また、別のノートブックでも同じ関数を利用する場合は、外部モジュールあるいはパッケージとして再利用したくなります。
これら以外にも、pipでインストールするのではなく、外部のモジュールあるいはパッケージをインポートして使いたい場合もあると思います。
そのようなモジュールあるいはパッケージをGoogleドライブへアップロードして、Colaboratoryからパスを通すことで、importして利用することが出来ます。
例えば、GoogleドライブのColab Notebooksフォルダの下に、mymodulesフォルダを作成し、その下に、myutils.pyファイルをアップロードするとします。また、myutils.pyの中身は、上記detect_text関数をコピーしたものとします。
まず、以下のコードを実行して、Pythonの検索パスにmymodulesを追加します。
import sys
sys.path.append('/content/drive/My Drive/Colab Notebooks/mymodules')
これにより、ノートブック内で関数定義をしなくても、以下のようにモジュール呼び出しだけで利用できるようになります。
import myutils
myutils.detect_text('/content/drive/My Drive/Colab Notebooks/sample.jpg')
[12]最後に:業務システムとPython言語
近年は、特にデータサイエンスや機械学習分野でPython言語が多く取り上げられますが、もともとPython言語は世界中で広く利用されている汎用言語であり、Webアプリケーションやシステムツールなど、様々な分野で利用されています。
しかしながら、これまで業務システムの作成にPythonが採用されることは少なかったのではないかと思います。これには歴史的事情もあると思いますし、RDBにアクセスする業務ロジックの実装のように、厳密に仕様が与えられるソフトウェアの作成には、(特に多くの人が関わる大規模開発には)C#、Javaのような言語のほうがPythonより有効に思えます。
一方、今回のような実験や試行錯誤、プロトタイピングにはPythonは非常に効率が良いと感じます。では、Pythonでプロトタイピングはするが、業務システムと連携するためには、業務システムで利用している言語で再コーディングすることになるのか?というと、それは大変もったいないです。
むしろ、Pythonでプロトタイピングを行い、プロダクションレベルのライブラリパッケージまで作成するのが個人的にはお勧めです。業務システムに直接パッケージを組み込むことができない場合は、下図のように、業務システムからVision APIを直接呼び出さず、(手軽さの観点から)App Engine、Clound Functions、Cloud Runなどのサーバーレス環境上Pythonプログラムを呼び出す構成も考えられます。(但し、サーバーレス環境の費用が発生します。)
Pythonでパッケージ化すれば、Colaboratoryからプロダクション用コードのテストも行えるし、継続的な改良にも取り組みやすいと思います。
近年はマイクロサービスアーキテクチャを採用することが多くなり、コンポーネントごとに、目的に対して最良の実装言語を採用できるため、Pythonが業務システムの実装に利用されることも増えてくるように思います。
コメント
コメントを投稿