コード例 #1
0
    def greedy_random_vertical_make(self, pics):
        slideshow = []

        previous_slide = None
        current_slide = None

        pics_copy = copy.copy(pics)
        keep_going = True

        # print('Starting greedy slideshow maker...')
        while keep_going:
            current_slideshow = []

            index = list(pics_copy.keys())
            random.shuffle(index)

            for i in index:
                pic = pics_copy[i]

                # First, only Vertical
                if pic.orientation == 0:
                    continue

                if current_slide is None:
                    current_slide = Slide(pic, None)
                    continue
                else:
                    current_slide.add(pic)

                if current_slide.is_valid():
                    if previous_slide is None:
                        slideshow.append(current_slide)
                        current_slideshow.append(current_slide)

                        previous_slide = current_slide
                    else:
                        if transition_score(current_slide, previous_slide):
                            # Ok, current slide is valid, add it to slideshow
                            slideshow.append(current_slide)
                            current_slideshow.append(current_slide)

                            previous_slide = current_slide

                    current_slide = None

            if not current_slideshow:
                # Stop when no more slideshow found
                keep_going = False
            else:
                # print('Adding %s slides' % len(current_slideshow))
                for slide in current_slideshow:
                    del pics_copy[slide.pic_a.id]
                    del pics_copy[slide.pic_b.id]

        return slideshow
コード例 #2
0
    def greedy_vertical_make(self, pics):
        slideshow = []

        previous_slide = None
        current_slide = None

        pics_copy = copy.copy(pics)
        keep_going = True

        while keep_going:
            current_slideshow = []

            for i, pic in pics_copy.items():
                # First, only Vertical
                if pic.orientation == 0:
                    continue

                if current_slide is None:
                    current_slide = Slide(pic, None)
                    continue
                else:
                    current_slide.add(pic)

                if current_slide.is_valid():
                    if previous_slide is None:
                        slideshow.append(current_slide)
                        current_slideshow.append(current_slide)

                        previous_slide = current_slide
                    else:
                        if transition_score(current_slide, previous_slide):
                            # Ok, current slide is valid, add it to slideshow
                            slideshow.append(current_slide)
                            current_slideshow.append(current_slide)

                            previous_slide = current_slide

                    current_slide = None

            if not current_slideshow:
                # Stop when no more slideshow found
                keep_going = False
            else:
                # print('Adding %s slides' % len(current_slideshow))
                for slide in current_slideshow:
                    del pics_copy[slide.pic_a.id]
                    del pics_copy[slide.pic_b.id]

        return slideshow
コード例 #3
0
    def greedy_on_pics(self, pics):
        slideshow = []

        pics = copy.copy(pics)

        # Randomly pick first pick
        index = list(pics.keys())
        starting_index = random.choice(index)
        current_slide = Slide(pics.pop(starting_index))
        previous_slide = None

        keep_going = True
        counter = 0
        while keep_going:
            if counter % 10000 == 0 and counter != 0:
                print('currently consumed %s pics...' % counter)

            if current_slide.is_valid():
                slideshow.append(current_slide)
                previous_slide = current_slide

                current_slide_id = self._find_best_slide_transition(
                    pics, previous_slide)
                if current_slide_id is not None:
                    current_slide = Slide(pics[current_slide_id])
                    del pics[current_slide_id]
                else:
                    break
            else:
                # Find another best pic and add it to current slide
                second_pic_id = None

                if previous_slide is not None:
                    pic_a = current_slide.pic_a

                    best_transition = -1
                    for i, pic_b in pics.items():
                        if pic_b.orientation == 1:
                            current_association = Slide(pic_a)
                            current_association.add(pic_b)

                            current_transition = transition_score(
                                previous_slide, current_association)
                            if current_transition > best_transition:
                                best_transition = current_transition
                                second_pic_id = i
                else:
                    for i, pic in pics.items():
                        if pic.orientation == 1 and not set(
                                current_slide.tags) & set(pic.tags):
                            second_pic_id = i
                            break

                if second_pic_id is not None:
                    current_slide.add(pics[second_pic_id])
                    del pics[second_pic_id]
                else:
                    print('breaking at %s pics: cant find vertical match' %
                          counter)
                    keep_going = False

            counter += 1

        return slideshow