Automated Checkout Reference Implementation
Introduction
This guide helps you build and run the Automated Checkout Reference Implementation.
Upon completing the steps in this guide, you will be ready to integrate sensors and services to build your own complete solution.
Info
This guide does not create a complete, ready-to-use solution. Instead, upon completing the steps in this guide, you will be ready to integrate sensors and services to build your own Automated Checkout solution.
Certain third-party software or hardware identified in this document only may be used upon securing a license directly from the third-party software or hardware owner. The identification of non-Intel software, tools, or services in this document does not constitute a sponsorship, endorsement, or warranty by Intel.
Block diagram
The high-level diagram below shows the sensors and services used with the Automated Checkout Reference Implementation. The diagram shows the sensors and services, and how they communicate through EdgeX. Intel provides the services outlined in blue, the purple services are provided by EdgeX, and the black services are either simulated or can interface with real hardware.
Prerequisites
The following items are required to build the Automated Checkout Reference Implementation. You will need additional hardware and software when you are ready to build your own solution.
- A deep learning model for CV inferencing. Intel provides a reference inference service using openVINO that produces inventory changes based on preloaded images. See cv inference service for information on this process.
- A device that allows badging-in to the Automated Checkout. Intel provides a card reader service that can be simulated or integrated with a physical USB device. See the Card Reader device service page for information on this service.
-
A controller device that locks the door to the Automated Checkout, as well as providing readouts (such as a small text-based LCD screen) to display authorization state, items purchased, and other sensor readings. This could be an Arduino-powered circuit. Intel provides a display service that can run in a simulated mode or with a physical USB/serial interface. See the Controller Board device service page for implementation details.
- Docker
- Docker Compose
- Go 1.18 for development purposes or running without docker.
- Git
- GNU make
- A REST client such as curl or Postman for running through the phases outlined in the documentation.
Here's how to install git
, curl
, and make
on an Ubuntu 20.04 system - other operating systems may vary:
sudo apt-get update -y
sudo apt-get install -y git curl build-essential
Hardware
For Phase 2 - Add Card Reader Device, a USB based RFID card reader or second regular USB keyboard can be used.
Additionally, frequently throughout this documentation, we will refer to a "cooler" or "cooler door". This is referring to a vending machine or refrigerator with a sealed location for cooling. Inventory/stock are intended to be placed inside the cooler, and the temperature and humidity inside the cooler are monitored.
Recommended domain knowledge
- EdgeX - the Automated Checkout reference implementation utilizes the EdgeX framework
- MQTT
- REST
- evdev, if reading input events from a USB input device, such as a card reader that inputs key strokes upon scanning a card
- Communication over serial on Linux, if using serial devices such as Arduino
- Computer Vision concepts, if using CV inferencing components
- Basic RFID concepts, if using RFID components (i.e. for badge-in card reader)
- Portainer - included with the Automated Checkout reference implementation. Usage is optional, but this is a highly recommended utility for managing Docker containers, and we provide easy ways to run it.
Getting started
Step 1: Clone the repository
git clone https://github.com/intel-iot-devkit/automated-checkout.git && cd ./automated-checkout
Step 2: Build the reference implementation
You must build the provided component services and create local docker images. To do so, run:
make build
Note
This command may take a while to run depending on your internet connection and machine specifications.
Check for build success
Make sure the command was successful. To do so, run:
docker images | grep automated-checkout
Success
The results are:
automated-checkout/as-controller-board-status
automated-checkout/as-vending
automated-checkout/ds-card-reader
automated-checkout/ds-controller-board
automated-checkout/ds-cv-inference
automated-checkout/ms-authentication
automated-checkout/ms-inventory
automated-checkout/ms-ledger
Failure
If you do not see all of the above docker images, look through the console output for errors. Sometimes dependencies fail to resolve and must be run again. Address obvious issues. To try again, repeat step 2.
Step 3: Start the reference implementation suite
Use Docker Compose to start the reference implementation suite. To do so, run:
make run
This command starts the EdgeX Device Services and then starts all the Automated Checkout Reference Implementation Services.
Check for success
Make sure the command was successful. To do so, run:
docker ps --format 'table{{.Image}}\t{{.Status}}'
Success
Your output is as follows:
IMAGE | STATUS |
---|---|
automated-checkout/ms-ledger:dev | Up 53 seconds |
eclipse-mosquitto:2.0.14 | Up 52 seconds |
automated-checkout/as-vending:dev | Up 52 seconds |
automated-checkout/ms-inventory:dev | Up 52 seconds |
automated-checkout/ds-controller-board:dev | Up 52 seconds |
automated-checkout/ms-authentication:dev | Up 55 seconds |
edgexfoundry/device-mqtt:2.2.0 | Up 53 seconds |
automated-checkout/ds-card-reader:dev | Up 53 seconds |
automated-checkout/as-controller-board-status:dev | Up 52 seconds |
edgexfoundry/core-command:2.2.0 | Up About a minute |
edgexfoundry/core-data:2.2.0 | Up About a minute |
edgexfoundry/core-metadata:2.2.0 | Up About a minute |
edgexfoundry/support-notifications:2.2.0 | Up About a minute |
edgexfoundry/consul:1.10.10 | Up About a minute |
automated-checkout/ds-cv-inference:dev | Up 51 seconds |
redis:6.2-alpine | Up About a minute |
You can also use Portainer to check the status of the services. You must run Portainer service first:
make run-portainer
Then, navigate to the following Portainer URL and create an admin account:
After, navigate to the following URL to list all of the containers running under the automated-checkout
stack:
http://127.0.0.1:9000/#/stacks/automated-checkout?type=2&external=true
Step 4: Dive in
All of the core components of Automated Checkout are up and running, and you are ready to begin going through the following phases.
- Phase 1 - Simulate data and inferencing, and simulate events
- Phase 2 - Add Card Reader Device
- Phase 3 - Bring Your Own Hardware and Software
General Guidance
After completing the steps in the Getting Started section, it may be helpful to read through the remainder of this document for some further guidance on the Automated Checkout reference implementation.
How to use the Compose Files
The docker-compose files are segmented to allow for fine control of physical and simulated devices, as well as allowing you the choice of running Portainer. Use the makefile
to manage the various compose files:
Compose file | Purpose | Makefile Command |
---|---|---|
Portainer | Container management | make run-portainer |
All Services (simulated) | Automated Checkout and EdgeX services | make run |
Physical Environment | Mounts physical devices | make run-physical |
Physical Card Reader | Allows just the card reader to be physical | make run-physical-card-reader |
Physical Controller Board | Allows just the controller board to be physical | make run-physical-controller-board |
Expanding the Reference Implementation
The reference implementation you created is not a complete solution. It provides the base components for creating a framework to run a CV-powered Automated Checkout. It is your choice on how many and which sensors and devices to include. This section provides information about components you might want to include or replace.
Component | Description |
---|---|
RFID card reader | A card reader device service is provided for a USB based RFID card reader. As an alternative, you can also use a regular USB keyboard to enter 10-digit number. See Phase 2 - Add Card Reader Device for more information. |
Micro-controller board | A controller board device service is provided for an Arduino based micro-controller. This micro-controller is in charge of controlling the locks of the automated checkout door and the LED display. Also, it uses modules such as temperature and humidity. See Phase 3 - Bring Your Own Hardware and Software for more information. |
Deep learning model | The Automated Checkout reference implementation provides a computer vision inference service using openVINO inference engine and openVINO product detection model for demonstration purposes. See more information here. You can create your own service and send events to EdgeX using the EdgeX MQTT Device Service. |