Google CloudVisionとPythonを使用した強力な画像分析

公開: 2022-03-10
簡単なまとめ↬GoogleCloudVisionサービスを適用する可能性の範囲は事実上無限です。 Pythonライブラリを利用できるので、機械学習テクノロジーへの関心をさらに深めることができます。

ごく最近、私はユーザーの個人的な経費を管理するためのWebアプリを作成しました。 その主な機能は、買い物の領収書をスキャンし、さらに処理するためにデータを抽出することです。 Google Vision APIは、写真からテキストを取得するための優れたツールであることが判明しました。 この記事では、サンプルプロジェクトでPythonを使用した開発プロセスについて説明します。

初心者の方でもご安心ください。 このプログラミング言語の非常に基本的な知識のみが必要であり、他のスキルは必要ありません。

始めましょう。

Google Cloud Visionを聞いたことがありませんか?

これは、開発者が抽出されたデータを通じて画像のコンテンツを分析できるようにするAPIです。 この目的のために、Googleは画像の大規模なデータセットでトレーニングされた機械学習モデルを利用しています。 これらはすべて、単一のAPIリクエストで利用できます。 APIの背後にあるエンジンは、画像を分類し、オブジェクトや人の顔を検出し、画像内の印刷された単語を認識します。

例を挙げると、人気のあるGiphyを紹介しましょう。 彼らは、GIFからキャプションデータを抽出するためにAPIを採用しました。これにより、ユーザーエクスペリエンスが大幅に向上しました。 もう1つの例はrealtor.comです。これは、Vision APIのOCRを使用して、モバイルアプリで撮影された売り出し中の看板の画像からテキストを抽出し、プロパティの詳細を提供します。

機械学習の概要

多くの人がおそらく以前に聞いたことがある質問に答えることから始めましょう—機械学習とは何ですか?

大まかなアイデアは、与えられたデータのパターンを見つけるプログラム可能なモデルを開発することです。 提供するデータの品質が高く、使用するモデルの設計が優れているほど、よりスマートな結果が得られます。 「フレンドリーな機械学習」(GoogleはAPIサービスを通じて機械学習と呼んでいます)を使用すると、人工知能のチャンクをアプリケーションに簡単に組み込むことができます。

推奨読書機械学習入門

ジャンプした後もっと! 以下を読み続けてください↓

GoogleCloudの使用を開始する方法

GoogleCloudへの登録から始めましょう。 Googleには認証が必要ですが、簡単で簡単です。保存する必要があるのは、APIキーを含むJSONファイルだけです。このファイルは、Google CloudPlatformから直接取得できます。

ファイルをダウンロードし、そのパスを環境変数に追加します。

 export GOOGLE_APPLICATION_CREDENTIALS=/path/to/your/apikey.json

または、開発では、 from_serivce_account_json()メソッドを使用してサポートすることもできます。これについては、この記事で詳しく説明します。 認証の詳細については、Cloudの公式ドキュメントをご覧ください。

Googleは、APIを処理するためのPythonパッケージを提供しています。 最新バージョンのgoogle-cloud-vision == 0.33をアプリに追加しましょう。 コーディングする時が来ました!

Google CloudVisionとPythonを組み合わせる方法

まず、ライブラリからクラスをインポートしましょう。

 from google.cloud import vision from google.cloud.vision import types

それが処理されたら、クライアントのインスタンスが必要になります。 そのためには、テキスト認識機能を使用します。

 client = vision.ImageAnnotatorClient()

クレデンシャルを環境変数に保存しない場合は、この段階でクライアントに直接クレデンシャルを追加できます。

 client = vision.ImageAnnotatorClient.from_service_account_file( '/path/to/apikey.json' )

処理する画像をプロジェクトカタログ内の「images」フォルダに保存していると仮定して、そのうちの1つを開きます。

Google CloudVisionで処理できる領収書の画像
Google CloudVisionで処理できる簡単な領収書の例。 (大プレビュー)
 image_to_open = 'images/receipt.jpg' with open(image_to_open, 'rb') as image_file: content = image_file.read()

次のステップは、Visionオブジェクトを作成することです。これにより、テキスト認識を続行するための要求を送信できます。

 image = vision.types.Image(content=content) text_response = client.text_detection(image=image)

応答は、説明キーとして保存された検出された単語、画像上のそれらの位置、および言語予測で構成されます。 たとえば、最初の単語を詳しく見てみましょう。

 [ ... description: "SHOPPING" bounding_poly { vertices { x: 1327 y: 1513 } vertices { x: 1789 y: 1345 } vertices { x: 1821 y: 1432 } vertices { x: 1359 y: 1600 } } ... ]

ご覧のとおり、テキストのみをフィルタリングするには、「すべての要素について」説明を取得する必要があります。 幸いなことに、Pythonの強力なリスト内包表記が役立ちます。

 texts = [text.description for text in text_response.text_annotations] ['SHOPPING STORE\nREG 12-21\n03:22 PM\nCLERK 2\n618\n1 MISC\n1 STUFF\n$0.49\n$7.99\n$8.48\n$0.74\nSUBTOTAL\nTAX\nTOTAL\nCASH\n6\n$9. 22\n$10.00\nCHANGE\n$0.78\nNO REFUNDS\nNO EXCHANGES\nNO RETURNS\n', 'SHOPPING', 'STORE', 'REG', '12-21', '03:22', 'PM', 'CLERK', '2', '618', '1', 'MISC', '1', 'STUFF', '$0.49', '$7.99', '$8.48', '$0.74', 'SUBTOTAL', 'TAX', 'TOTAL', 'CASH', '6', '$9.', '22', '$10.00', 'CHANGE', '$0.78', 'NO', 'REFUNDS', 'NO', 'EXCHANGES', 'NO', 'RETURNS']

注意深く見ると、リストの最初の要素には、文字列として保存された画像で検出されたすべてのテキストが含まれ、他の要素は分離された単語であることがわかります。 印刷してみましょう。

 print(texts[0]) SHOPPING STORE REG 12-21 03:22 PM CLERK 2 618 1 MISC 1 STUFF $0.49 $7.99 $8.48 $0.74 SUBTOTAL TAX TOTAL CASH 6 $9. 22 $10.00 CHANGE $0.78 NO REFUNDS NO EXCHANGES NO RETURNS

かなり正確ですよね? そして明らかに非常に便利なので、もっと遊んでみましょう。

Google Cloud Visionから何を得ることができますか?

前述したように、Google Cloud Visionはテキストを認識するだけでなく、顔、ランドマーク、画像のプロパティ、ウェブ接続を検出することもできます。 それを念頭に置いて、画像のWeb関連付けについて何がわかるかを調べてみましょう。

 web_response = client.web_detection(image=image)

さて、グーグル、あなたは実際にあなたが受け取った画像に何が表示されているか知っていますか?

 web_content = web_response.web_detection web_content.best_guess_labels >>> [label: "Receipt"]

グーグル、お疲れ様でした! 確かに領収書です。 しかし、もう少し運動をしましょう—他に何か見えますか? パーセンテージで表されたより多くの予測はどうですか?

 predictions = [ (entity.description, '{:.2%}'.format(entity.score))) for entity in web_content.web_entities ] >>> [('Receipt', '70.26%'), ('Product design', '64.24%'), ('Money', '56.54%'), ('Shopping', '55.86%'), ('Design', '54.62%'), ('Brand', '54.01%'), ('Font', '53.20%'), ('Product', '51.55%'), ('Image', '38.82%')]

たくさんの貴重な洞察、よくやった、私の全能の友人! また、画像がどこから来ているのか、コピーがあるかどうかもわかりますか?

 web_content.full_matching_images >>> [ url: "https://www.rcapitalassociates.com/wp-content/uploads/2018/03/receipts.jpg", url:"https://media.istockphoto.com/photos/shopping-receipt-picture-id901964616?k=6&m=901964616&s=612x612&w=0&h=RmFpYy9uDazil1H9aXkkrAOlCb0lQ-bHaFpdpl76o9A=", url: "https://www.pakstat.com.au/site/assets/files/1172/shutterstock_573065707.500x500.jpg" ]

私が感銘を受けた。 ありがとう、グーグル! しかし、1つでは不十分です。似たような画像の例を3つ教えてください。

 web_content.visually_similar_images[:3] >>>[ url: "https://thumbs.dreamstime.com/z/shopping-receipt-paper-sales-isolated-white-background-85651861.jpg", url: "https://thumbs.dreamstime.com/b/grocery-receipt-23403878.jpg", url:"https://image.shutterstock.com/image-photo/closeup-grocery-shopping-receipt-260nw-95237158.jpg" ]

甘い! 素晴らしい。

Google Cloud Visionには本当に人工知能がありますか?

下の画像でわかるように、領収書の取り扱いは少し感情的になる可能性があります。

長い領収書を持っている間、叫び、ストレスを感じている男
領収書を受け取っているときに経験できるストレスの例。 (大プレビュー)

VisionAPIがこの写真について何を教えてくれるか見てみましょう。

 image_to_open = 'images/face.jpg' with open(image_to_open, 'rb') as image_file: content = image_file.read() image = vision.types.Image(content=content) face_response = client.face_detection(image=image) face_content = face_response.face_annotations face_content[0].detection_confidence >>> 0.5153166651725769

悪くはありませんが、アルゴリズムは画像に顔があることを50%以上確信しています。 しかし、その背後にある感情について何かを学ぶことができますか?

 face_content[0] >>> [ ... joy_likelihood: VERY_UNLIKELY sorrow_likelihood: VERY_UNLIKELY anger_likelihood: UNLIKELY surprise_likelihood: POSSIBLE under_exposed_likelihood: VERY_UNLIKELY blurred_likelihood: VERY_UNLIKELY headwear_likelihood: VERY_UNLIKELY ... ]

驚いたことに、簡単なコマンドで、いくつかの基本的な感情の可能性だけでなく、帽子や写真のプロパティを確認できます。

顔の検出に関しては、発生する可能性のある潜在的な問題のいくつかに注意を向ける必要があります。 写真をマシンに渡すことを覚えておく必要があります。GoogleのAPIは巨大なデータセットでトレーニングされたモデルを利用していますが、予期しない誤解を招く結果が返される可能性があります。 オンラインでは、画像分析に関して人工知能がいかに簡単にだまされるかを示す写真を見つけることができます。 それらのいくつかはおかしいと感じることができますが、特に間違いが人間の顔に関係している場合、無実の間違いと不快な間違いの間には微妙な境界線があります。

間違いなく、Google CloudVisionは堅牢なツールです。 さらに、一緒に仕事をするのも楽しいです。 APIのRESTアーキテクチャと広く利用可能なPythonパッケージにより、Python開発の高度に関係なく、誰もがAPIにアクセスしやすくなります。 その機能を利用することで、アプリをどれだけ大幅に改善できるか想像してみてください。

推奨読書デザイナーのための機械学習のアプリケーション

Google CloudVisionに関する知識をどのように広げることができますか

Google CloudVisionサービスを適用する可能性の範囲は事実上無限です。 Pythonライブラリが利用可能であるため、Webアプリケーションであろうと科学プロジェクトであろうと、言語に基づいたあらゆるプロジェクトで利用できます。 それは確かにあなたが機械学習技術へのより深い関心を引き出すのを助けることができます。

Googleのドキュメントには、Vision API機能を実際に適用する方法に関する優れたアイデアがいくつか記載されており、機械学習についてさらに学ぶことができます。 特に、高度な画像検索アプリの作成方法に関するガイドを確認することをお勧めします。

この記事で見たのは魔法のようなものだと言えます。 結局のところ、シンプルで簡単にアクセスできるAPIが、このような強力で科学的なツールに支えられていると誰が思ったでしょうか。 あとは、数行のコードを記述し、想像力を解き放ち、画像分析の無限の可能性を体験するだけです。