an eink camera running on an rpi zero 2 w
at main 2.0 kB view raw
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"