an eink camera running on an rpi zero 2 w
1#!/usr/bin/env -S nix shell --impure nixpkgs#ffmpeg nixpkgs#colmap nixpkgs#opencv4 --command bash
2
3set -euo pipefail
4
5# Define paths
6INPUT_VIDEO="data/input.mov"
7FRAMES_DIR="data/frames"
8COLMAP_DB="data/colmap.db"
9SPARSE_DIR="data/sparse"
10DENSE_DIR="data/dense"
11
12# Create directories
13mkdir -p "$FRAMES_DIR" "$SPARSE_DIR" "$DENSE_DIR"
14
15# Step 1: Extract frames from video
16echo "Extracting frames from video..."
17ffmpeg -i "$INPUT_VIDEO" -q:v 1 "$FRAMES_DIR/frame_%04d.jpg"
18
19# Step 2: Run COLMAP feature extraction (CPU only)
20echo "Running COLMAP feature extraction..."
21colmap feature_extractor \
22 --database_path "$COLMAP_DB" \
23 --image_path "$FRAMES_DIR" \
24 --ImageReader.camera_model SIMPLE_RADIAL \
25 --SiftExtraction.use_gpu 0
26
27# Step 3: Run COLMAP feature matching (CPU only)
28echo "Running COLMAP feature matching..."
29colmap exhaustive_matcher \
30 --database_path "$COLMAP_DB" \
31 --SiftMatching.use_gpu 0
32
33# Step 4: Run COLMAP sparse reconstruction
34echo "Running COLMAP sparse reconstruction..."
35colmap mapper \
36 --database_path "$COLMAP_DB" \
37 --image_path "$FRAMES_DIR" \
38 --output_path "$SPARSE_DIR"
39
40# Step 5: Run COLMAP dense reconstruction
41echo "Running COLMAP image undistorter..."
42colmap image_undistorter \
43 --image_path "$FRAMES_DIR" \
44 --input_path "$SPARSE_DIR/0" \
45 --output_path "$DENSE_DIR"
46
47echo "Running COLMAP patch matching (CPU only)..."
48colmap patch_match_stereo \
49 --workspace_path "$DENSE_DIR" \
50 --PatchMatchStereo.gpu_index -1
51
52echo "Running COLMAP stereo fusion..."
53colmap stereo_fusion \
54 --workspace_path "$DENSE_DIR" \
55 --output_path "$DENSE_DIR/fused.ply"
56
57# Output camera pose information for dithering
58echo "Extracting camera pose information..."
59colmap model_converter \
60 --input_path "$SPARSE_DIR/0" \
61 --output_path "$SPARSE_DIR/txt" \
62 --output_type TXT
63
64echo "COLMAP processing complete!"
65echo "Camera poses are in: $SPARSE_DIR/txt/images.txt"
66echo "Point cloud is in: $DENSE_DIR/fused.ply"
67
68echo "Script completed successfully"