Skip to content

Commit

Permalink
buffered reader for binary files
Browse files Browse the repository at this point in the history
  • Loading branch information
EliCDavis committed Jan 12, 2024
1 parent f4917a5 commit db6169d
Show file tree
Hide file tree
Showing 6 changed files with 66 additions and 20 deletions.
12 changes: 10 additions & 2 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,14 @@

Structs for interacting with reconstruction data from different SFM programs

* COLMAP
* Cameras
* Points
* OpenSFM
* reconstruction.json
* Meshroom
* cameras.sfm

## COLMAP

### Point Data
Expand All @@ -18,7 +26,7 @@ import (
)

func main() {
points, err := colmap.ReadPoints3DBinary("ColmapProject/sparse/0/points3D.bin")
points, err := colmap.LoadPoints3DBinary("ColmapProject/sparse/0/points3D.bin")
if err != nil {
panic(err)
}
Expand All @@ -42,7 +50,7 @@ import (
)

func main() {
cameras, err := colmap.ReadCamerasBinary("ColmapProject/sparse/0/cameras.bin")
cameras, err := colmap.LoadCamerasBinary("ColmapProject/sparse/0/cameras.bin")
if err != nil {
panic(err)
}
Expand Down
22 changes: 14 additions & 8 deletions colmap/cameras.go
Original file line number Diff line number Diff line change
@@ -1,8 +1,10 @@
package colmap

import (
"bufio"
"encoding/binary"
"fmt"
"io"
"os"

"github.com/EliCDavis/bitlib"
Expand Down Expand Up @@ -70,14 +72,8 @@ type Camera struct {
Params []float64
}

func ReadCamerasBinary(filename string) ([]Camera, error) {
f, err := os.Open(filename)
if err != nil {
return nil, err
}
defer f.Close()

reader := bitlib.NewReader(f, binary.LittleEndian)
func ReadCamerasBinary(in io.Reader) ([]Camera, error) {
reader := bitlib.NewReader(in, binary.LittleEndian)

numCameras := reader.UInt64()
cameras := make([]Camera, numCameras)
Expand All @@ -101,3 +97,13 @@ func ReadCamerasBinary(filename string) ([]Camera, error) {

return cameras, reader.Error()
}

func LoadCamerasBinary(filename string) ([]Camera, error) {
f, err := os.Open(filename)
if err != nil {
return nil, err
}
defer f.Close()

return ReadCamerasBinary(bufio.NewReader(f))
}
22 changes: 14 additions & 8 deletions colmap/points.go
Original file line number Diff line number Diff line change
@@ -1,8 +1,10 @@
package colmap

import (
"bufio"
"encoding/binary"
"image/color"
"io"
"os"

"github.com/EliCDavis/bitlib"
Expand All @@ -26,14 +28,8 @@ type Point3D struct {
Tracks []Point3DTrack // as (IMAGE_ID, POINT2D_IDX)
}

func ReadPoints3DBinary(filename string) ([]Point3D, error) {
f, err := os.Open(filename)
if err != nil {
return nil, err
}
defer f.Close()

reader := bitlib.NewReader(f, binary.LittleEndian)
func ReadPoints3DBinary(in io.Reader) ([]Point3D, error) {
reader := bitlib.NewReader(in, binary.LittleEndian)

numPoints := reader.UInt64()
points := make([]Point3D, numPoints)
Expand Down Expand Up @@ -71,3 +67,13 @@ func ReadPoints3DBinary(filename string) ([]Point3D, error) {

return points, reader.Error()
}

func LoadPoints3DBinary(filename string) ([]Point3D, error) {
f, err := os.Open(filename)
if err != nil {
return nil, err
}
defer f.Close()

return ReadPoints3DBinary(bufio.NewReader(f))
}
10 changes: 9 additions & 1 deletion meshroom/camera.go
Original file line number Diff line number Diff line change
@@ -1,6 +1,10 @@
package meshroom

import "github.com/EliCDavis/sfm"
import (
"io"

"github.com/EliCDavis/sfm"
)

type Version []string

Expand Down Expand Up @@ -62,6 +66,10 @@ type Cameras struct {
Poses []Pose `json:"poses"`
}

func ReadCameras(in io.Reader) (Cameras, error) {
return sfm.ReadJSON[Cameras](in)
}

func LoadCameras(filename string) (Cameras, error) {
return sfm.LoadJSONFile[Cameras](filename)
}
10 changes: 9 additions & 1 deletion opensfm/reconstruction.go
Original file line number Diff line number Diff line change
@@ -1,6 +1,10 @@
package opensfm

import "github.com/EliCDavis/sfm"
import (
"io"

"github.com/EliCDavis/sfm"
)

// ReconstructionJson represents the reconstruction.json output by OpenSFM
type ReconstructionJsonSchema []ReconstructionSchema
Expand Down Expand Up @@ -61,6 +65,10 @@ type ReferenceLLA struct {
Altitude float64 `json:"altitude"`
}

func ReadReconstruction(in io.Reader) (ReconstructionJsonSchema, error) {
return sfm.ReadJSON[ReconstructionJsonSchema](in)
}

func LoadReconstruction(filename string) (ReconstructionJsonSchema, error) {
return sfm.LoadJSONFile[ReconstructionJsonSchema](filename)
}
10 changes: 10 additions & 0 deletions util.go
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,7 @@ package sfm

import (
"encoding/json"
"io"
"os"
)

Expand All @@ -13,3 +14,12 @@ func LoadJSONFile[T any](filename string) (T, error) {
}
return data, json.Unmarshal(fileData, &data)
}

func ReadJSON[T any](in io.Reader) (T, error) {
var data T
fileData, err := io.ReadAll(in)
if err != nil {
return data, err
}
return data, json.Unmarshal(fileData, &data)
}

0 comments on commit db6169d

Please sign in to comment.