def update_exif(filepath: str, data: dict):
"""
Write the exif data to the image at filepath.
"""
img_dims = cv2.imread(filepath).shape
e = piexif.load(filepath) # read any existing metadata
lat = dms(data["lat"], ("N", "S"))
lon = dms(data["lon"], ("E", "W"))
# image dimensions
e["0th"][piexif.ImageIFD.ImageWidth] = img_dims[1]
e["0th"][piexif.ImageIFD.ImageLength] = img_dims[0]
# gps
e["GPS"][piexif.GPSIFD.GPSVersionID] = (2, 0, 0, 0)
e["GPS"][piexif.GPSIFD.GPSLatitude] = lat[:3]
e["GPS"][piexif.GPSIFD.GPSLatitudeRef] = lat[3]
e["GPS"][piexif.GPSIFD.GPSLongitude] = lon[:3]
e["GPS"][piexif.GPSIFD.GPSLongitudeRef] = lon[3]
e["GPS"][piexif.GPSIFD.GPSAltitude] = rational(data["alt"], 100)
e["GPS"][piexif.GPSIFD.GPSAltitudeRef] = 0
# focal length
e["Exif"][piexif.ExifIFD.FocalLength] = rational(data["focal"], 10)
exif_bytes = piexif.dump(e) # new metadata to bytes
piexif.insert(exif_bytes, filepath) # write to file