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