Skip to content

Commit 28855dd

Browse files
authored
Merge branch 'main' into sairam/metro-smart-intersection-gpu
2 parents 2f489b8 + 1042df2 commit 28855dd

File tree

252 files changed

+2201
-667
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

252 files changed

+2201
-667
lines changed

.github/workflows/industrial-edge-insights-time-series-pull-request.yml

Lines changed: 48 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -3,12 +3,13 @@
33
# Copyright (C) 2025 Intel Corporation
44
# SPDX-License-Identifier: Apache-2.0
55
#
6-
name: "[Industrial Edge Insights Time Series] PR workflow"
7-
run-name: "[Industrial Edge Insights Time Series] PR workflow (by @${{ github.actor }} via ${{ github.event_name }})"
6+
name: "[Industrial Edge Insights Time Series and Multimodal] PR workflow"
7+
run-name: "[Industrial Edge Insights Time Series and Multimodal] PR workflow (by @${{ github.actor }} via ${{ github.event_name }})"
88
on:
99
pull_request:
1010
paths:
1111
- 'manufacturing-ai-suite/industrial-edge-insights-time-series/*'
12+
- 'manufacturing-ai-suite/industrial-edge-insights-multimodal/*'
1213
workflow_call:
1314
workflow_dispatch:
1415

@@ -52,7 +53,7 @@ jobs:
5253
with:
5354
path: timeseries
5455
persist-credentials: false
55-
- name: Building Wind Turbine Anomaly Detection Sample App
56+
- name: Building Time Series Sample App
5657
run: |
5758
cd ./timeseries/manufacturing-ai-suite/industrial-edge-insights-time-series
5859
make down
@@ -87,6 +88,50 @@ jobs:
8788
cd "${{ github.workspace }}"
8889
cd ./timeseries/manufacturing-ai-suite/industrial-edge-insights-time-series
8990
make down
91+
- name: Deploying Weld Anomaly Detection Sample App
92+
run: |
93+
cd "${{ github.workspace }}"
94+
cd ./timeseries/manufacturing-ai-suite/industrial-edge-insights-time-series
95+
echo "Deploying Weld Anomaly Detection Sample App"
96+
make up_mqtt_ingestion app=weld-anomaly-detection
97+
- name: Undeploying Weld Anomaly Detection Sample App
98+
run: |
99+
cd "${{ github.workspace }}"
100+
cd ./timeseries/manufacturing-ai-suite/industrial-edge-insights-time-series
101+
make down
102+
103+
- name: Building Multimodal Sample App
104+
run: |
105+
cd ./timeseries/manufacturing-ai-suite/industrial-edge-insights-multimodal
106+
make down
107+
# Generate random values for sensitive environment variables
108+
INFLUXDB_USERNAME=$(cat /dev/urandom | tr -dc 'a-zA-Z' | head -c 8)
109+
INFLUXDB_PASSWORD=$(openssl rand -hex 6)
110+
VISUALIZER_GRAFANA_USER=$(cat /dev/urandom | tr -dc 'a-zA-Z' | head -c 8)
111+
VISUALIZER_GRAFANA_PASSWORD=$(openssl rand -hex 6)
112+
MTX_WEBRTCICESERVERS2_0_USERNAME=$(cat /dev/urandom | tr -dc 'a-zA-Z' | head -c 8)
113+
MTX_WEBRTCICESERVERS2_0_PASSWORD=$(openssl rand -hex 10)
114+
HOST_IP=$(hostname -I | awk '{print $1}')
115+
116+
sed -i "s/INFLUXDB_USERNAME=.*/INFLUXDB_USERNAME=${INFLUXDB_USERNAME}/g" .env
117+
sed -i "s/INFLUXDB_PASSWORD=.*/INFLUXDB_PASSWORD=${INFLUXDB_PASSWORD}/g" .env
118+
sed -i "s/VISUALIZER_GRAFANA_USER=.*/VISUALIZER_GRAFANA_USER=${VISUALIZER_GRAFANA_USER}/g" .env
119+
sed -i "s/VISUALIZER_GRAFANA_PASSWORD=.*/VISUALIZER_GRAFANA_PASSWORD=${VISUALIZER_GRAFANA_PASSWORD}/g" .env
120+
sed -i "s/MTX_WEBRTCICESERVERS2_0_USERNAME=.*/MTX_WEBRTCICESERVERS2_0_USERNAME=${MTX_WEBRTCICESERVERS2_0_USERNAME}/g" .env
121+
sed -i "s/MTX_WEBRTCICESERVERS2_0_PASSWORD=.*/MTX_WEBRTCICESERVERS2_0_PASSWORD=${MTX_WEBRTCICESERVERS2_0_PASSWORD}/g" .env
122+
sed -i "s/HOST_IP=.*/HOST_IP=${HOST_IP}/g" .env
123+
make build
124+
- name: Deploying Multimodal Weld Defect Detection Sample App
125+
run: |
126+
cd "${{ github.workspace }}"
127+
cd ./timeseries/manufacturing-ai-suite/industrial-edge-insights-multimodal
128+
echo "Deploying Multimodal Weld Defect Detection Sample App"
129+
make up
130+
- name: Undeploying Multimodal Weld Defect Detection Sample App
131+
run: |
132+
cd "${{ github.workspace }}"
133+
cd ./timeseries/manufacturing-ai-suite/industrial-edge-insights-multimodal
134+
make down
90135
91136
industrial-edge-insights-time-series-scans:
92137
uses: ./.github/workflows/industrial-edge-insights-time-series-scans.yml

.github/workflows/industrial-edge-insights-time-series-scans.yml

Lines changed: 28 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -2,8 +2,8 @@
22
# SPDX-FileCopyrightText: (C) 2025 Intel Corporation
33
# SPDX-License-Identifier: Apache-2.0
44

5-
name: "[Industrial Edge Insights Time Series] SDLe Scans"
6-
run-name: "[Industrial Edge Insights Time Series] SDLe Scans workflow (by @${{ github.actor }} via ${{ github.event_name }})"
5+
name: "[Industrial Edge Insights Multimodal and Time Series] SDLe Scans"
6+
run-name: "[Industrial Edge Insights Multimodal and Time Series] SDLe Scans workflow (by @${{ github.actor }} via ${{ github.event_name }})"
77

88

99
# Only run at most 1 workflow concurrently per PR, unlimited for branches
@@ -77,7 +77,6 @@ jobs:
7777
run: |
7878
pwd
7979
CWD=$(pwd)
80-
cd manufacturing-ai-suite/industrial-edge-insights-time-series/
8180
trivy --version
8281
which trivy
8382
trivy image --download-db-only
@@ -164,7 +163,7 @@ jobs:
164163
shell: bash
165164
run: |
166165
pwd
167-
cd manufacturing-ai-suite/industrial-edge-insights-time-series/
166+
CWD=$(pwd)
168167
trivy --version
169168
which trivy
170169
trivy image --download-db-only
@@ -209,7 +208,7 @@ jobs:
209208
CWD=$(pwd)
210209
if [[ "${{ inputs.application }}" == "time-series" || "${{ inputs.application }}" == "both" ]]; then
211210
echo "Building Time Series Sample app and scanning docker images"
212-
cd manufacturing-ai-suite/industrial-edge-insights-time-series/
211+
cd $CWD/manufacturing-ai-suite/industrial-edge-insights-time-series/
213212
make down
214213
215214
OPC_UA_SERVER_IMAGE=$(grep '^OPC_UA_SERVER_IMAGE=' .env | cut -d'=' -f2)
@@ -246,7 +245,7 @@ jobs:
246245
247246
if [[ "${{ inputs.application }}" == "multimodal" || "${{ inputs.application }}" == "both" ]]; then
248247
echo "Building Multimodal Weld Defect Detection Sample app and scanning docker images"
249-
cd manufacturing-ai-suite/industrial-edge-insights-multimodal/
248+
cd $CWD/manufacturing-ai-suite/industrial-edge-insights-multimodal/
250249
make down
251250
252251
WELD_SIMULATOR_IMAGE=$(grep '^WELD_SIMULATOR_IMAGE=' .env | cut -d'=' -f2)
@@ -316,7 +315,6 @@ jobs:
316315
shell: bash
317316
run: |
318317
pwd
319-
cd manufacturing-ai-suite/industrial-edge-insights-time-series/
320318
trivy --version
321319
which trivy
322320
trivy image --download-db-only
@@ -359,15 +357,29 @@ jobs:
359357
cd manufacturing-ai-suite/industrial-edge-insights-time-series/
360358
make gen_helm_charts
361359
cd helm
362-
trivy config . >> trivy-timeseries-helm.txt
360+
INFLUXDB_USERNAME=$(cat /dev/urandom | tr -dc 'a-zA-Z' | head -c 8)
361+
INFLUXDB_PASSWORD=$(openssl rand -hex 10)
362+
VISUALIZER_GRAFANA_USER=$(cat /dev/urandom | tr -dc 'a-zA-Z' | head -c 8)
363+
VISUALIZER_GRAFANA_PASSWORD=$(openssl rand -hex 10)
364+
365+
sed -i "s/INFLUXDB_USERNAME:.*/INFLUXDB_USERNAME: ${INFLUXDB_USERNAME}/g" values.yaml
366+
sed -i "s/INFLUXDB_PASSWORD:.*/INFLUXDB_PASSWORD: ${INFLUXDB_PASSWORD}/g" values.yaml
367+
sed -i "s/VISUALIZER_GRAFANA_USER:.*/VISUALIZER_GRAFANA_USER: ${VISUALIZER_GRAFANA_USER}/g" values.yaml
368+
sed -i "s/VISUALIZER_GRAFANA_PASSWORD:.*/VISUALIZER_GRAFANA_PASSWORD: ${VISUALIZER_GRAFANA_PASSWORD}/g" values.yaml
369+
370+
trivy config . >> trivy-timeseries-mqtt-helm.txt
371+
372+
sed -i "s/TELEGRAF_INPUT_PLUGIN:.*/TELEGRAF_INPUT_PLUGIN: opcua/g" values.yaml
373+
trivy config . >> trivy-timeseries-opcua-helm.txt
374+
363375
fi
364376
365377
- name: Upload Scan artifact to Github
366378
uses: actions/upload-artifact@v4
367379
with:
368380
name: Trivy Report - Config scan for Helm
369381
path: |
370-
manufacturing-ai-suite/industrial-edge-insights-time-series/helm/trivy-timeseries-helm.txt
382+
manufacturing-ai-suite/industrial-edge-insights-time-series/helm/trivy-timeseries-*.txt
371383
372384
trivy-config-time-series-dockerfile-scan:
373385
if: ${{ ((inputs.target == 'trivy-config-scan') || (inputs.target == 'trivy-dockerfile-scan') || (inputs.target == 'all-scans')) && ((inputs.application == 'time-series') || (inputs.application == 'both')) }}
@@ -405,10 +417,10 @@ jobs:
405417
include:
406418
- dockerfile-path: manufacturing-ai-suite/industrial-edge-insights-multimodal/weld-data-simulator/Dockerfile
407419
output-report-path: trivy-weld-simulator-dockerfile.json
408-
scan-name: Time Series Weld Data Simulator Dockerfile
420+
scan-name: Multimodal Weld Data Simulator Dockerfile
409421
- dockerfile-path: manufacturing-ai-suite/industrial-edge-insights-multimodal/fusion-analytics/Dockerfile
410422
output-report-path: trivy-fusion-analytics-dockerfile.json
411-
scan-name: Time Series Fusion Analytics Dockerfile
423+
scan-name: Multimodal Fusion Analytics Dockerfile
412424
uses: open-edge-platform/edge-ai-libraries/.github/workflows/trivy-config-mode.yaml@e6e04af3dbca805db9118b85a22ad2998f7eec39
413425
with:
414426
dockerfile-path: ${{ matrix.dockerfile-path }}
@@ -452,7 +464,7 @@ jobs:
452464
pwd
453465
- name: Convert JSON to CSV
454466
run: |
455-
python3 <<EOF
467+
cat > convert_json_to_csv.py << 'EOF'
456468
import json
457469
import csv
458470
import glob
@@ -481,6 +493,7 @@ jobs:
481493
"test_name": issue["test_name"]
482494
})
483495
EOF
496+
python3 convert_json_to_csv.py
484497
- name: Upload Scan Reports
485498
uses: actions/upload-artifact@v4
486499
with:
@@ -673,14 +686,16 @@ jobs:
673686
VISUALIZER_GRAFANA_PASSWORD=$(openssl rand -hex 10)
674687
MTX_WEBRTCICESERVERS2_0_USERNAME=$(cat /dev/urandom | tr -dc 'a-zA-Z' | head -c 8)
675688
MTX_WEBRTCICESERVERS2_0_PASSWORD=$(openssl rand -hex 10)
689+
HOST_IP=$(hostname -I | awk '{print $1}')
676690
677691
sed -i "s/INFLUXDB_USERNAME=.*/INFLUXDB_USERNAME=${INFLUXDB_USERNAME}/g" .env
678692
sed -i "s/INFLUXDB_PASSWORD=.*/INFLUXDB_PASSWORD=${INFLUXDB_PASSWORD}/g" .env
679693
sed -i "s/VISUALIZER_GRAFANA_USER=.*/VISUALIZER_GRAFANA_USER=${VISUALIZER_GRAFANA_USER}/g" .env
680694
sed -i "s/VISUALIZER_GRAFANA_PASSWORD=.*/VISUALIZER_GRAFANA_PASSWORD=${VISUALIZER_GRAFANA_PASSWORD}/g" .env
681695
sed -i "s/MTX_WEBRTCICESERVERS2_0_USERNAME=.*/MTX_WEBRTCICESERVERS2_0_USERNAME=${MTX_WEBRTCICESERVERS2_0_USERNAME}/g" .env
682696
sed -i "s/MTX_WEBRTCICESERVERS2_0_PASSWORD=.*/MTX_WEBRTCICESERVERS2_0_PASSWORD=${MTX_WEBRTCICESERVERS2_0_PASSWORD}/g" .env
683-
697+
sed -i "s/HOST_IP=.*/HOST_IP=${HOST_IP}/g" .env
698+
684699
make build
685700
echo "Deploying using mqtt ingestion"
686701
make up

.github/workflows/pre-merge.yml

Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,7 @@ jobs:
2222
hmi-augmented-worker_changed: ${{ steps.filter.outputs.hmi-augmented-worker }}
2323
image-based-video-search_changed: ${{ steps.filter.outputs.image-based-video-search }}
2424
industrial-edge-insights-time-series_changed: ${{ steps.filter.outputs.industrial-edge-insights-time-series }}
25+
industrial-edge-insights-multimodal_changed: ${{ steps.filter.outputs.industrial-edge-insights-multimodal }}
2526
loitering-detection_changed: ${{ steps.filter.outputs.loitering-detection }}
2627
metro-sdk-manager_changed: ${{ steps.filter.outputs.metro-sdk-manager }}
2728
pallet-defect-detection_changed: ${{ steps.filter.outputs.pallet-defect-detection }}
@@ -47,6 +48,8 @@ jobs:
4748
- 'metro-ai-suite/image-based-video-search/docs/**'
4849
industrial-edge-insights-time-series:
4950
- 'manufacturing-ai-suite/industrial-edge-insights-time-series/docs/**'
51+
industrial-edge-insights-multimodal:
52+
- 'manufacturing-ai-suite/industrial-edge-insights-multimodal/docs/**'
5053
loitering-detection:
5154
- 'metro-ai-suite/metro-vision-ai-app-recipe/loitering-detection/docs/**'
5255
metro-sdk-manager:
@@ -108,6 +111,20 @@ jobs:
108111
with:
109112
docs_directory: manufacturing-ai-suite/industrial-edge-insights-time-series
110113
exclude_patterns: "**/Overview.md"
114+
115+
build_industrial-edge-insights-multimodal:
116+
permissions:
117+
contents: read # needed for actions/checkout
118+
needs: filter
119+
if: ${{ needs.filter.outputs.industrial-edge-insights-multimodal_changed == 'true' }}
120+
uses: open-edge-platform/orch-ci/.github/workflows/build-documentation.yml@b14b0105bf312a2c98457dd021622de4c14f6bff
121+
secrets:
122+
SYS_ORCH_GITHUB: ${{ secrets.SYS_ORCH_GITHUB }}
123+
DOC_AWS_ACCESS_KEY_ID: ${{ secrets.DOC_AWS_ACCESS_KEY_ID }}
124+
DOC_AWS_SECRET_ACCESS_KEY: ${{ secrets.DOC_AWS_SECRET_ACCESS_KEY }}
125+
with:
126+
docs_directory: manufacturing-ai-suite/industrial-edge-insights-multimodal
127+
exclude_patterns: "**/Overview.md"
111128

112129
build_loitering-detection:
113130
permissions:

README.md

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -45,7 +45,6 @@ The **Edge AI Suites** project is licensed under the [APACHE 2.0](LICENSE), exce
4545
| Sample Application | License |
4646
|:-------------------|:--------|
4747
|[Smart Intersection](metro-ai-suite/metro-vision-ai-app-recipe/smart-intersection) | [LIMITED EDGE SOFTWARE DISTRIBUTION LICENSE AGREEMENT](metro-ai-suite/metro-vision-ai-app-recipe/smart-intersection/LICENSE.txt) |
48-
|[Video Processing for NVR](metro-ai-suite/video-processing-for-nvr) | [LIMITED EDGE SOFTWARE DISTRIBUTION LICENSE AGREEMENT](metro-ai-suite/video-processing-for-nvr/LICENSE.txt) |
4948

5049
## Third-Party
5150

manufacturing-ai-suite/industrial-edge-insights-multimodal/README.md

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -6,8 +6,8 @@ The Weld Defect Detection sample application demonstrates a powerful fusion of v
66

77
To see the system requirements and other installation, see the following guides:
88

9-
- [System Requirements](docs/user-guide/system-requirements.md): Hardware and software requirements for running the sample application.
10-
- [Get Started](docs/user-guide/get-started.md): Step-by-step guide to getting started with the docker compose deployment of the sample application.
9+
- [System Requirements](docs/user-guide/weld-defect-detection/system-requirements.md): Hardware and software requirements for running the sample application.
10+
- [Get Started](docs/user-guide/weld-defect-detection/get-started.md): Step-by-step guide to getting started with the docker compose deployment of the sample application.
1111

1212
## Architecture and Functionality Overview
1313

manufacturing-ai-suite/industrial-edge-insights-multimodal/docs/toc.rst

Lines changed: 0 additions & 3 deletions
This file was deleted.
Lines changed: 40 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,40 @@
1+
# Industrial Edge Insights - Multimodal
2+
3+
MultiModal sample apps demonstrate how to use AI at the edge to identify defects in manufacturing environments by analyzing both image and time series sensor data.
4+
5+
In industrial quality is critical for safety and reliability. Manual inspections are time-consuming and prone to human error. Our solutions leverage deep learning models to automate defect detection, improving accuracy and efficiency.
6+
7+
Key features include:
8+
9+
- Multi-modal data fusion: Combines visual inspection (images) and sensor data (such as current, voltage, and temperature)
10+
for comprehensive defect detection.
11+
- Real-time inference: Processes data at the edge for immediate feedback and reduced latency.
12+
- Configurable alerts: Notifies operators of detected defects to enable timely intervention.
13+
- Extensible pipeline: Supports integration with additional data sources and models.
14+
15+
Applications such as [Weld Defect Detection](./weld-defect-detection/Overview.md) help manufacturers enhance product quality, reduce inspection time, and minimize costly rework by enabling proactive defect detection on the factory floor.
16+
17+
<!--hide_directive
18+
::::{grid} 1 2 3 4
19+
:::{grid-item-card} Weld Defect Detection
20+
:class-card: homepage-card-container-big
21+
:link: ./weld-defect-detection/Overview.html
22+
23+
Multimodal, real-time monitoring of weld defects.
24+
:::
25+
::::
26+
hide_directive-->
27+
28+
<!--hide_directive
29+
:::{toctree}
30+
:hidden:
31+
32+
weld-defect-detection/how-it-works.md
33+
weld-defect-detection/system-requirements.md
34+
weld-defect-detection/get-started.md
35+
weld-defect-detection/how-to-build-from-source.md
36+
weld-defect-detection/how-to-configure-alerts.md
37+
weld-defect-detection/how-to-update-config.md
38+
weld-defect-detection/release_notes/Overview.md
39+
:::
40+
hide_directive-->

manufacturing-ai-suite/industrial-edge-insights-multimodal/docs/user-guide/index.rst

Lines changed: 0 additions & 33 deletions
This file was deleted.

0 commit comments

Comments
 (0)