クライアントアプリケーションコンポーネントでのモデルの使用 - Amazon Lookout for Vision

翻訳は機械翻訳により提供されています。提供された翻訳内容と英語版の間で齟齬、不一致または矛盾がある場合、英語版が優先します。

クライアントアプリケーションコンポーネントでのモデルの使用

クライアントアプリケーションコンポーネントからモデルを使用する手順は、クラウドでホストされているモデルの使用と似ています。

  1. モデルの実行を開始します。

  2. 画像の異常を検出します。

  3. 不要になった場合は、モデルを停止します。

Amazon Lookout for Vision エッジエージェントは、モデルの開始、イメージの異常検出、モデルの停止を行う API を提供します。API を使用して、デバイス上のモデルを一覧表示し、デプロイされたモデルに関する情報を取得することもできます。詳細については、「Amazon Lookout for Vision エッジエージェント API リファレンス」を参照してください。

gRPC ステータスコードをチェックすると、エラー情報を取得できます。詳細については、「エラー情報の取得」を参照してください。

コードを記述するには、gRPC でサポートされている任意の言語を使用できます。Python コード例を提供します。

クライアントアプリケーションコンポーネントでスタブを使用する

次のコードを使用して、Lookout for Vision Edge エージェントを通じてモデルへのアクセスを設定します。

import grpc from edge_agent_pb2_grpc import EdgeAgentStub import edge_agent_pb2 as pb2 # Creating stub. with grpc.insecure_channel("unix:///tmp/aws.iot.lookoutvision.EdgeAgent.sock") as channel: stub = EdgeAgentStub(channel) # Add additional code that works with Edge Agent in this block to prevent resources leakage

モデルの開始

モデルを起動するには、StartModelアピ。モデルの開始までに時間がかかる場合があります。を呼び出すことで、現在のステータスを確認できます。DescribeModel。このモデルは、statusフィールドは [実行中] です。

コードの例

置換component_nameをモデルコンポーネントの名前で指定します。

import time import grpc from edge_agent_pb2_grpc import EdgeAgentStub import edge_agent_pb2 as pb2 model_component_name = "component_name" def start_model_if_needed(stub, model_name): # Starting model if needed. while True: model_description_response = stub.DescribeModel(pb2.DescribeModelRequest(model_component=model_name)) if model_description_response.model_description.status == pb2.RUNNING: print("Model is already running.") break elif model_description_response.model_description.status == pb2.STOPPED: print("Starting the model.") stub.StartModel(pb2.StartModelRequest(model_component=model_name)) continue print(f"Waiting for model to start.") if model_description_response.model_description.status != pb2.STARTING: break time.sleep(1.0) # Creating stub. with grpc.insecure_channel("unix:///tmp/aws.iot.lookoutvision.EdgeAgent.sock") as channel: stub = EdgeAgentStub(channel) start_model_if_needed(stub, model_component_name)

異常の検出

使用するにはDetectAnomalies画像内の異常を検出する API。

-DetectAnomaliesオペレーションでは、イメージビットマップが RGB888 パック形式で渡されることを想定しています。最初のバイトは赤のチャネルを表し、2 番目のバイトは緑のチャネル、3 番目のバイトは青のチャネルを表します。BGR など、別の形式で画像を提供する場合、 DetectAnomalies は正しくありません。

デフォルトでは、OpenCV はイメージビットマップに BGR 形式を使用します。OpenCV を使用して分析用の画像をキャプチャする場合DetectAnomaliesの場合は、イメージを RGB888 形式に変換してからイメージをDetectAnomalies

イメージバイトを使用した異常の検出

イメージをイメージバイトとして指定することで、イメージの異常を検出できます。次の例では、ローカルファイルシステムに格納されているイメージからイメージバイトを取得します。

置換sample.jpgに解析するイメージファイルの名前を入力します。置換component_nameをモデルコンポーネントの名前で指定します。

import time from PIL import Image import grpc from edge_agent_pb2_grpc import EdgeAgentStub import edge_agent_pb2 as pb2 model_component_name = "component_name" .... # Detecting anomalies. def detect_anomalies(stub, model_name, image_path): image = Image.open(image_path) image = image.convert("RGB") detect_anomalies_response = stub.DetectAnomalies( pb2.DetectAnomaliesRequest( model_component=model_name, bitmap=pb2.Bitmap( width=image.size[0] height=image.size[1] byte_data=bytes(image.tobytes()) ) ) ) print(f"Image is anomalous - {detect_anomalies_response.detect_anomaly_result.is_anomalous}") return detect_anomalies_response.detect_anomaly_result # Creating stub. with grpc.insecure_channel("unix:///tmp/aws.iot.lookoutvision.EdgeAgent.sock") as channel: stub = EdgeAgentStub(channel) start_model_if_needed(stub, model_component_name) detect_anomalies(stub, model_component_name, "sample.jpg")

共有メモリセグメントを使用して異常を検出する

POSIX 共有メモリセグメントにイメージバイトとしてイメージを指定することで、イメージの異常を検出できます。ベストパフォーマンスを実現するため、共有メモリを以下に使用することをお勧めします。 DetectAnomalies リクエスト。詳細については、「DetectAnomalies」を参照してください。

モデルの停止

モデルを使用しなくなった場合は、StopModelモデルの実行を停止する API。

stop_model_response = stub.StopModel( pb2.StopModelRequest( model_component=model_component_name ) ) print(f"New status of the model is {stop_model_response.status}")

デバイス上のモデルのリスト表示

ListModelsデバイスにデプロイされたモデルを一覧表示する API。

models_list_response = stub.ListModels( pb2.ListModelsRequest() ) for model in models_list_response.models: print(f"Model Details {model}")

モデルの記述

デバイスにデプロイされているモデルに関する情報を取得するには、DescribeModelアピ。を使用するDescribeModelは、モデルの現在のステータスを取得するのに便利です。たとえば、を呼び出せる前に、モデルが実行されているかどうかを知る必要があります。DetectAnomalies。サンプルコードについては、「モデルの開始」を参照してください。

エラー情報の取得

gRPC ステータスコードは API の結果を報告するために使用されます。

エラー情報は、RpcError例外 (次の例に示すように)。エラーステータスコードの詳細については、「」を参照してください。リファレンストピックAPI の場合。

# Error handling. try: stub.DetectAnomalies(detect_anomalies_request) except grpc.RpcError as e: print(f"Error code: {e.code()}, Status: {e.details()}")