クライアントアプリケーションコンポーネントでのモデルの使用 - 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

モデルの開始

を呼び出してモデルを起動しますStartModelAPI。モデルの開始までに時間がかかる場合があります。を呼び出すことで、現在のステータスを確認できます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}")

モデルの説明

デバイスにデプロイされているモデルに関する情報は、DescribeModelAPI。を使用する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()}")