MuFASA#
A framework for rapid prototyping of geospatial sensor fusion systems. MuFASA turns the design of a multimodal fusion system into an explicit, executable graph.
The Fusion Graph#
MuFASA interprets a fusion system as a Fusion Graph: a directed acyclic graph that starts at Input nodes and ends at Output nodes. You compose it functionally by calling each node on its inputs, and nodes connect wherever their data types match. Learn more about the concept in the User Guide.
from mufasa import Graph, BoundingBox
from mufasa.io.inputs import GeoJsonInput
from mufasa.io.outputs import GeoJsonOutput
from mufasa.nodes import StaticMap, POM, BayesianFusion, Threshold
# Input nodes
track_a = GeoJsonInput("sensor_a.geojson")
track_b = GeoJsonInput("sensor_b.geojson")
static = StaticMap("priors.geojson")
# Processing nodes
pom_a = POM(decay_s=5)(track_a)
pom_b = POM(decay_s=1)(track_b)
fused = BayesianFusion()(pom_a, pom_b, static)
alarms = Threshold(threshold=0.7)(fused)
# Output nodes
out = GeoJsonOutput("alarms.geojson")(alarms)
# Fusion Graph
bbox = BoundingBox(48.268, 16.426, 48.27, 16.4275)
graph = Graph(inputs=[track_a, track_b], outputs=[out],
crs="EPSG:32639", bbox=bbox, resolution=(10, 10))
graph.run()
Find your way through the docs#
New to MuFASA
Getting started walks you through installing MuFASA and running your first Fusion Graph. The User Guide explains the core concepts: Locations, Maps, Nodes and Graphs.
Evaluating for your domain
The Showcases show MuFASA in controlled real-world environments. The Node Catalog lists the nodes and data types you can build with.
Building your system
The User Guide covers custom nodes and live deployment. The API Reference documents every class and parameter.