Reference files, test fixtures, the playground demo project and one design document now use generic, fictitious examples (buildings, energy, water, grants, municipal services). The playground demo (17 fixtures plus the embedded demo state) tells one consistent story: a municipal customer chatbot that pre-screens housing-benefit applications, classified under Annex III point 5(a). The embedded demo copies were edited in place rather than regenerated, because they already carry newer AI Act dates than the fixture files. Legal text is unchanged. Test semantics are unchanged. Four dark-theme onboarding screenshots with outdated placeholder text are removed. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
391 lines
14 KiB
Markdown
391 lines
14 KiB
Markdown
# Video Analysis and Understanding Patterns
|
|
|
|
**Last updated:** 2026-02
|
|
**Status:** GA
|
|
**Category:** Multi-Modal AI
|
|
**Type:** reference
|
|
|
|
---
|
|
|
|
## Innhold
|
|
|
|
- [Introduksjon](#introduksjon)
|
|
- [Kjernekomponentar](#kjernekomponentar)
|
|
- [Scene- og Action Detection](#scene--og-action-detection)
|
|
- [Temporal Understanding og Summarization](#temporal-understanding-og-summarization)
|
|
- [Multi-Frame Analysis Strategies](#multi-frame-analysis-strategies)
|
|
- [Integrasjon med Narrative Understanding](#integrasjon-med-narrative-understanding)
|
|
- [Norsk offentleg sektor](#norsk-offentleg-sektor)
|
|
- [Beslutningsrammeverk](#beslutningsrammeverk)
|
|
- [For arkitekten](#for-arkitekten)
|
|
|
|
## Introduksjon
|
|
|
|
Videoanalyse og -forståing på Azure-plattforma kombinerer Azure AI Video Indexer sin spesialiserte videoanalyse med generative AI-modellar som GPT-4o for djupare semantisk forståing. Video Indexer ekstraherer over 30 ulike typar innsikt frå video — inkludert scenedeteksjon, talegjenkjenning, emosjonanalyse, OCR, ansiktsgjenkjenning og objektdeteksjon — medan GPT-4o sine visuelle kapabilitetar opnar for fri-form analyse av enkeltbilete og keyframes.
|
|
|
|
For norsk offentleg sektor er videoanalyse relevant for fleire bruksområde: analyse av overvakingsvideo for Direktoratet for digital tjenesteutvikling, transkripsjon og søk i offentlege høyringar for Stortinget, tilgjengelegheitsanalyse av offentleg video, og automatisert kvalitetskontroll av opplæringsvideo. Azure Video Indexer støttar norsk tale-til-tekst og kan oversette til 50+ språk.
|
|
|
|
Azure AI Video Indexer tilbyr også real-time videoanalyse (preview) via Azure Arc-enabled infrastruktur, som mogleggjer sanntidsanalyse av livevideo ved kanten — relevant for anleggsovervaking og smart byinfrastruktur.
|
|
|
|
---
|
|
|
|
## Kjernekomponentar
|
|
|
|
| Komponent | Formål | Teknologi |
|
|
|-----------|--------|-----------|
|
|
| **Video Indexer** | Heilskapleg videoanalyse med 30+ innsiktstypar | Azure AI Video Indexer |
|
|
| **Scene Detection** | Identifiserer sceneovergangar basert på visuelle signal | Video Indexer AI |
|
|
| **Shot Detection** | Identifiserer kameraskift og redigeringsovergangar | Video Indexer AI |
|
|
| **Keyframe Extraction** | Vel representative bilete frå kvar shot | Video Indexer AI |
|
|
| **GPT-4o Vision** | Fri-form analyse av enkeltbilete frå video | Azure OpenAI |
|
|
| **Real-time Analysis** | Sanntids videoanalyse ved kanten | Video Indexer on Arc |
|
|
| **Spatial Analysis** | Persondeteksjon og bevegelsesanalyse | Azure AI Vision |
|
|
|
|
---
|
|
|
|
## Scene- og Action Detection
|
|
|
|
### Video Indexer Scene Detection
|
|
|
|
Scene detection identifiserer når ein scene endrar seg basert på visuelle signal. Ein scene representerer ei enkelt hending og består av ein serie relaterte shots.
|
|
|
|
| Innsiktstype | Beskriving |
|
|
|--------------|-----------|
|
|
| **Scenes** | Semantisk relaterte sekvenser av shots |
|
|
| **Shots** | Samanhengande biletesekvens frå same kamera |
|
|
| **Keyframes** | Mest representative bilde frå kvar shot |
|
|
| **Editorial Shot Type** | Wide, medium, close-up, extreme close-up, two-shot |
|
|
| **Observed People** | Persondeteksjon med bounding boxes |
|
|
| **Matched Person** | Kopling mellom observerte personar og ansikt |
|
|
| **Detected Clothing** | Klestype-identifisering knytt til personar |
|
|
|
|
### Indeksering med avanserte innstillingar
|
|
|
|
```python
|
|
import requests
|
|
|
|
def index_video_advanced(account_id, access_token, video_url, video_name):
|
|
"""Indekser video med full suite av innsikter."""
|
|
|
|
base_url = "https://api.videoindexer.ai"
|
|
|
|
response = requests.post(
|
|
f"{base_url}/{account_id}/Videos",
|
|
params={
|
|
"accessToken": access_token,
|
|
"name": video_name,
|
|
"videoUrl": video_url,
|
|
"language": "nb-NO",
|
|
"indexingPreset": "AdvancedVideo",
|
|
"streamingPreset": "Default",
|
|
"sendSuccessEmail": True,
|
|
"priority": "Normal"
|
|
}
|
|
)
|
|
|
|
video_id = response.json()["id"]
|
|
return video_id
|
|
```
|
|
|
|
### Indexing Presets
|
|
|
|
| Preset | Innsikter | Bruksscenario |
|
|
|--------|-----------|---------------|
|
|
| **Basic** | Transkripsjon, OCR, scener, keyframes | Enkel søkbarheit |
|
|
| **Standard** | Basic + emosjonar, nøkkelord, personar, sentiment | Innhaldsanalyse |
|
|
| **Advanced** | Standard + kledningsdeteksjon, audioeffektar, matched person | Full analyse |
|
|
| **Audio only** | Transkripsjon, sentimentanalyse, nøkkelord | Podcast/lydinnhald |
|
|
|
|
---
|
|
|
|
## Temporal Understanding og Summarization
|
|
|
|
### Tidslinje-basert forståing
|
|
|
|
Video Indexer gir tidsstempla innsikter som muliggjer temporal forståing:
|
|
|
|
```python
|
|
def get_video_timeline(account_id, video_id, access_token):
|
|
"""Hent tidslinje-baserte innsikter frå video."""
|
|
|
|
base_url = "https://api.videoindexer.ai"
|
|
|
|
response = requests.get(
|
|
f"{base_url}/{account_id}/Videos/{video_id}/Index",
|
|
params={
|
|
"accessToken": access_token,
|
|
"includeSummarizedInsights": True
|
|
}
|
|
)
|
|
|
|
insights = response.json()
|
|
|
|
# Scenetidslinje
|
|
scenes = insights["videos"][0]["insights"]["scenes"]
|
|
for scene in scenes:
|
|
print(f"Scene {scene['id']}: "
|
|
f"{format_time(scene['instances'][0]['start'])} - "
|
|
f"{format_time(scene['instances'][0]['end'])}")
|
|
|
|
# Shots i denne scena
|
|
for shot in scene.get("shots", []):
|
|
for keyframe in shot.get("keyFrames", []):
|
|
print(f" Keyframe: {format_time(keyframe['instances'][0]['start'])}")
|
|
|
|
# Emosjonell tidslinje
|
|
sentiments = insights["videos"][0]["insights"]["sentiments"]
|
|
for sentiment in sentiments:
|
|
print(f"Sentiment: {sentiment['sentimentType']} "
|
|
f"(score: {sentiment['averageScore']:.2f})")
|
|
for instance in sentiment["instances"]:
|
|
print(f" {format_time(instance['start'])} - "
|
|
f"{format_time(instance['end'])}")
|
|
|
|
return insights
|
|
```
|
|
|
|
### AI-driven Video Summarization
|
|
|
|
Video Indexer tilbyr oppsummeringsfunksjonalitet for opptil 6-timars segment:
|
|
|
|
```python
|
|
def summarize_video_segment(account_id, video_id, access_token,
|
|
focus_on="", camera_description=""):
|
|
"""Generer AI-oppsummering av eit videosegment."""
|
|
|
|
summary_config = {
|
|
"focus_on": focus_on, # Kva type hendingar å fokusere på
|
|
"camera_description": camera_description # Kamerakontekst
|
|
}
|
|
|
|
# Oppsummeringa består av:
|
|
# 1. Overordna oversikt — generell beskriving av aktivitetar
|
|
# 2. Highlights — spesifikke hendingar med tidsstempel
|
|
|
|
return summary_config
|
|
```
|
|
|
|
### GPT-4o Keyframe Analysis
|
|
|
|
For djupare semantisk forståing, analyser keyframes med GPT-4o:
|
|
|
|
```python
|
|
from openai import AzureOpenAI
|
|
|
|
def analyze_keyframes_with_gpt4o(keyframe_urls, video_context):
|
|
"""Analyser keyframes frå video med GPT-4o for narrativ forståing."""
|
|
|
|
client = AzureOpenAI(
|
|
azure_endpoint="https://<resource>.openai.azure.com/",
|
|
api_key="<api-key>",
|
|
api_version="2024-08-01-preview"
|
|
)
|
|
|
|
# Bygg bildeinnhald frå keyframes
|
|
image_content = []
|
|
for i, url in enumerate(keyframe_urls):
|
|
image_content.append({
|
|
"type": "text",
|
|
"text": f"Keyframe {i+1}:"
|
|
})
|
|
image_content.append({
|
|
"type": "image_url",
|
|
"image_url": {"url": url, "detail": "high"}
|
|
})
|
|
|
|
response = client.chat.completions.create(
|
|
model="gpt-4o",
|
|
messages=[
|
|
{
|
|
"role": "system",
|
|
"content": (
|
|
"Du analyserer keyframes frå ein video. "
|
|
"Beskriv handlinga over tid, identifiser personar, "
|
|
"stad og kontekst. Gje ein temporal forståing av "
|
|
"kva som skjer i videoen basert på desse bileta."
|
|
)
|
|
},
|
|
{
|
|
"role": "user",
|
|
"content": [
|
|
{"type": "text", "text": f"Kontekst: {video_context}"},
|
|
*image_content,
|
|
{"type": "text", "text": "Analyser handlinga i videoen basert på keyframes."}
|
|
]
|
|
}
|
|
],
|
|
max_tokens=1000
|
|
)
|
|
|
|
return response.choices[0].message.content
|
|
```
|
|
|
|
---
|
|
|
|
## Multi-Frame Analysis Strategies
|
|
|
|
### Strategi 1: Uniform Sampling
|
|
|
|
```python
|
|
def uniform_sample_frames(total_frames, num_samples=10):
|
|
"""Vel jamlikt fordelte frames for analyse."""
|
|
interval = total_frames // num_samples
|
|
return [i * interval for i in range(num_samples)]
|
|
```
|
|
|
|
### Strategi 2: Keyframe-basert Sampling
|
|
|
|
Bruk Video Indexer sine keyframes som er algoritmisk valde for å representere kvar shot:
|
|
|
|
```python
|
|
def get_keyframes_for_analysis(video_insights):
|
|
"""Hent keyframes valde av Video Indexer."""
|
|
keyframes = []
|
|
for scene in video_insights["scenes"]:
|
|
for shot in scene.get("shots", []):
|
|
for kf in shot.get("keyFrames", []):
|
|
keyframes.append({
|
|
"timestamp": kf["instances"][0]["start"],
|
|
"thumbnail_id": kf["instances"][0]["thumbnailId"],
|
|
"scene_id": scene["id"],
|
|
"shot_id": shot["id"]
|
|
})
|
|
return keyframes
|
|
```
|
|
|
|
### Strategi 3: Change-Detection Sampling
|
|
|
|
Fokuser på frames der visuell endring er størst:
|
|
|
|
```python
|
|
def change_detection_sampling(frames, threshold=0.3):
|
|
"""Vel frames basert på visuell endring."""
|
|
selected = [frames[0]]
|
|
|
|
for i in range(1, len(frames)):
|
|
similarity = compute_visual_similarity(frames[i-1], frames[i])
|
|
if similarity < (1 - threshold):
|
|
selected.append(frames[i])
|
|
|
|
return selected
|
|
```
|
|
|
|
### Strategi 4: Event-driven Sampling
|
|
|
|
Bruk Video Indexer-innsikter til å fokusere på interessante hendingar:
|
|
|
|
```python
|
|
def event_driven_sampling(video_insights, event_types=None):
|
|
"""Vel frames rundt spesifikke hendingstypar."""
|
|
event_types = event_types or ["people", "emotions", "labels"]
|
|
|
|
event_frames = []
|
|
for event_type in event_types:
|
|
events = video_insights.get(event_type, [])
|
|
for event in events:
|
|
for instance in event.get("instances", []):
|
|
event_frames.append({
|
|
"timestamp": instance["start"],
|
|
"event_type": event_type,
|
|
"confidence": instance.get("confidence", 0)
|
|
})
|
|
|
|
# Sorter etter confidence og dedupliser
|
|
event_frames.sort(key=lambda x: x["confidence"], reverse=True)
|
|
return deduplicate_by_proximity(event_frames, min_gap_seconds=2)
|
|
```
|
|
|
|
---
|
|
|
|
## Integrasjon med Narrative Understanding
|
|
|
|
### Heilskapleg videoforståingspipeline
|
|
|
|
```
|
|
Video Input
|
|
|
|
|
├── Video Indexer
|
|
| ├── Transkripsjon (tale → tekst)
|
|
| ├── Scene/Shot/Keyframe-deteksjon
|
|
| ├── Persondeteksjon og -gjenkjenning
|
|
| ├── OCR (tekst i video)
|
|
| ├── Emosjonanalyse
|
|
| └── Nøkkelord og emneanalyse
|
|
|
|
|
├── GPT-4o Keyframe Analysis
|
|
| ├── Scene-beskriving
|
|
| ├── Handling-identifisering
|
|
| └── Kontekstuell tolking
|
|
|
|
|
└── Narrative Synthesis
|
|
├── Kronologisk samandrag
|
|
├── Hovudtema identifisering
|
|
├── Nøkkelhendingar med tidsstempel
|
|
└── Sentiment-boge over tid
|
|
```
|
|
|
|
### Audio Insights
|
|
|
|
Video Indexer ekstraherer rike audio-innsikter:
|
|
|
|
| Innsikt | Beskriving |
|
|
|---------|-----------|
|
|
| **Audio Effects** | Latter, folkemengd-reaksjonar, alarmar, sirener |
|
|
| **Keywords** | Viktige nøkkelord frå transkripsjon |
|
|
| **Named Entities** | Stadnamn, personnamn, merkevarar |
|
|
| **Emotions** | Sinne, frykt, glede, tristheit per tekstsegment |
|
|
| **Topics** | Emne-inferering frå transkripsjon og OCR |
|
|
| **Speakers** | Talar-identifisering og -diarisering |
|
|
|
|
---
|
|
|
|
## Norsk offentleg sektor
|
|
|
|
### Bruksscenario
|
|
|
|
- **Direktoratet for digital tjenesteutvikling**: Søkbar indeksering av opplæringsvideoar
|
|
- **Stortinget**: Søkbar indeksering av høyringar og debattar
|
|
- **NRK**: Automatisk underteksting og innhaldsklassifisering
|
|
- **Kommunar**: Analyse av bystyremøte med talar-identifisering
|
|
|
|
### Personvern og etikk
|
|
|
|
| Aspekt | Tiltak |
|
|
|--------|--------|
|
|
| **Ansiktsgjenkjenning** | Krev samtykke eller lovheimel i Noreg |
|
|
| **Overvaking** | Regulert av personopplysningslova og arbeidsmiljølova |
|
|
| **Lagring** | Video-innsikter lagra i EU med GDPR-etterleving |
|
|
| **Transparens** | Informer om automatisert videoanalyse |
|
|
| **Dataminimering** | Bruk berre nødvendige innsiktstypar |
|
|
|
|
### Real-time analyse ved kanten
|
|
|
|
For bruksscenario som krev sanntidsanalyse utan skyavhengigheit:
|
|
|
|
- **Azure AI Video Indexer on Arc** — Deploy på Azure Local eller Kubernetes
|
|
- **Custom OV Insights** — Eigendefinerte objektdeteksjonar utan koding
|
|
- **Persondeteksjon** — Bounding boxes utan ansiktsidentifisering
|
|
- **Oppsummering** — Automatisk oppsummering av 6-timars segment
|
|
|
|
---
|
|
|
|
## Beslutningsrammeverk
|
|
|
|
| Scenario | Anbefaling | Begrunnelse |
|
|
|----------|------------|-------------|
|
|
| Søkbar videoarkivering | Video Indexer Standard preset | Transkripsjon + nøkkelord + scener |
|
|
| Detaljert innhaldsanalyse | Video Indexer Advanced + GPT-4o | Full analyse + semantisk forståing |
|
|
| Sanntids anleggsovervaking | Video Indexer on Arc | Edge-basert, låg latency |
|
|
| Videotilgjengelegheit | Video Indexer + Azure Speech TTS | Undertekstar + lydbeskrivingar |
|
|
| Enkel persondeteksjon | Azure AI Vision Spatial Analysis | Lågare kostnad for basisk analyse |
|
|
| Narrativ videoforståing | Keyframe sampling + GPT-4o | Temporal kontekst + semantikk |
|
|
|
|
---
|
|
|
|
## For arkitekten
|
|
|
|
- **Azure AI Video Indexer** gir 30+ innsiktstypar i ein enkelt API — bruk Standard preset for dei fleste bruksscenario, Advanced for full analyse med kledningsdeteksjon og audioeffektar
|
|
- **Scene → Shot → Keyframe-hierarkiet** er fundamentalt for temporal forståing — scener er semantiske einingar, shots er kamera-einingar, keyframes er representative stillbilete
|
|
- **GPT-4o keyframe analysis** utfyller Video Indexer for djupare semantisk forståing — send 5-10 keyframes med kontekst for narrativ analyse av videoinnhald
|
|
- **Real-time Video Indexer on Arc** (preview) mogleggjer edge-basert sanntidsanalyse — relevant for anleggsovervaking og smart byinfrastruktur i norsk offentleg sektor
|
|
- **Audio insights** (emosjonar, nøkkelord, talarar) kombinert med visuelle innsikter gir heilskapleg videoforståing — bruk dette for søkbar arkivering av offentlege høyringar og møte
|