Exemplo n.º 1
0
 def _received_existing_images(self, message: Message):
     self.outbox_queue.put(
         Message(ProcessManager.OutboxTypes.EXISTING_IMAGES, content=message.content)
     )
     self.to_image_crawler_queue.put(
         Message(
             Crawler.InboxTypes.SET_EXISTING_IMAGES,
             content=[image.path for image in message.content]
         )
     )
     self._send_images_for_analysis(message.content)
     self._send_faces_for_analysis(message.content)
Exemplo n.º 2
0
 def _handle_message(self, message):
     if message.descriptor == ImageStore.InboxTypes.GET_EXISTING_IMAGES:
         images = [
             Image.from_datamodel(image)
             for image in self.ImageTable.get_all_images()
         ]
         return Message(ImageStore.OutboxTypes.EXISTING_IMAGES,
                        content=images)
     elif message.descriptor == ImageStore.InboxTypes.ADD_NEW_IMAGES:
         return Message(ImageStore.OutboxTypes.ADDED_IMAGES,
                        content=self._add_images(message.content))
     elif message.descriptor == ImageStore.InboxTypes.UPDATE_METADATA:
         return Message(ImageStore.OutboxTypes.UPDATED_METADATA,
                        self._update_metadata(message.content))
     return None
Exemplo n.º 3
0
 def _handle_message(self, message):
     if message.descriptor == ImageAnalyzer.InboxTypes.ANALYZE_NEW_IMAGES:
         images = message.content
         for image in images:
             # send one by one because processing is slow
             self.outbox_queue.put(
                 Message(ImageAnalyzer.OutboxTypes.UPDATE_METADATA,
                         content=self.image_analysis([image])))
     elif message.descriptor == ImageAnalyzer.InboxTypes.ANALYZE_FACES:
         faces = message.content
         for face in faces:
             # send one by one because processing is slow
             self.outbox_queue.put(
                 Message(ImageAnalyzer.OutboxTypes.FACES_IDENTIFIED,
                         content=self.face_analysis([face])))
Exemplo n.º 4
0
 def _send_images_for_analysis(self, images: List[Image]):
     not_analyzed = [
         image for image in images if image.faces_detected is False or image.tags_detected is False
     ]
     if len(not_analyzed) > 0:
         self.to_image_analyzer_queue.put(
             Message(ImageAnalyzer.InboxTypes.ANALYZE_NEW_IMAGES, content=not_analyzed)
         )
Exemplo n.º 5
0
    def _send_faces_for_analysis(self, images: List[Image]):
        faces_for_analysis = []
        for image in images:
            for face in image.faces:
                # id is assigned after face was written to the database
                if face.recognized is False and face.id is not None:
                    faces_for_analysis.append(face)

        if len(faces_for_analysis) > 0:
            self.to_image_analyzer_queue.put(
                Message(ImageAnalyzer.InboxTypes.ANALYZE_FACES, content=faces_for_analysis)
            )
Exemplo n.º 6
0
    def find_in_dirs(self, dirs, recursive=True):
        """
        Finds untracked or changed files having extension listed in __extensions__ tuple in the given directories;
        Puts them into __new_images_queue__
        :param dirs: folder to search in (string)
        :param recursive: search recursively on the folder (boolean)
        """
        for dir in dirs:
            self.__find_in_dir__(dir=dir, recursive=recursive)

        if len(self.__new_images_queue__) > 0:
            self.outbox_queue.put(
                Message(Crawler.OutboxTypes.DISCOVERED_IMAGES,
                        content=self.__new_images_queue__))
            self.__new_images_queue__ = []
Exemplo n.º 7
0
    def _init_process_manager(self):
        """
        Start image store main loop in a separate process.
        :return:
        """
        self.to_process_manager = Queue()
        self.from_process_manager = Queue()

        self.process_manager_proc = Process(target=start_worker,
                                            args=(ProcessManager, self.config,
                                                  self.to_process_manager,
                                                  self.from_process_manager))
        self.process_manager_proc.start()

        self.to_process_manager.put(
            Message(ProcessManager.InboxTypes.GET_EXISTING_IMAGES,
                    content=None))
Exemplo n.º 8
0
 def _set_new_metadata(self, message: Message):
     self.to_image_store_queue.put(
         Message(ImageStore.InboxTypes.UPDATE_METADATA, message.content)
     )
Exemplo n.º 9
0
 def _request_existing_images(self, message: Message):
     self.to_image_store_queue.put(
         Message(ImageStore.InboxTypes.GET_EXISTING_IMAGES, content=None)
     )
Exemplo n.º 10
0
 def _received_discovered_images(self, message: Message):
     self.to_image_store_queue.put(
         Message(ImageStore.InboxTypes.ADD_NEW_IMAGES, content=message.content)
     )
Exemplo n.º 11
0
 def _received_images_added_to_image_store(self, message: Message):
     self.outbox_queue.put(
         Message(ProcessManager.OutboxTypes.ADDED_IMAGES, content=message.content)
     )
     self._send_images_for_analysis(message.content)
Exemplo n.º 12
0
 def _send_updates_to_app(self, message: Message):
     self.outbox_queue.put(Message(
         ProcessManager.OutboxTypes.UPDATED_METADATA,
         message.content
     ))
     self._send_faces_for_analysis(message.content)