Run your first pipeline
Configure one camera and one model first. Verify the complete path before increasing camera count or enabling additional outputs.
1. Prepare your device
Use Python 3.12, Docker, and Docker Compose with include support (v2.20 or newer). Install a container runtime and drivers compatible with your board. Run the following commands from the repository root.
git clone https://github.com/WajeehAlamoudi/VisionEngine_Services.git
cd VisionEngine_Services
python3 -m venv .venv
. .venv/bin/activate
python -m pip install -r config/controller/requirements.txt2. Create your installation files
Copy all nine sample YAML files into config/YAMLs and remove .sample from each filename. Set device identity, branch API details, camera sources, model weights, and rules. Keep the graph sample as the starting template.
mkdir -p config/YAMLs
for source in config/config_sample/*.sample.yaml; do
name="$(basename "$source" .sample.yaml).yaml"
if [ ! -e "config/YAMLs/$name" ]; then
cp "$source" "config/YAMLs/$name"
fi
done3. Validate and generate
The controller checks YAML types and cross-file references, expands the graph, and writes a resolved pipeline plus modular Compose files. It does not check camera reachability or hardware performance.
python -m config.controller --details
python -m config.controller --generate4. Build, run, and inspect
The generated umbrella starts the configured services. Logs and health reveal whether the runtime is working; successful generation alone does not confirm it.
docker compose -f config/.generated/pipeline.compose.yaml config --quiet
docker compose -f config/.generated/pipeline.compose.yaml up --build -d --remove-orphans
docker compose -f config/.generated/pipeline.compose.yaml ps
docker compose -f config/.generated/pipeline.compose.yaml logs -f --tail 20 --no-log-prefix