Initial addition of ms-ai-architect plugin to the open-source marketplace. Private content excluded: orchestrator/ (Linear tooling), docs/utredning/ (client investigation), generated test reports and PDF export script. skill-gen tooling moved from orchestrator/ to scripts/skill-gen/. Security scan: WARNING (risk 20/100) — no secrets, no injection found. False positive fixed: added gitleaks:allow to Python variable reference in output-validation-grounding-verification.md line 109. Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
14 KiB
Video Analysis and Understanding Patterns
Last updated: 2026-02 Status: GA Category: Multi-Modal AI
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 Statens vegvesen, 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 trafikkmonitorering 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
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:
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:
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:
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
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:
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:
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:
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
- Statens vegvesen: Trafikkvideoanalyse for hendingsdeteksjon og trafikkflyt
- 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 trafikkmonitorering | 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 Cosmo
- 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 trafikkmonitorering 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