> ## Documentation Index
> Fetch the complete documentation index at: https://docs.dwe.ai/llms.txt
> Use this file to discover all available pages before exploring further.

# Lese DWVO-opptak

> Spill av, eksporter og parse .dwvo-opptak med Python og OpenCV.

<div style={{ marginTop: '-40px' }} />

<Tooltip tip="DeepWater Video Object">`.dwvo`</Tooltip> er vår container for opptak fra flere kameraer, som produseres når du gjør opptak i Discovery. Nyttelasten er MJPEG, så hver bilderamme i filen er allerede en fullstendig JPEG — avspilling er en enkelt `cv2.imdecode`, og eksport er en byte-kopi uten ny koding eller kvalitetstap.

<Card title="Ta opp DWVO i Discovery" icon="video" href="/no/discovery/misc/dwvo-support" horizontal>
  Ny til DWVO? Start her for å strømme og ta opp `.dwvo`-filer.
</Card>

```
DWE.ai | header: nCameras, width, height, pixelFormat, fps | ext data
block:   uint32 timestamp | per camera: busID\0, uint32 length, JPEG bytes
block:   ...
```

## Forutsetninger

* Python (versjon 3.x)
* `opencv-python`, `numpy` og `pillow`
* Et `.dwvo`-opptak — eksemplene nedenfor bruker `test.dwvo`

## Oppsett

Klon OpenCV Guides-repositoriet og åpne mappen for denne guiden, opprett deretter et virtuelt miljø og installer avhengighetene:

<CodeGroup>
  ```bash macOS / Linux theme={null}
  git clone https://github.com/DeepWaterExploration/opencv-guides.git
  cd opencv-guides/4-dwvo-read/python

  python3 -m venv venv
  source venv/bin/activate
  pip install -r requirements.txt
  ```

  ```bash Windows theme={null}
  git clone https://github.com/DeepWaterExploration/opencv-guides.git
  cd opencv-guides\4-dwvo-read\python

  python3 -m venv venv
  venv\Scripts\activate
  pip install -r requirements.txt
  ```
</CodeGroup>

## Avspilling

`main.py` dekoder hvert kamera og viser dem side ved side i ett OpenCV-vindu.

```bash theme={null}
python main.py test.dwvo
python main.py test.dwvo --fps 60 --loop
```

| Argument / tast |                                                             |
| --------------- | ----------------------------------------------------------- |
| `--fps N`       | Avspillingshastighet. Standard er fps-verdien fra headeren. |
| `--loop`        | Start på nytt når filen er slutt.                           |
| `space`         | Pause / gjenoppta.                                          |
| `q` / `esc`     | Avslutt.                                                    |

<Note>
  Avspilling er forankret til en fast tidsplan: hvis dekoding ligger en hel bilderamme bak, forkastes den rammen i stedet for å vises for sent, slik at videoen holder veggklokke-hastighet.
</Note>

## Eksport til JPEG

Fordi DWVO allerede lagrer MJPEG, kopierer `export.py` hver bilderamme rett til disk — ingen dekoding, intet kvalitetstap.

```bash theme={null}
python export.py file.dwvo output-folder

# behold hver femte bilderamme
python export.py file.dwvo output-folder --step 5
```

| Argument          |                                                                              |
| ----------------- | ---------------------------------------------------------------------------- |
| `--step N`        | Behold hver N-te bilderamme.                                                 |
| `--start-frame N` | Første utdataindeks, for å fortsette nummereringen fra en tidligere sekvens. |

Utdata er én mappe per kamera, nummerert i KITTI-stil:

```
out/
  image_0/000000.jpg, 000001.jpg, ...
  image_1/000000.jpg, 000001.jpg, ...
  times.txt
```

## Tapsfri PNG (KITTI-datasett)

`dwvo_to_kitti.py` produserer samme oppsett, men dekoder gjennom Pillow slik at den kan skrive ut tapsfri PNG. Bruk den når et etterfølgende verktøy ikke godtar JPEG; ellers er `export.py` raskere.

```bash theme={null}
python dwvo_to_kitti.py test.dwvo out          # PNG
python dwvo_to_kitti.py test.dwvo out --jpeg   # samme null-kopi JPEG som export.py
```

## Lese DWVO programmatisk

I `dwvo.py` itererer `DWVOReader` gjennom tidsstempelblokker, `DWVOWriter` skriver dem, og `combine_dwvos()` slår sammen opptak som deler samme header.

```python theme={null}
from pathlib import Path
from dwvo import DWVOReader

with DWVOReader(Path("test.dwvo")) as reader:
    print(reader.header.n_cameras, reader.header.width, reader.header.height)
    for block in reader.iter_blocks():
        for frame in block.video_frames:   # one per camera
            frame.bus_id, frame.data       # "0" / "1", raw JPEG bytes
```

## FAQ

<AccordionGroup>
  <Accordion title="Hvorfor er videoen tregere enn det jeg tok opp?">
    I Discovery krever noen kameraer at FPS settes manuelt. Hvis den var satt til 30 FPS mens videoen ble strømmet med 60 FPS, registrerer `.dwvo`-filen 30 FPS i metadataen og ber applikasjoner om å lese med 30 FPS. Overstyr det ved avspilling med `--fps`.
  </Accordion>
</AccordionGroup>

## Mer informasjon

For ytterligere detaljer, eksempler på andre språk, og fullstendig kildekode for skriptene ovenfor, se OpenCV Guides-repositoriet.

<Card title="OpenCV Guides-repositorium" icon="Github" href="https://github.com/DeepWaterExploration/opencv-guides">
  Kildekode for DWVO-leser, avspilling, eksport og KITTI-konvertering.
</Card>
