Esempio n. 1
0
class GeneticGifFinder(object):

    def __init__(self,
                 clip,
                 min_d=None,
                 max_d=None,
                 threshold=None,
                 max_gen=None,
                 popsize=None,
                 mutation_rate=None,
                 elites=None):
        self.clip = mpy.VideoFileClip(clip).resize(width=20)
        self.min_d = 1 if min_d is None else min_d
        self.max_d = 5 if max_d is None else max_d
        self.threshold = 40 if threshold is None else threshold
        self.max_gen = 50 if max_gen is None else max_gen
        self.popsize = 20 if popsize is None else popsize
        self.mutation_rate = 0.001 if mutation_rate is None else mutation_rate
        self.elites = 1 if mutation_rate is None else elites
        self.f = GeneticFrameDistance(self.clip, self.min_d, self.max_d)
        self.selector = ParentSelector(self.popsize)
        self.population = None

    def run(self):
        logging.info("generating population...")
        self.population = GeneticPopulation(self.popsize, self.f)
        generations = 0
        logging.info("starting...")

        # Run first generation without elitism
        self.population.next_generation(self.mutation_rate, self.selector)
        logging.info("Generation {0}: \n{1}\n".format(generations, self.population.generation))
        best_value = self.population.generation.individuals[0].get_y()
        generations += 1

        while generations < self.max_gen and best_value > self.threshold:
            self.population.next_generation(self.mutation_rate, self.selector, self.elites)
            logging.info("Generation {0}: \n{1}\n".format(generations, self.population.generation))
            best_value = self.population.generation.individuals[0].get_y()
            generations += 1

        logging.info("Best clips: \n{0}".format(self.population.generation))
        logging.info("Everything that happened: \n{0}".format(self.population.generations))

    def results_to_gif(self, prefix):
        for i in range(10):
            self.clip.subclip(
                *self.f.gene_to_frames(self.population.generation.individuals[i].x)
            ).write_gif("{0}_{1}.gif".format(prefix, i))
Esempio n. 2
0
    def run(self):
        logging.info("generating population...")
        self.population = GeneticPopulation(self.popsize, self.f)
        generations = 0
        logging.info("starting...")

        # Run first generation without elitism
        self.population.next_generation(self.mutation_rate, self.selector)
        logging.info("Generation {0}: \n{1}\n".format(generations, self.population.generation))
        best_value = self.population.generation.individuals[0].get_y()
        generations += 1

        while generations < self.max_gen and best_value > self.threshold:
            self.population.next_generation(self.mutation_rate, self.selector, self.elites)
            logging.info("Generation {0}: \n{1}\n".format(generations, self.population.generation))
            best_value = self.population.generation.individuals[0].get_y()
            generations += 1

        logging.info("Best clips: \n{0}".format(self.population.generation))
        logging.info("Everything that happened: \n{0}".format(self.population.generations))