Ordre 20260912T193441Z-7358817909. Steg 1 var ikke transformen, men å rette
roadmapens R13-gate og få den ratifisert. Gaten `grep -rl "Cosmo"
skills/*/references -> 0` var usann på to uavhengige måter:
1. Ordren fanget den første: 451 av forekomstene er Azure Cosmos DB, ekte
produktinnhold. Diskriminatoren er ikke bokstaven «s» — `Cosmos <norsk
substantiv>` er genitiv av personaen (`### Cosmos tonalitet`), mens
`Cosmos DB`/`CosmosClient`/`cosmos_ru` er produkt.
2. Denne økten fant den andre: 132 persona-forekomster ligger i prosa,
tabeller, dialog-replikker og proveniens-linjer. Heading-nøytralisering
kan ikke nå dem, så «0 persona» er uoppnåelig også under den ratifiserte
formen. Operatøren ratifiserte alternativ A: gaten speiler formen, og de
132 bokføres til R13b/R14.
Tre korreksjoner av premisser som sto i ordren og STATE:
«ca 320 produkt» -> 451 (case-sensitivt nett manglet 327 lowercase
TOC-ankre + 99 identifikatorer; sann nevner 1 638)
«169 headinger» -> 401. 169 var `^## For Cosmo`-prefikset (168) og var
internt inkonsistent med sin egen topp-variant (204)
«417 matcher ingen
populasjon» -> 417 er cosmo-headinger utenfor kodefences; briefens
nevner var reell hele tiden
Fence-bevissthet er målt skadelig, ikke nødvendig: begge toggle-regler er
gale på dette korpuset (naiv toggle skjuler en ekte heading i
chain-of-thought-prompting.md, CommonMark-regelen ubalanserer
service-level-documentation-dr.md). Fence-agnostisk deteksjon finner 401
heading-linjer i nøyaktig de samme 40 variantene som fence-bevisst finner
400 i — ingen kodeblokk-linje er byte-identisk til en persona-heading. Derfor
nøkles transformen på 40 enumererte heading-tekster og ignorerer fences. En
ukjent variant kaster; en slug-kollisjon kaster. Ingenting auto-fikses.
TOC-en regenereres ikke, den rettes kirurgisk: alle 327 persona-lenker hadde
lenketekst lik én av de 40 heading-tekstene og anker lik slugify av den
(327/327, 0 avvik), så heading og TOC-entry skrives i samme operasjon og
ingen mellomtilstand etterlater en død lenke.
Ratifisert målform: `For Cosmo`, `For Cosmo Skyberg` og `For arkitekten
(Cosmo)` konvergerer på `For arkitekten`. To filer kolliderte og er adjudisert
ved å lese dem, ikke ved regel.
Verifisering (alle 7 kriterier fra ordren):
G1 persona på heading-linjer 401 -> 0
G2 døde fragmentlenker 1 -> 1 (pre-eksisterende, unntatt)
G3 produkt-forekomster 451 -> 451; `Cosmos DB|Azure Cosmos` 308 = 308
de 3 kun-produkt-filene byte-identiske
nettet validert begge veier injisert persona feller G1; genitiv feller G1;
produkt-heading og de 3 filene passerer
hele diffen 802 heading-linjer + 654 TOC-linjer, ANNET = 0
linjeantall 728 lagt til = 728 slettet
suite 1120/1120 (1097 + 23 nye)
validate-plugin 250 PASS / 0 FAIL
stikkprøve 10 filer, alle 5 skills, inkl. de 3 mest
produkt-tunge (26/20/19) — kun heading+TOC
Utenfor scope, urørt: de 4 SKILL.md, de 23 commands, CLAUDE.md, README.md,
NOTICE.md, docs/ (alt R14).
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
399 lines
14 KiB
Markdown
399 lines
14 KiB
Markdown
# Azure Video Indexer for Enterprise AI
|
|
|
|
**Last updated:** 2026-02
|
|
**Status:** GA
|
|
**Category:** Multi-Modal AI
|
|
**Type:** reference
|
|
|
|
---
|
|
|
|
## Innhold
|
|
|
|
- [Introduksjon](#introduksjon)
|
|
- [Video Ingestion og Processing Workflows](#video-ingestion-og-processing-workflows)
|
|
- [Face, Speech og Content Detection](#face-speech-og-content-detection)
|
|
- [Knowledge Graph Construction frå Video](#knowledge-graph-construction-frå-video)
|
|
- [Integrasjon med AI Services](#integrasjon-med-ai-services)
|
|
- [Brukstilfelle for norsk offentleg sektor](#brukstilfelle-for-norsk-offentleg-sektor)
|
|
- [For arkitekten](#for-arkitekten)
|
|
|
|
## Introduksjon
|
|
|
|
Azure AI Video Indexer er ein omfattande AI-teneste som ekstraherer djupe innsikter frå video- og lydinnhald. Tenesta køyrer over 30 AI-modellar for å analysere visuelt og auditivt innhald, inkludert transkripsjon, ansiktsdeteksjon, objektgjenkjenning, sentimentanalyse, emneekstraksjon og mykje meir. Video Indexer er bygd på toppen av Azure AI-tenester som Speech, Vision, Translator og Face.
|
|
|
|
For norsk offentleg sektor er Video Indexer relevant for fleire scenario: arkivdigitalisering av historisk videomateriale, automatisk teksting av offentleg informasjonsmateriell, innhaldsmoderering, søk i store mediearkiv og tilgjengelegheit gjennom transkribering. Tenesta er tilgjengeleg både som skybasert løysing og som Azure Arc-utviding for edge-deployment.
|
|
|
|
Video Indexer tilbyr to hovudvariantar: ein skybasert applikasjon med fullt funksjonssett, og Video Indexer enabled by Azure Arc for hybrid- og edge-scenario med støtte for live videostraumar og lokale krav til datasuverenitet.
|
|
|
|
---
|
|
|
|
## Video Ingestion og Processing Workflows
|
|
|
|
### Arkitektur og prosesseringsflyt
|
|
|
|
```
|
|
Videofil/Lydsfil → Upload API → Azure Storage
|
|
↓
|
|
Indexing Pipeline
|
|
┌─────────────────┐
|
|
│ Audio-analyse │
|
|
│ - Transkripsjon │
|
|
│ - Taledeteksjon │
|
|
│ - Lydeffektar │
|
|
├─────────────────┤
|
|
│ Video-analyse │
|
|
│ - Ansiktsdeteksjon│
|
|
│ - OCR │
|
|
│ - Scenedeteksjon │
|
|
│ - Objektdeteksjon│
|
|
├─────────────────┤
|
|
│ Multi-channel │
|
|
│ - Nøkkelord │
|
|
│ - Emner │
|
|
│ - Sentiment │
|
|
│ - Named entities │
|
|
└─────────────────┘
|
|
↓
|
|
JSON Insights Output
|
|
↓
|
|
Azure Storage / Azure Search / API
|
|
```
|
|
|
|
### Deployment-alternativ
|
|
|
|
| Eigenskap | Cloud-basert | Azure Arc (Uploaded) | Azure Arc (Live) |
|
|
|-----------|-------------|---------------------|-----------------|
|
|
| **Transkripsjon** | Ja | Ja | Nei |
|
|
| **Omsetting** | Ja | Ja | Nei |
|
|
| **Keyframe-deteksjon** | Ja | Ja | Ja |
|
|
| **Objektdeteksjon** | Ja | Ja | Ja |
|
|
| **Scenedeteksjon** | Ja | Ja | Ja |
|
|
| **Oppsummering** | Ja | Ja | Ja |
|
|
| **Ansiktsdeteksjon** | Ja | Nei | Nei |
|
|
| **Kjendisidentifisering** | Ja | Nei | Nei |
|
|
| **OCR** | Ja | Nei | Nei |
|
|
| **Sentimentanalyse** | Ja | Nei | Nei |
|
|
| **Live video** | Nei | Nei | Ja |
|
|
| **Tilpassa AI-innsikter** | Nei | Nei | Ja |
|
|
|
|
### Filavgrensingar
|
|
|
|
| Parameter | Verdi |
|
|
|-----------|-------|
|
|
| **Maks filstorleik** | 30 GB |
|
|
| **Maks videolengde** | 4 timar |
|
|
| **Tilrådde FPS** | Maks 30 FPS |
|
|
| **Tilrådde oppløysing** | HD (maks) |
|
|
| **Maks personar per frame** | 10 |
|
|
| **Minimum tale for analyse** | 1 minutt spontan samtale |
|
|
|
|
### Upload og indexering via API
|
|
|
|
```python
|
|
import requests
|
|
|
|
account_id = "<your_account_id>"
|
|
location = "norwayeast"
|
|
access_token = "<your_access_token>"
|
|
|
|
# Last opp og start indexering
|
|
upload_url = (
|
|
f"https://api.videoindexer.ai/{location}/Accounts/{account_id}"
|
|
f"/Videos?name=kommunestyremote-2026&language=nb-NO"
|
|
f"&indexingPreset=AdvancedAudio"
|
|
f"&accessToken={access_token}"
|
|
)
|
|
|
|
with open("kommunestyremote.mp4", "rb") as video_file:
|
|
response = requests.post(
|
|
upload_url,
|
|
files={"file": video_file},
|
|
headers={"Content-Type": "multipart/form-data"}
|
|
)
|
|
|
|
video_id = response.json()["id"]
|
|
print(f"Video ID: {video_id} — Status: {response.json()['state']}")
|
|
```
|
|
|
|
### Indexering-presets
|
|
|
|
| Preset | Brukstilfelle | Inkluderte modellar |
|
|
|--------|--------------|-------------------|
|
|
| **Default** | Standard analyse | Grunnleggjande video + audio |
|
|
| **AdvancedAudio** | Møtetranskripsjoner, podkastar | Full audio-analyse inkl. lydeffektar |
|
|
| **AdvancedVideo** | Visuell analyse, overvaking | Full video-analyse |
|
|
| **AdvancedVideoAndAudio** | Komplett analyse | Alle modellar aktivert |
|
|
| **BasicAudio** | Rask transkripsjon | Berre transkripsjon og omsetting |
|
|
|
|
---
|
|
|
|
## Face, Speech og Content Detection
|
|
|
|
### Ansikts- og persondeteksjon
|
|
|
|
Video Indexer tilbyr eit hierarki av ansikts- og personrelaterte innsikter:
|
|
|
|
| Funksjon | Forklaring | Avgrensa tilgang? |
|
|
|----------|-----------|------------------|
|
|
| **Face detection** | Detekterer og grupperer ansikt i video | Nei |
|
|
| **Celebrity identification** | Identifiserer 1M+ kjende personar | Nei |
|
|
| **Account-based face identification** | Trenar modell for spesifikke personar | Ja (søknad krevst) |
|
|
| **Observed people detection** | Detekterer personar med bounding boxes | Nei |
|
|
| **Matched person** | Koplar observerte personar med ansikt | Nei |
|
|
| **Detected clothing** | Klassifiserer klede (lang/kort erme, etc.) | Nei |
|
|
| **Thumbnail extraction** | Ekstraherer beste ansiktsbilde per person | Nei |
|
|
|
|
> **Viktig for offentleg sektor:** Ansiktsidentifisering (account-based) krev godkjenning og må brukast i samsvar med personopplysningslova og DPIA-krav.
|
|
|
|
### Talebaserte innsikter
|
|
|
|
| Funksjon | Detaljar |
|
|
|----------|---------|
|
|
| **Transkripsjon** | Automatisk tale-til-tekst med språkdeteksjon |
|
|
| **Talarenummerering** | Identifiserer kven som sa kva (maks 16 talarar) |
|
|
| **Talarstatistikk** | Prosentfordeling av taletid |
|
|
| **Omsetting** | Automatisk omsetting til mange språk |
|
|
| **Tekstbasert emosjonsdeteksjon** | Glede, tristheit, sinne, frykt frå transkripsjon |
|
|
| **Tekstmoderering** | Deteksjon av eksplisitt tekstinnhald |
|
|
| **Tilpassa transkripsjon (CRIS)** | Trenar bransjespesifikke talemodular |
|
|
| **Lydeffektdeteksjon** | Alarm, hundebjeffing, publikumsreaksjonar, skot, latter |
|
|
|
|
### OCR og visuell tekstgjenkjenning
|
|
|
|
Video Indexer ekstraherer tekst frå bilete og video gjennom OCR:
|
|
|
|
```json
|
|
{
|
|
"id": 1,
|
|
"text": "Direktoratet for digital tjenesteutvikling",
|
|
"confidence": 0.95,
|
|
"left": 120,
|
|
"top": 50,
|
|
"width": 340,
|
|
"height": 45,
|
|
"language": "nb",
|
|
"instances": [
|
|
{
|
|
"adjustedStart": "0:00:05.12",
|
|
"adjustedEnd": "0:00:12.45",
|
|
"start": "0:00:05.12",
|
|
"end": "0:00:12.45"
|
|
}
|
|
]
|
|
}
|
|
```
|
|
|
|
### Innhaldsmoderering
|
|
|
|
| Type | Kva blir detektert |
|
|
|------|-------------------|
|
|
| **Visuell moderering** | Vaksent og upassande visuelt innhald |
|
|
| **Tekstmoderering** | Eksplisitt innhald i transkripsjon |
|
|
| **Svart frame** | Svarte frames (indikerer redigering/overgangar) |
|
|
|
|
---
|
|
|
|
## Knowledge Graph Construction frå Video
|
|
|
|
### Emne- og entitetsekstraksjon
|
|
|
|
Video Indexer bygger ein kunnskapsgraf frå videoinnhald gjennom fleire lag av analyse:
|
|
|
|
**Lag 1: Basisdatasett**
|
|
- Transkripsjon (tale → tekst)
|
|
- OCR (visuell tekst)
|
|
- Ansikt og personar
|
|
|
|
**Lag 2: Semantisk anriking**
|
|
- Nøkkelord (frå tale og visuell tekst)
|
|
- Named entities (merkevarar, stader, personar)
|
|
- Emner (basert på IPTC, Wikipedia, VI-ontologi)
|
|
|
|
**Lag 3: Strukturell analyse**
|
|
- Scenedeteksjon (basert på visuelle endringar)
|
|
- Shot detection (kamerabytter)
|
|
- Keyframe-ekstraksjon
|
|
- Rullande credits-identifisering
|
|
|
|
### Emne-inference med hierarkisk ontologi
|
|
|
|
Video Indexer brukar tre ontologiar for emneinferens:
|
|
|
|
| Ontologi | Bruk | Eksempel |
|
|
|----------|------|---------|
|
|
| **IPTC** | International Press Telecommunications Council | Økonomi, Sport, Politikk |
|
|
| **Wikipedia** | Encyclopedisk kategorisering | Spesifikke teknologiar, stader |
|
|
| **VI Hierarchical** | Video Indexer sin eiga ontologi | Bransjespesifikke emne |
|
|
|
|
```json
|
|
{
|
|
"topics": [
|
|
{
|
|
"id": 1,
|
|
"name": "Vegtrafikk",
|
|
"referenceId": "Transport/Vegtrafikk",
|
|
"referenceType": "VideoIndexer",
|
|
"confidence": 0.89,
|
|
"language": "nb-NO",
|
|
"instances": [
|
|
{
|
|
"adjustedStart": "0:02:15",
|
|
"adjustedEnd": "0:05:30"
|
|
}
|
|
]
|
|
}
|
|
]
|
|
}
|
|
```
|
|
|
|
### Sentimentanalyse
|
|
|
|
Video Indexer utfører sentimentanalyse som kombinerer tale og visuell tekst:
|
|
|
|
| Sentiment | Skala | Brukstilfelle |
|
|
|-----------|-------|--------------|
|
|
| Positivt | 0.0 - 1.0 | Brukaropplevingsevaluering |
|
|
| Negativt | 0.0 - 1.0 | Klagebehandling, krisekommunikasjon |
|
|
| Nøytralt | 0.0 - 1.0 | Bakgrunnsinnhald |
|
|
|
|
---
|
|
|
|
## Integrasjon med AI Services
|
|
|
|
### Logic Apps og Power Automate
|
|
|
|
Video Indexer integrerer med serverless-tenester for automatiserte arbeidsflyttar:
|
|
|
|
**Flyt 1: Upload og indexering**
|
|
```
|
|
Blob Storage trigger → Video Indexer Upload → Callback URL
|
|
```
|
|
|
|
**Flyt 2: Insights-ekstraksjon**
|
|
```
|
|
HTTP trigger (callback) → Get Video Index → Save to Blob/Cosmos DB
|
|
```
|
|
|
|
```json
|
|
{
|
|
"definition": {
|
|
"triggers": {
|
|
"When_a_blob_is_added_or_modified": {
|
|
"type": "ApiConnection",
|
|
"inputs": {
|
|
"host": { "connection": { "name": "@parameters('$connections')['azureblob']['connectionId']" } },
|
|
"method": "get",
|
|
"path": "/datasets/default/triggers/batch/onupdatedfile"
|
|
}
|
|
}
|
|
},
|
|
"actions": {
|
|
"Upload_video_and_index": {
|
|
"type": "ApiConnection",
|
|
"inputs": {
|
|
"host": { "connection": { "name": "@parameters('$connections')['videoindexer-v2']['connectionId']" } },
|
|
"method": "post",
|
|
"path": "/northeurope/Accounts/{accountId}/Videos",
|
|
"queries": {
|
|
"name": "@triggerBody()?['Name']",
|
|
"videoUrl": "@triggerBody()?['WebUrl']",
|
|
"language": "nb-NO",
|
|
"callbackUrl": "@listCallbackUrl()"
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
```
|
|
|
|
### Azure AI Search-integrasjon
|
|
|
|
Video Indexer-innsikter kan indekserast i Azure AI Search for djupt søk:
|
|
|
|
| Indeksfelt | Kjelde | Søketype |
|
|
|-----------|--------|---------|
|
|
| `transcript` | Tale-til-tekst | Fulltekst |
|
|
| `keywords` | Nøkkelordekstraksjon | Filtrering/fasettert |
|
|
| `faces` | Ansiktsdeteksjon | Filtrering |
|
|
| `topics` | Emneinferens | Fasettert søk |
|
|
| `namedEntities` | NLP-ekstraksjon | Fulltekst + filtrering |
|
|
| `ocr` | Visuell tekst | Fulltekst |
|
|
| `sentiments` | Sentimentanalyse | Range-filtrering |
|
|
|
|
### Azure Functions for hendingsbasert prosessering
|
|
|
|
```python
|
|
import azure.functions as func
|
|
import requests
|
|
import json
|
|
|
|
def main(msg: func.QueueMessage) -> None:
|
|
"""Process Video Indexer callback."""
|
|
message = json.loads(msg.get_body().decode('utf-8'))
|
|
video_id = message['id']
|
|
account_id = os.environ['VIDEO_INDEXER_ACCOUNT_ID']
|
|
location = os.environ['VIDEO_INDEXER_LOCATION']
|
|
|
|
# Hent innsikter
|
|
insights_url = (
|
|
f"https://api.videoindexer.ai/{location}/Accounts/{account_id}"
|
|
f"/Videos/{video_id}/Index"
|
|
)
|
|
|
|
response = requests.get(
|
|
insights_url,
|
|
headers={"Authorization": f"Bearer {get_access_token()}"}
|
|
)
|
|
|
|
insights = response.json()
|
|
|
|
# Prosesser for downstream-system
|
|
process_transcription(insights.get('videos', [{}])[0].get('insights', {}).get('transcript', []))
|
|
process_topics(insights.get('videos', [{}])[0].get('insights', {}).get('topics', []))
|
|
```
|
|
|
|
### Edge-deployment med Azure Arc
|
|
|
|
For norsk offentleg sektor med strenge krav til datalokalitet:
|
|
|
|
| Funksjon | Fordel for offentleg sektor |
|
|
|----------|---------------------------|
|
|
| **On-premises prosessering** | Data forlèt ikkje organisasjonen |
|
|
| **Live videoanalyse** | Sanntidsovervaking av infrastruktur |
|
|
| **Tilpassa AI-innsikter** | Definer eigne deteksjonsreglar |
|
|
| **Kubernetes-kompatibel** | Fleksibel infrastruktur |
|
|
|
|
---
|
|
|
|
## Brukstilfelle for norsk offentleg sektor
|
|
|
|
### Arkivdigitalisering
|
|
|
|
| Steg | Verktøy | Output |
|
|
|------|---------|--------|
|
|
| 1. Digitalisering | Skanning/digitalisering | Videofiler |
|
|
| 2. Indexering | Video Indexer (AdvancedVideoAndAudio) | JSON-innsikter |
|
|
| 3. Transkripsjon | Automatisk med norsk språkmodell | Tekst med tidskoder |
|
|
| 4. Søkbarheit | Azure AI Search | Fulltekst + semantisk søk |
|
|
| 5. Tilgjengelegheit | Automatisk teksting | WebVTT/SRT-filer |
|
|
|
|
### Kommunestyremøte-automatisering
|
|
|
|
```
|
|
Live-stream → Azure Arc Video Indexer → Sanntids-transkripsjon
|
|
→ Talaridentifisering
|
|
→ Emnedeteksjon
|
|
→ Automatisk teksting
|
|
→ Søkbart arkiv
|
|
```
|
|
|
|
---
|
|
|
|
## For arkitekten
|
|
|
|
- **Video Indexer køyrer 30+ AI-modellar** per video, inkludert transkripsjon, ansiktsdeteksjon, OCR, sentimentanalyse og emneekstraksjon. Vurder kva preset som gir best verdi for pengane basert på brukstilfellet.
|
|
- **Azure Arc-varianten er avgjerande for datasuverenitet** i norsk offentleg sektor. Live videoanalyse køyrer lokalt, medan full indexering kan gjerast hybrid.
|
|
- **Ansiktsidentifisering krev godkjenning** og må alltid kombinerast med DPIA i offentleg sektor. Bruk anonymisering der mogleg.
|
|
- **Integrer med Logic Apps / Power Automate** for automatiserte arkiverings- og publiseringsflyttar. Callback-URL-mønsteret gir asynkron prosessering utan polling.
|
|
- **Kombiner med Azure AI Search for djupt søk** i store videoarkiv. Indekser transkripsjon, nøkkelord, emner og named entities for å gjere møtereferat og opplysingsmateriell søkbart.
|