Exemplo n.º 1
0
    def manejar_video(self, video, socket):
        if (len(self) == 0):
            print("No hay ningun servidor de procesamiento registrado")
            return

        video_name = GetName()

        video_file = open(f'Videos/{video_name}.mp4', 'wb')
        video_file.write(video)

        Images.VideoToImage(f'Videos/{video_name}.mp4', video_name)

        frames = []

        for item in os.listdir(f'Images{video_name}/'):
            if (os.path.isfile(f"Images{video_name}/{item}")):
                frames.append(item)

        images_to_share = math.floor(len(frames) / len(self)) + 1
        shared_images = 0

        for i in range(len(self)):
            if (i != len(self) - 1):
                print(
                    f"Enviando al servidor {i} para que procese imagenes del {shared_images + 1} a {shared_images + images_to_share}"
                )
                shared_images += images_to_share
            else:
                print(
                    f"Enviando al servidor {i} para que procese imagenes del {shared_images + 1} a {len(frames) - 1}"
                )

        socket.send(b'{"type": "VIDEO_COMPLETE"}')
Exemplo n.º 2
0
    def manejar_video(self, video, socket):
        if (len(self) == 0):
            print("No hay ningun servidor de procesamiento registrado")
            return

        video_name = GetName()

        video_file = open(f'Videos/{video_name}.mp4', 'wb')
        video_file.write(video)

        frames = Images.VideoToImage(f'Videos/{video_name}.mp4',
                                     video_name) - 1

        images_to_share = math.floor(frames / len(self))
        shared_images_counter = 0

        shared_images = []
        result_images = []

        process_pool = multiprocessing.Pool(len(self))
        processes = []

        available_servers = multiprocessing.Queue(len(self))

        for server in self.servidores_procesamiento:
            available_servers.put(server)

        for i in range(len(self)):
            if (i == len(self) - 1):
                shared_images_struct = ImagenesCompartidas(
                    [shared_images_counter + 1, frames], f'Images{video_name}')
            else:
                shared_images_struct = ImagenesCompartidas([
                    shared_images_counter + 1,
                    shared_images_counter + images_to_share
                ], f'Images{video_name}')

            shared_images.append(shared_images_struct)

            shared_images_counter += images_to_share

        for struct in shared_images:
            servidor_asignado = available_servers.get()
            process = process_pool.apply_async(self.EnviarAProcesar,
                                               (struct, servidor_asignado))
            processes.append(process)

        for process in processes:
            try:
                result_structure = process.get(1000)

                if (not result_structure):
                    raise Exception(
                        'Los servidores no pudieron terminar de procesar las imagenes'
                    )

                if (isinstance(result_structure, ImagenesCompartidas)):
                    result_images.append(result_structure)
                else:
                    raise Exception(
                        'Los servidores no pudieron terminar de procesar las imagenes'
                    )
            except Exception as e:
                self.servidores_procesamiento.remove(e.args[0])
                print(f"El servidor {e} no está disponible")

                socket.send(b'{"type": "END_ERROR", "message": ""}')
                return

        for result in result_images:
            contador = 0
            for i in range(result.img_range[0], result.img_range[1] + 1):

                image = open(f'Images{video_name}/{i + 1}.jpg', 'wb')
                image.write(result.imagenes[contador])
                image.close()

                contador += 1

        CreateVideo(f'Images{video_name}')

        filtered_video = open(f'Images{video_name}video.mp4', 'rb').read()

        socket.send(b'{"type": "VIDEO_COMPLETE"}')
        socket.send(filtered_video)

        self.CleanUp(video_name)