99
1010import boto3
1111import lib .core as constances
12+ from lib .core .conditions import Condition
13+ from lib .core .conditions import CONDITION_EQ as EQ
1214from lib .core .data_handlers import ChainedAnnotationHandlers
1315from lib .core .data_handlers import DocumentTagHandler
1416from lib .core .data_handlers import LastActionHandler
@@ -494,14 +496,18 @@ def __init__(
494496 reporter : Reporter ,
495497 project : ProjectEntity ,
496498 folder : FolderEntity ,
499+ images : BaseManageableRepository ,
497500 item_names : Optional [List [str ]],
498- backend_service_provider : SuerannotateServiceProvider
501+ backend_service_provider : SuerannotateServiceProvider ,
502+ show_process : bool = True
499503 ):
500504 super ().__init__ (reporter )
501505 self ._project = project
502506 self ._folder = folder
507+ self ._images = images
503508 self ._item_names = item_names
504509 self ._client = backend_service_provider
510+ self ._show_process = show_process
505511
506512 def validate_item_names (self ):
507513 if self ._item_names :
@@ -512,15 +518,36 @@ def validate_item_names(self):
512518 f"Dropping duplicates. Found { len_unique_items } /{ len_items } unique items."
513519 )
514520 self ._item_names = item_names
521+ else :
522+ condition = (
523+ Condition ("team_id" , self ._project .team_id , EQ )
524+ & Condition ("project_id" , self ._project .uuid , EQ )
525+ & Condition ("folder_id" , self ._folder .uuid , EQ )
526+ )
527+
528+ self ._item_names = [item .name for item in self ._images .get_all (condition )]
515529
516530 def execute (self ):
517- annotations = self ._client .get_annotations (
518- team_id = self ._project .team_id ,
519- project_id = self ._project .uuid ,
520- folder_id = self ._folder .uuid ,
521- items = self ._item_names
522- )
523- self ._response .data = annotations
531+ if self .is_valid ():
532+ items_count = len (self ._item_names )
533+ self .reporter .log_info (
534+ f"Getting { items_count } annotations from "
535+ f"{ self ._project .name } { f'/{ self ._folder .name } ' if self ._folder else '' } ."
536+ )
537+ self .reporter .start_progress (items_count , disable = not self ._show_process )
538+ annotations = self ._client .get_annotations (
539+ team_id = self ._project .team_id ,
540+ project_id = self ._project .uuid ,
541+ folder_id = self ._folder .uuid ,
542+ items = self ._item_names ,
543+ reporter = self .reporter
544+ )
545+ received_items_count = len (annotations )
546+ if items_count > received_items_count :
547+ self .reporter .log_warning (
548+ f"Could not find annotations for { items_count - received_items_count } /{ items_count } items."
549+ )
550+ self ._response .data = annotations
524551 return self ._response
525552
526553
@@ -530,13 +557,15 @@ def __init__(
530557 reporter : Reporter ,
531558 project : ProjectEntity ,
532559 folder : FolderEntity ,
560+ images : BaseManageableRepository ,
533561 video_name : str ,
534562 fps : int ,
535563 backend_service_provider : SuerannotateServiceProvider
536564 ):
537565 super ().__init__ (reporter )
538566 self ._project = project
539567 self ._folder = folder
568+ self ._images = images
540569 self ._video_name = video_name
541570 self ._fps = fps
542571 self ._client = backend_service_provider
@@ -546,17 +575,21 @@ def execute(self):
546575 reporter = self .reporter ,
547576 project = self ._project ,
548577 folder = self ._folder ,
578+ images = self ._images ,
549579 item_names = [self ._video_name ],
550- backend_service_provider = self ._client
580+ backend_service_provider = self ._client ,
581+ show_process = False
551582 ).execute ()
583+ generator = VideoFrameGenerator (response .data [0 ], fps = self ._fps )
584+ self .reporter .log_info (f"Getting annotations for { generator .frames_count } frames from { self ._video_name } ." )
552585 if response .errors :
553586 self ._response .errors = response .errors
554587 return self ._response
555588 if not response .data :
556589 self ._response .errors = AppException (f"Video { self ._video_name } not found." )
557590 annotations = response .data
558591 if annotations :
559- self ._response .data = list (VideoFrameGenerator ( response . data [ 0 ], fps = self . _fps ) )
592+ self ._response .data = list (generator )
560593 else :
561594 self ._response .data = []
562595 return self ._response
0 commit comments