# 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 ```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://.openai.azure.com/", 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 - **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