GRPC Yolov5s Pipeline Service
Overview
This EdgeX-based application service provides an interface to use gRPC to call OVMS to run the input data through a specified model. The service may be set up to use different topics to trigger different pipelines and call different models. The current implementation makes a call to OVMS running the Yolov5s model.
Getting Started
-
Clone the Aicsd code as a submodule in the directory retail-use-cases/use-cases
git submodule add https://github.com/intel/AiCSD -
Change directories to retail-use-cases
cd .. - Download models and sample media
make download-models download-sample-media -
Build the OVMS Docker container
make build-ovms-server -
change directories to use-cases/aicsd
cd use-cases/aicsd - Build the Pipeline Validator and Pipeline grpc-go services
make docker-pipeline-val docker-pipeline-grpc-go - Modify docker-compose-pipeline-val.yml evnironment variables to have the following settings
APPLICATIONSETTINGS_PIPELINEHOST: pipeline-grpc-go APPLICATIONSETTINGS_PIPELINEPORT: 59790 - Run the pipeline validator and pipeline grpc-go services along with their dependencies
make run-pipeline-grpc-go - Verify that the pipeline-grpc-go container has started by checking the log for the message
level=INFO ts=2024-05-30T20:06:58.037173489Z app=app-pipeline-grpc-go source=messaging.go:125 msg="Waiting for messages from the MessageBus on the 'ovms-grpc/yolov5' topic" - Send a POST request to http://localhost:59788/api/v1/launchPipeline with the following body
{ "InputFileLocation":"rtsp://camera-simulator:8554/camera_0", "PipelineTopic":"ovms-grpc/yolov5", "OutputFileFolder":"0.0.0.0:8555" } - Verify that the pipeline-grpc-go container has output in its log. This shows that the pipeline is running.
level=INFO ts=2024-05-30T20:06:58.037173489Z app=app-pipeline-grpc-go source=messaging.go:125 msg="Waiting for messages from the MessageBus on the 'ovms-grpc/yolov5' topic" level=INFO ts=2024-05-30T20:08:37.753137304Z app=app-pipeline-grpc-go source=functions.go:265 msg="RunOvmsModel: Processing time: 45 ms; fps: 16.70864819479429\n" level=INFO ts=2024-05-30T20:08:37.685039109Z app=app-pipeline-grpc-go source=functions.go:265 msg="RunOvmsModel: Processing time: 37 ms; fps: 16.72014862354332\n" level=INFO ts=2024-05-30T20:08:40.689475521Z app=app-pipeline-grpc-go source=functions.go:265 msg="RunOvmsModel: Processing time: 49 ms; fps: 16.368045264717768\n" level=INFO ts=2024-05-30T20:08:40.801842876Z app=app-pipeline-grpc-go source=functions.go:265 msg="RunOvmsModel: Processing time: 29 ms; fps: 16.37919507955609\n" - To stop the data stream from coming in, stop the camera-simulator and camera-simulator0 containers.
- Verify that the pipeline-grpc-go container has successfully finished processing by verifying the log says
level=DEBUG ts=2024-05-30T20:10:56.351778319Z app=app-pipeline-grpc-go source=triggermessageprocessor.go:196 msg="trigger successfully processed message 'OVMS Pipeline' in pipeline 64a47e72-3e89-452e-9010-2d64c059c108" - Verify that the job status from the pipeline validator service making a GET request to http://localhost:59788/api/v1/job which should return an entry as follows
[ { "Id": "0", "Owner": "none", "InputFile": { "Hostname": "gateway", "DirName": "rtsp://camera-simulator:8554/", "Name": "camera_0", "Extension": "", "ArchiveName": "", "Viewable": "", "Attributes": {} }, "PipelineDetails": { "TaskId": "de9ee7bd-aacb-4e6a-ac91-a3c3be3b09c3", "Status": "PipelineComplete", "QCFlags": "passed", "OutputFileHost": "", "OutputFiles": null, "Results": "ovms-server0:9001" }, "LastUpdated": 1717025357138890553, "Status": "Complete", "ErrorDetails": null, "Verification": 0 } ] - Repeat by restarting the camera-simulator services and sending the POST request to
launchPipeline.
Tearing Down
To tear down the services and clean up any data created, run
make down clean-files clean-volumes