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)
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
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])))
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) )
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) )
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__ = []
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))
def _set_new_metadata(self, message: Message): self.to_image_store_queue.put( Message(ImageStore.InboxTypes.UPDATE_METADATA, message.content) )
def _request_existing_images(self, message: Message): self.to_image_store_queue.put( Message(ImageStore.InboxTypes.GET_EXISTING_IMAGES, content=None) )
def _received_discovered_images(self, message: Message): self.to_image_store_queue.put( Message(ImageStore.InboxTypes.ADD_NEW_IMAGES, content=message.content) )
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)
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)