Skip to content

Commit a87f786

Browse files
authored
Merge branch 'main' into removeheadings_robotics
2 parents 4b10c05 + b2570ae commit a87f786

File tree

12 files changed

+277
-77
lines changed

12 files changed

+277
-77
lines changed

health-and-life-sciences-ai-suite/multi_modal_patient_monitoring/docker-compose.yaml

Lines changed: 6 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -38,7 +38,7 @@ services:
3838
environment:
3939
- WORKLOAD_TYPE=mdpnp
4040
- GRPC_PORT=50051
41-
- HTTP_PORT=8000
41+
- HTTP_PORT=8001
4242
network_mode: "host"
4343

4444
metrics-collector:
@@ -99,7 +99,7 @@ services:
9999
environment:
100100
- GRPC_HOST=localhost
101101
- GRPC_PORT=50051
102-
- MDPNP_DEVICE=${MDPNP_DEVICE}
102+
- MDPNP_DEVICE=${MDPNP_DEVICE:-}
103103
env_file:
104104
- ./configs/device.env
105105
depends_on:
@@ -127,7 +127,7 @@ services:
127127
patient-monitoring-aggregator:
128128
condition: service_started
129129
environment:
130-
- ECG_DEVICE=${ECG_DEVICE}
130+
- ECG_DEVICE=${ECG_DEVICE:-}
131131
env_file:
132132
- ./configs/device.env
133133
volumes:
@@ -191,7 +191,7 @@ services:
191191
patient-monitoring-aggregator:
192192
condition: service_started
193193
environment:
194-
- RPPG_DEVICE=${RPPG_DEVICE}
194+
- RPPG_DEVICE=${RPPG_DEVICE:-}
195195
env_file:
196196
- ./configs/device.env
197197
volumes:
@@ -207,6 +207,8 @@ services:
207207
context: ./services/ui
208208
dockerfile: Dockerfile
209209
args:
210+
VITE_API_BASE_URL: http://${HOST_IP:-localhost}:8001
211+
VITE_POSE_STREAM_URL: http://${HOST_IP:-localhost}:8085/video_feed
210212
HTTP_PROXY: ${HTTP_PROXY}
211213
HTTPS_PROXY: ${HTTPS_PROXY}
212214
NO_PROXY: ${NO_PROXY}

health-and-life-sciences-ai-suite/multi_modal_patient_monitoring/helm/README.md

Lines changed: 29 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -8,22 +8,12 @@ This Helm chart deploys the **Health & Life Sciences AI Suite** on Kubernetes.
88
- Kubernetes cluster (Minikube / Kind / Bare-metal)
99
- `kubectl`
1010
- `helm` (v3+)
11-
- Docker images built locally
12-
13-
## Required Docker Images
14-
15-
The following images **must exist locally** before deploying the Helm chart.
16-
17-
Check available images:
18-
```bash
19-
docker images | grep intel/hl-ai
20-
```
2111

2212

2313
## Install
2414

2515
```bash
26-
cd health-and-life-sciences-ai-suite/helm/multi_modal_patient_monitoring
16+
cd /health-and-life-sciences-ai-suite/multi_modal_patient_monitoring/helm/multi_modal_patient_monitoring
2717

2818
helm install multi-modal-patient-monitoring . \
2919
--namespace multi-modal-patient-monitoring \
@@ -53,7 +43,7 @@ kubectl get svc -n multi-modal-patient-monitoring
5343

5444
## Check Logs (recommended)
5545
```bash
56-
kubectl logs -n multi-modal-patient-monitoringi deploy/mdpnp
46+
kubectl logs -n multi-modal-patient-monitoring deploy/mdpnp
5747
kubectl logs -n multi-modal-patient-monitoring deploy/dds-bridge
5848
kubectl logs -n multi-modal-patient-monitoring deploy/aggregator
5949
kubectl logs -n multi-modal-patient-monitoring deploy/ai-ecg
@@ -70,7 +60,9 @@ Healthy services will show:
7060

7161

7262
## Access the Frontend UI
73-
Check Ingress resource:
63+
### 1. Check the Ingress Resource
64+
65+
Run the following command to view the ingress configuration:
7466

7567
```bash
7668
kubectl get ingress -n multi-modal-patient-monitoring
@@ -82,24 +74,42 @@ Example output:
8274
NAME HOSTS PATHS ADDRESS PORTS
8375
multi-modal-patient-monitoring multi-modal-patient-monitoring.local / xx.xx.xx.xx 80
8476
```
77+
### 2. If an IP Address Appears in ADDRESS
8578

86-
Add an entry on your Linux host (replace <IP> with the one you found):
79+
Add the hostname mapping to your local machine:
8780
```bash
8881
echo "<IP> multi-modal-patient-monitoring.local" | sudo tee -a /etc/hosts
8982
```
83+
Replace <IP> with the value shown in the ADDRESS column.
84+
85+
### 3. If the ADDRESS Field is Empty (Common in Minikube)
86+
Some local Kubernetes environments (such as Minikube) do not automatically populate the ingress IP.
87+
88+
Retrieve the Minikube cluster IP:
89+
```bash
90+
minikube ip
91+
```
92+
Then map the hostname to the IP:
93+
```bash
94+
echo "$(minikube ip) multi-modal-patient-monitoring.local" | sudo tee -a /etc/hosts
95+
```
96+
97+
### 4. Enable Ingress in Minikube (if not already enabled)
98+
```bash
99+
minikube addons enable ingress
100+
```
101+
Wait a few moments for the ingress controller to start.
90102

91-
Open your browser and go to:
103+
### 5.Open the Application
104+
Open your browser and navigate to:
92105
```bash
93106
http://<host-or-ip>/
94107
```
95108
Example:
96109
```bash
97110
http://multi-modal-patient-monitoring.local/
98111
```
99-
If using Minikube, you may need to enable the ingress addon:
100-
```bash
101-
minikube addons enable ingress
102-
```
112+
103113
This will open the Health AI Suite frontend dashboard.
104114

105115
From here you can access:

health-and-life-sciences-ai-suite/multi_modal_patient_monitoring/helm/multi_modal_patient_monitoring/templates/aggregator-deployment.yaml

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,8 @@ spec:
1818
imagePullPolicy: {{ .Values.aggregator.image.pullPolicy }}
1919
ports:
2020
- containerPort: 8001
21+
hostPort: 8001
22+
protocol: TCP
2123
- containerPort: 50051
2224
env:
2325
- name: METRICS_SERVICE_URL

health-and-life-sciences-ai-suite/multi_modal_patient_monitoring/helm/multi_modal_patient_monitoring/templates/ai-ecg-deployment.yaml

Lines changed: 37 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -13,16 +13,19 @@ spec:
1313
app: ai-ecg
1414
spec:
1515
initContainers:
16-
- name: copy-models
17-
image: "{{ .Values.assets.image.repository }}/{{ .Values.assets.image.name }}:{{ .Values.assets.image.tag }}"
18-
imagePullPolicy: {{ .Values.assets.image.pullPolicy }}
19-
command: ["/bin/sh", "-c"]
20-
args:
21-
- cp -r /opt/assets/models/* /models/
16+
- name: wait-for-ecg-model
17+
image: busybox:1.36
18+
command:
19+
- sh
20+
- -c
21+
- >-
22+
until [ -f /models/ai-ecg/hubert_ecg_small_fp16.xml ]; do
23+
echo "Waiting for HuBERT-ECG model asset...";
24+
sleep 5;
25+
done
2226
volumeMounts:
2327
- name: models
2428
mountPath: /models
25-
2629
containers:
2730
- name: ai-ecg
2831
image: "{{ .Values.aiEcg.image.repository }}/{{ .Values.aiEcg.image.name }}:{{ .Values.aiEcg.image.tag }}"
@@ -32,22 +35,46 @@ spec:
3235
envFrom:
3336
- configMapRef:
3437
name: device-config
38+
startupProbe:
39+
tcpSocket:
40+
port: 8000
41+
periodSeconds: 5
42+
failureThreshold: 24
43+
readinessProbe:
44+
httpGet:
45+
path: /health
46+
port: 8000
47+
initialDelaySeconds: 5
48+
periodSeconds: 5
49+
failureThreshold: 6
50+
livenessProbe:
51+
httpGet:
52+
path: /health
53+
port: 8000
54+
initialDelaySeconds: 15
55+
periodSeconds: 15
56+
failureThreshold: 3
3557
ports:
3658
- containerPort: 8000
3759
volumeMounts:
3860
- name: models
3961
mountPath: /models
62+
- name: videos
63+
mountPath: /videos
4064
- name: dri
4165
mountPath: /dev/dri
4266
- name: dev
4367
mountPath: /dev
44-
4568
volumes:
4669
- name: models
47-
emptyDir: {}
70+
persistentVolumeClaim:
71+
claimName: models-pvc
72+
- name: videos
73+
persistentVolumeClaim:
74+
claimName: videos-pvc
4875
- name: dri
4976
hostPath:
5077
path: /dev/dri
5178
- name: dev
5279
hostPath:
53-
path: /dev
80+
path: /dev
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,45 @@
1+
apiVersion: batch/v1
2+
kind: Job
3+
metadata:
4+
name: assets-prep
5+
spec:
6+
template:
7+
spec:
8+
restartPolicy: OnFailure
9+
containers:
10+
- name: assets
11+
image: "{{ .Values.assets.image.repository }}/{{ .Values.assets.image.name }}:{{ .Values.assets.image.tag }}"
12+
imagePullPolicy: {{ .Values.assets.image.pullPolicy }}
13+
envFrom:
14+
- configMapRef:
15+
name: device-config
16+
env:
17+
- name: HTTP_PROXY
18+
value: "http://proxy-pilot.intel.com:912"
19+
- name: HTTPS_PROXY
20+
value: "http://proxy-pilot.intel.com:912"
21+
- name: http_proxy
22+
value: "http://proxy-pilot.intel.com:912"
23+
- name: https_proxy
24+
value: "http://proxy-pilot.intel.com:912"
25+
- name: NO_PROXY
26+
value: "intel.com,.intel.com,10.0.0.0/8,192.168.0.0/16,localhost,.local,127.0.0.0/8,134.134.0.0/16"
27+
- name: no_proxy
28+
value: "intel.com,.intel.com,10.0.0.0/8,192.168.0.0/16,localhost,.local,127.0.0.0/8,134.134.0.0/16"
29+
volumeMounts:
30+
- name: models
31+
mountPath: /models
32+
- name: videos
33+
mountPath: /videos
34+
- name: model-config
35+
mountPath: /app/configs
36+
volumes:
37+
- name: models
38+
persistentVolumeClaim:
39+
claimName: models-pvc
40+
- name: videos
41+
persistentVolumeClaim:
42+
claimName: videos-pvc
43+
- name: model-config
44+
configMap:
45+
name: rppg-model-config
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,38 @@
1+
apiVersion: v1
2+
kind: ConfigMap
3+
metadata:
4+
name: rppg-model-config
5+
data:
6+
model-config.yaml: |-
7+
ai-ecg:
8+
models:
9+
- name: hubert_ecg_small_fp16
10+
type: ai-ecg
11+
hub: hf
12+
source: hubert-ecg
13+
model_id: Edoardo-BS/hubert-ecg-small
14+
target_dir: /models/ai-ecg
15+
ir_file: hubert_ecg_small_fp16.xml
16+
video_dir: /videos/ai-ecg
17+
18+
rppg:
19+
models:
20+
- name: mtts_can.hdf5
21+
type: rppg
22+
hub: hls
23+
target_dir: /models/rppg
24+
model_file: mtts_can.hdf5
25+
model_url: https://github.com/xliucs/MTTS-CAN/raw/main/mtts_can.hdf5
26+
video_dir: /videos/rppg
27+
video_url: https://github.com/opencv/opencv/raw/master/samples/data/vtest.avi
28+
29+
pose-3d:
30+
models:
31+
- name: human-pose-estimation-3d-0001
32+
type: 3d-pose
33+
hub: hls
34+
target_dir: /models/3d-pose
35+
model_url: https://storage.openvinotoolkit.org/repositories/open_model_zoo/public/2022.1/human-pose-estimation-3d-0001/human-pose-estimation-3d.tar.gz
36+
ir_file: human-pose-estimation-3d-0001.xml
37+
video_dir: /videos/3d-pose
38+
video_url: https://www.pexels.com/download/video/6130537

health-and-life-sciences-ai-suite/multi_modal_patient_monitoring/helm/multi_modal_patient_monitoring/templates/pose-deployment.yaml

Lines changed: 26 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -13,22 +13,30 @@ spec:
1313
app: pose
1414
spec:
1515
initContainers:
16-
- name: copy-assets
17-
image: "{{ .Values.assets.image.repository }}/{{ .Values.assets.image.name }}:{{ .Values.assets.image.tag }}"
18-
imagePullPolicy: {{ .Values.assets.image.pullPolicy }}
16+
- name: wait-for-pose-assets
17+
image: "{{ .Values.pose.image.repository }}/{{ .Values.pose.image.name }}:{{ .Values.pose.image.tag }}"
18+
imagePullPolicy: {{ .Values.pose.image.pullPolicy }}
1919
command: ["/bin/sh", "-c"]
2020
args:
21-
- >
22-
mkdir -p /models/3d-pose;
23-
cp -r /opt/assets/models/3d-pose/* /models/3d-pose/;
24-
mkdir -p /videos/3d-pose;
25-
cp -r /opt/assets/videos/3d-pose/* /videos/3d-pose/
21+
- |
22+
set -e
23+
MODEL="/models/3d-pose/human-pose-estimation-3d-0001.xml"
24+
VIDEO="/videos/3d-pose/face-demographics-walking.mp4"
25+
for i in $(seq 1 120); do
26+
if [ -f "$MODEL" ] && [ -f "$VIDEO" ]; then
27+
echo "Pose assets found"
28+
exit 0
29+
fi
30+
echo "Waiting for pose assets..."
31+
sleep 5
32+
done
33+
echo "Timed out waiting for pose assets"
34+
exit 1
2635
volumeMounts:
2736
- name: models
2837
mountPath: /models
2938
- name: videos
3039
mountPath: /videos
31-
3240
containers:
3341
- name: pose
3442
image: "{{ .Values.pose.image.repository }}/{{ .Values.pose.image.name }}:{{ .Values.pose.image.tag }}"
@@ -41,7 +49,9 @@ spec:
4149
- "--video"
4250
- "/videos/3d-pose/face-demographics-walking.mp4"
4351
- "--aggregator"
44-
- "aggregator:50051"
52+
- "aggregator:50051"
53+
- "--source-id"
54+
- "3d-pose-camera-1"
4555
securityContext:
4656
privileged: true
4757
envFrom:
@@ -51,7 +61,8 @@ spec:
5161
- containerPort: 8083
5262
- name: video-feed
5363
containerPort: 8085
54-
64+
hostPort: 8085
65+
protocol: TCP
5566
env:
5667
- name: AGGREGATOR_ADDRESS
5768
value: "aggregator:50051"
@@ -63,7 +74,6 @@ spec:
6374
value: "aggregator,localhost,127.0.0.1"
6475
- name: no_proxy
6576
value: "aggregator,localhost,127.0.0.1"
66-
6777
volumeMounts:
6878
- name: models
6979
mountPath: /models
@@ -73,12 +83,13 @@ spec:
7383
mountPath: /dev/dri
7484
- name: dev
7585
mountPath: /dev
76-
7786
volumes:
7887
- name: models
79-
emptyDir: {}
88+
persistentVolumeClaim:
89+
claimName: models-pvc
8090
- name: videos
81-
emptyDir: {}
91+
persistentVolumeClaim:
92+
claimName: videos-pvc
8293
- name: dri
8394
hostPath:
8495
path: /dev/dri

0 commit comments

Comments
 (0)