in opensfm/report.py [0:0]
def make_gps_details(self) -> None:
self._make_section("GPS/GCP Errors Details")
# GPS
for error_type in ["gps", "gcp"]:
rows = []
columns_names = [error_type.upper(), "Mean", "Sigma", "RMS Error"]
if "average_error" not in self.stats[error_type + "_errors"]:
continue
for comp in ["x", "y", "z"]:
row = [comp.upper() + " Error (meters)"]
row.append(f"{self.stats[error_type + '_errors']['mean'][comp]:.3f}")
row.append(f"{self.stats[error_type +'_errors']['std'][comp]:.3f}")
row.append(f"{self.stats[error_type +'_errors']['error'][comp]:.3f}")
rows.append(row)
rows.append(
[
"Total",
"",
"",
f"{self.stats[error_type +'_errors']['average_error']:.3f}",
]
)
self._make_table(columns_names, rows)
self.pdf.set_xy(self.margin, self.pdf.get_y() + self.margin / 2)
rows = []
columns_names = [
"GPS Bias",
"Scale",
"Translation",
"Rotation",
]
for camera, params in self.stats["camera_errors"].items():
bias = params["bias"]
s, t, R = bias["scale"], bias["translation"], bias["rotation"]
rows.append(
[
camera,
f"{s:.2f}",
f"{t[0]:.2f} {t[1]:.2f} {t[2]:.2f}",
f"{R[0]:.2f} {R[1]:.2f} {R[2]:.2f}",
]
)
self._make_table(columns_names, rows)
self.pdf.set_xy(self.margin, self.pdf.get_y() + self.margin / 2)