Skip to content

Commit 58b28f0

Browse files
authored
Merge branch 'open-edge-platform:main' into main
2 parents 1e5143b + b640b0e commit 58b28f0

File tree

224 files changed

+13675
-25236
lines changed

Some content is hidden

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

224 files changed

+13675
-25236
lines changed

.github/workflows/[HLS]-Multi-Modal-Patient-Monitoring.yaml

Lines changed: 428 additions & 0 deletions
Large diffs are not rendered by default.

education-ai-suite/smart-classroom/docs/user-guide/index.md

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -32,10 +32,10 @@ The main features are as follows:
3232
:::{toctree}
3333
:hidden:
3434
35-
get-started
36-
how-it-works
37-
application-flow
38-
release-notes
35+
./get-started
36+
./how-it-works
37+
./application-flow
38+
Release Notes <./release-notes>
3939
4040
:::
4141
hide_directive-->
Lines changed: 39 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -1,25 +1,51 @@
1-
# Release Notes
1+
# Release Notes: Smart Classroom
22

3-
## Release EAS-2025.2.2
3+
## Version 2026.0
4+
5+
**April 1, 2026**
6+
7+
The Smart Classroom application now offers a series after-class summary enhancements in the form of next‑generation real-time audio and visual analytics, giving teachers and schools a better understanding of classroom dynamics through AI‑driven summaries and engagement metrics.
8+
9+
The Education AI Suite now also includes built-in telemetry hooks and benchmarking.
410

511
**New**
612

7-
- Video Pipeline Integration:
8-
- Real-time video processing for classroom monitoring.
9-
- Bounding boxes and pose estimation for teachers and students.
10-
- **Room View Tab**: Displays live classroom video with captions and engagement metrics.
11-
- **Board Captures Tab**: Chronological snapshots of smart board content.
12-
- **Mind Map Tab**: Keyword-indexed graph of class content for visual learning.
13-
- **Class Engagement Panel**: Video-based engagement scoring for students
13+
- **Speaker Diarization** (via the Audio Pipeline):
14+
- identifies teacher and student speakers using NPU-accelerated diarization
15+
- generates an interactive audio timeline for replay and analysis
16+
- enables time-coded navigation within class video recordings
1417

15-
## Release EAS-2025.2.0
18+
- **Class Engagement Metrics – Audio**:
19+
- measure teacher and student speech duration
20+
- track questions asked and answered
21+
- track student-teacher interaction frequency
1622

17-
This is the first release of Intel® Education AI Suite EAS-2025.2.
23+
- **Class Engagement Metrics – Video**:
24+
- track student hand raises
25+
- track posture changes (stand up/sit down)
26+
- track teacher movement
1827

19-
**New**
28+
- **Built‑in telemetry** to measure classroom workloads across Intel platforms (CPU core utilization, iGPU load, NPU load, memory usage, workload-specific performance counters)
29+
30+
- **Benchmarking scripts** to reproduce Intel internal performance measurements, and validate XPU performance
31+
32+
**Improved**
2033

21-
In this release, the **Smart Classroom** application is added. It is an extensible framework for processing, analyzing, and summarizing classroom sessions using advanced multimodal AI.
34+
- **Knowledge Graph UI** readability and formatting, and increased clarity when visualizing topic relationships
2235

2336
## Documentation and Source Code
2437

2538
- [GitHub](https://github.com/open-edge-platform/edge-ai-suites/tree/main/education-ai-suite)
39+
40+
## Previous releases
41+
42+
- [Release notes 2025](./release-notes/release-notes-2025.md)
43+
44+
<!--hide_directive
45+
:::{toctree}
46+
:hidden:
47+
48+
Release Notes 2025 <./release-notes/release-notes-2025.md>
49+
50+
:::
51+
hide_directive-->
Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,25 @@
1+
# Release Notes: Smart Classroom 2025
2+
3+
## Release EAS-2025.2.2
4+
5+
**New**
6+
7+
- Video Pipeline Integration:
8+
- Real-time video processing for classroom monitoring.
9+
- Bounding boxes and pose estimation for teachers and students.
10+
- **Room View Tab**: Displays live classroom video with captions and engagement metrics.
11+
- **Board Captures Tab**: Chronological snapshots of smart board content.
12+
- **Mind Map Tab**: Keyword-indexed graph of class content for visual learning.
13+
- **Class Engagement Panel**: Video-based engagement scoring for students
14+
15+
## Release EAS-2025.2.0
16+
17+
This is the first release of Intel® Education AI Suite EAS-2025.2.
18+
19+
**New**
20+
21+
In this release, the **Smart Classroom** application is added. It is an extensible framework for processing, analyzing, and summarizing classroom sessions using advanced multimodal AI.
22+
23+
## Documentation and Source Code
24+
25+
- [GitHub](https://github.com/open-edge-platform/edge-ai-suites/tree/main/education-ai-suite)

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: 85 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -1,29 +1,78 @@
1-
# Health AI Suite – Helm Deployment
1+
# Multi modal patient monitoring – Helm Deployment
22

3-
This Helm chart deploys the **Health & Life Sciences AI Suite** on Kubernetes.
3+
This Helm chart deploys the **Multi modal patient monitoring app** on Kubernetes.
44

55

66
## Prerequisites
77

88
- Kubernetes cluster (Minikube / Kind / Bare-metal)
99
- `kubectl`
1010
- `helm` (v3+)
11-
- Docker images built locally
11+
- A working PersistentVolume provisioner (required for PVC binding)
1212

13-
## Required Docker Images
13+
### Storage prerequisite (required)
1414

15-
The following images **must exist locally** before deploying the Helm chart.
15+
This chart creates PVCs (`models-pvc`, `videos-pvc`, `health-ai-assets-pvc`) and expects your
16+
cluster to provide PersistentVolumes through a StorageClass.
17+
18+
If your cluster has no dynamic provisioner, PVCs will remain `Pending` and workloads will not
19+
schedule.
20+
21+
- For single-node/local clusters, install a dynamic provisioner (for example,
22+
`local-path-provisioner`) before installing this chart.
23+
- Or pre-create matching static PersistentVolumes for all claims.
24+
25+
> `local-path-provisioner` does **not** support `ReadWriteMany`.
26+
> Use `ReadWriteOnce` (this chart default) unless you use a RWX-capable storage backend.
27+
28+
## Optional: Proxy configuration
29+
30+
Configure Proxy Settings (If behind a proxy)
31+
32+
If you are deploying in a proxy environment, also update the proxy settings in the same values.yaml file:
33+
```bash
34+
http_proxy: "http://your-proxy-server:port"
35+
https_proxy: "http://your-proxy-server:port"
36+
no_proxy: "localhost,127.0.0.1,.local,.cluster.local"
37+
```
38+
Replace your-proxy-server:port with your actual proxy server details.
39+
40+
41+
Set via CLI if needed:
42+
43+
```bash
44+
--set assets.proxy.enabled=true \
45+
--set assets.proxy.httpProxy=http://your-proxy-server:port\
46+
--set assets.proxy.httpsProxy=http://your-proxy-server:port\
47+
--set assets.proxy.noProxy=localhost,127.0.0.1,.svc,.cluster.local
48+
```
49+
50+
## Setup Storage Provisioner (For Single-Node Clusters)
51+
Check if your cluster has a default storage class with dynamic provisioning. If not, install a storage provisioner:
1652

17-
Check available images:
1853
```bash
19-
docker images | grep intel/hl-ai
54+
# Check for existing storage classes
55+
kubectl get storageclass
56+
57+
# If no storage classes exist or none are marked as default, install local-path-provisioner
58+
# This step is typically needed for single-node bare Kubernetes installations
59+
# (Managed clusters like EKS/GKE/AKS already have storage classes configured)
60+
61+
# Install local-path-provisioner for automatic storage provisioning
62+
kubectl apply -f https://raw.githubusercontent.com/rancher/local-path-provisioner/master/deploy/local-path-storage.yaml
63+
64+
# Set it as default storage class
65+
kubectl patch storageclass local-path -p '{"metadata": {"annotations":{"storageclass.kubernetes.io/is-default-class":"true"}}}'
66+
67+
# Verify storage class is ready
68+
kubectl get storageclass
2069
```
2170

2271

2372
## Install
2473

2574
```bash
26-
cd health-and-life-sciences-ai-suite/helm/multi_modal_patient_monitoring
75+
cd health-and-life-sciences-ai-suite/multi_modal_patient_monitoring/helm/multi_modal_patient_monitoring
2776

2877
helm install multi-modal-patient-monitoring . \
2978
--namespace multi-modal-patient-monitoring \
@@ -53,7 +102,7 @@ kubectl get svc -n multi-modal-patient-monitoring
53102

54103
## Check Logs (recommended)
55104
```bash
56-
kubectl logs -n multi-modal-patient-monitoringi deploy/mdpnp
105+
kubectl logs -n multi-modal-patient-monitoring deploy/mdpnp
57106
kubectl logs -n multi-modal-patient-monitoring deploy/dds-bridge
58107
kubectl logs -n multi-modal-patient-monitoring deploy/aggregator
59108
kubectl logs -n multi-modal-patient-monitoring deploy/ai-ecg
@@ -70,7 +119,9 @@ Healthy services will show:
70119

71120

72121
## Access the Frontend UI
73-
Check Ingress resource:
122+
### 1. Check the Ingress Resource
123+
124+
Run the following command to view the ingress configuration:
74125

75126
```bash
76127
kubectl get ingress -n multi-modal-patient-monitoring
@@ -82,24 +133,42 @@ Example output:
82133
NAME HOSTS PATHS ADDRESS PORTS
83134
multi-modal-patient-monitoring multi-modal-patient-monitoring.local / xx.xx.xx.xx 80
84135
```
136+
### 2. If an IP Address Appears in ADDRESS
85137

86-
Add an entry on your Linux host (replace <IP> with the one you found):
138+
Add the hostname mapping to your local machine:
87139
```bash
88140
echo "<IP> multi-modal-patient-monitoring.local" | sudo tee -a /etc/hosts
89141
```
142+
Replace <IP> with the value shown in the ADDRESS column.
143+
144+
### 3. If the ADDRESS Field is Empty (Common in Minikube)
145+
Some local Kubernetes environments (such as Minikube) do not automatically populate the ingress IP.
146+
147+
Retrieve the Minikube cluster IP:
148+
```bash
149+
minikube ip
150+
```
151+
Then map the hostname to the IP:
152+
```bash
153+
echo "$(minikube ip) multi-modal-patient-monitoring.local" | sudo tee -a /etc/hosts
154+
```
90155

91-
Open your browser and go to:
156+
### 4. Enable Ingress in Minikube (if not already enabled)
157+
```bash
158+
minikube addons enable ingress
159+
```
160+
Wait a few moments for the ingress controller to start.
161+
162+
### 5.Open the Application
163+
Open your browser and navigate to:
92164
```bash
93165
http://<host-or-ip>/
94166
```
95167
Example:
96168
```bash
97169
http://multi-modal-patient-monitoring.local/
98170
```
99-
If using Minikube, you may need to enable the ingress addon:
100-
```bash
101-
minikube addons enable ingress
102-
```
171+
103172
This will open the Health AI Suite frontend dashboard.
104173

105174
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

0 commit comments

Comments
 (0)