in backend/model_garden/management/commands/process_task_statuses.py [0:0]
def _upload_labeling_task_annotations(self, labeling_task: LabelingTask):
dataset = labeling_task.media_assets.first().dataset
annotation_frmt = self._get_annotations_format(dataset)
try:
annotations_content_zip = self._cvat_service.get_annotations(
task_id=labeling_task.task_id,
task_name=labeling_task.name,
annotation_format=annotation_frmt,
)
except Exception as e:
raise Exception(f"Failed to get task annotations: {e}")
zip_fp = BytesIO(annotations_content_zip)
zf = ZipFile(file=zip_fp)
annotation_filenames = {
os.path.split(zi.filename)[-1]: zf.open(zi) for zi in zf.filelist if
zi.filename.startswith(self._get_cvat_zip_folderpath(annotation_frmt))
}
media_assets = labeling_task.media_assets.all()
media_assets_filenames = {
f"{os.path.splitext(media_asset.filename)[0]}" + self._get_label_file_extension(annotation_frmt) for media_asset
in media_assets}
logger.info(media_assets_filenames)
logger.info(annotation_filenames)
if len(annotation_filenames) == 0:
raise NoAnnotationException(f"Missing all task annotations for task :{str(labeling_task.task_id)}")
for media_asset in media_assets:
try:
asset_filename = os.path.splitext(media_asset.filename)[0]
bucket_name = media_asset.dataset.bucket.name
s3_client = S3Client(bucket_name=bucket_name)
labeling_file_name = f"{asset_filename}" + self._get_label_file_extension(annotation_frmt)
if labeling_file_name in annotation_filenames:
file_object = annotation_filenames[f"{asset_filename}" + self._get_label_file_extension(annotation_frmt)]
# TODO:remove deprecated remote_label_path property
media_asset.labeling_asset_filepath = media_asset.remote_label_path
s3_client.upload_file_obj(
file_obj=file_object,
bucket=bucket_name,
key=media_asset.full_label_path,
)
media_asset.save()
logger.info(f"Uploaded annotation '{media_asset.full_label_path}'")
except Exception as e:
raise Exception(f"Failed to upload task annotations: {e}")