def capture_frame(self):
     """ Método chamado pela Thread para capturar o frame. Sempre retorna uma imagem no padrão OpenCV (ndarray).
 
 Se _is_working for true e a webcam atual é valida, captura um frame. 
 Caso contrário, retorna uma imagem padrão setada para preto.
 """
     if (self.is_working() and self.is_valid()):
         return self._do_capture()
     return ImagePack.black_image()
 def get_image(self):
   """ Retorna a imagem atualmente em foco do projeto.
   
   A imagem pode ser tanto a de um upload feito pelo usuário ou o frame atual da webcam.
   A imagem retornada está no formato jpeg e contêm o retângulo desenhado pelo usuário (caso exista).
   """
   try:
     if(self.uploaded_frame.is_valid()):
       copy = self.uploaded_frame.get_copy()
     else:
       copy = self.captured_frame.get_copy()
     return self.draw_and_convert_frame(copy)
   except:
     return ImagePack.encode_to_jpg(ImagePack.black_image())
 def _do_capture(self):
     """ Método que efetivamente faz a captura do frame. Sempre retorna uma imagem no padrão OpenCV (ndarray). """
     with self.lock_video:
         success, frame = self.video_capture.read()
     self.set_working_state(success)
     return frame if success else ImagePack.black_image()