支援終止通知:在 2025 年 10 月 31 日, AWS 將停止對 Amazon Lookout for Vision 的支援。2025 年 10 月 31 日後,您將無法再存取 Lookout for Vision 主控台或 Lookout for Vision 資源。如需詳細資訊,請造訪此部落格文章 。
本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。
在用戶端應用程式元件中使用模型
從用戶端應用程式元件使用模型的步驟類似於使用雲端託管的模型。
開始執行模型。
偵測影像中的異常。
如果不再需要,請停止模型。
Amazon LoLookout for Vision 邊緣代理程式提供 API 來啟動模型、偵測映像中的異常,以及停止模型。您也可以使用 API 列出裝置上的模型,並取得已部署模型的相關資訊。如需詳細資訊,請參閱亞馬遜 Lookout for Vision 邊緣代理 API 參考。
您可以通過檢查 gRPC 狀態碼來獲取錯誤信息。如需詳細資訊,請參閱取得錯誤資訊。
要編寫代碼,您可以使用 gRPC 支持的任何語言。我們提供示例 Python 代碼。
在客戶端應用程序組件中使用存根
使用下列程式碼,透過檢視視覺邊緣代理程式設定對模型的存取權限。
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 API 來啟動模型。模型可能需要一段時間才能啟動。您可以通過調用來檢查當前狀態DescribeModel。如果該status
字段的值為「運行」,則模型正在運行。
範例程式碼
將元件名稱
取代為模型元件的名稱。
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)) print(f"DescribeModel() returned {model_description_response}") 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 elif model_description_response.model_description.status == pb2.FAILED: raise Exception(f"model {model_name} failed to start") 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 封裝格式傳遞。第一個字節表示紅色通道,第二個字節表示綠色通道,第三個字節表示藍色通道。如果您以不同的格式(例如 BGR)提供圖像,則來自的預測不 DetectAnomalies 正確。
根據預設,OpenCV 會將 BGR 格式用於影像點陣圖。如果您使用 OpenCV 擷取要分析的影像DetectAnomalies
,則必須在將影像傳遞至之前將影像轉換為 DetectAnomalies
RGB888 格式。
您提供的影像的寬度和高度尺寸DetectAnomalies
必須與用於訓練模型的影像具有相同的寬度和高度尺寸。
使用影像位元組偵測異常
您可以將影像提供為影像位元組來偵測影像中的異常。在下列範例中,會從儲存在本機檔案系統中的影像擷取影像位元組。
將 sample.jpg
取代為您要分析的影像檔案的名稱。將元件名稱
取代為模型元件的名稱。
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。
停止模型
如果您不再使用該模型,StopModelAPI 將停止模型運行。
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 API 取得部署至裝置之模型的相關資訊。使用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()}")