def is_scene_separable(diff,fps,program_mode,check_mode,img1,img2):
    if diff>1: return True
    DIST_TRESH = None
    TIMEDIFF_TRESH = None
    DISTANCE_TRESH_CHECK_SIFT = None
    if program_mode == 'scenes': 
        DIST_TRESH = settings.CLUSTER_DISTANCE_TRESHOLD_MODE_SCENECUT
        TIMEDIFF_TRESH = settings.TIMEDIFF_TRESH_MODE_SCENECUT
        DISTANCE_TRESH_CHECK_SIFT = settings.CLUSTER_DISTANCE_TRESHOLD_MODE_SCENECUT_CHECK_SIFT
    elif program_mode == 'joined': 
        DIST_TRESH = settings.CLUSTER_DISTANCE_TRESHOLD_MODE_JOINCUT
        TIMEDIFF_TRESH = settings.TIMEDIFF_TRESH_MODE_JOINCUT
        DISTANCE_TRESH_CHECK_SIFT = settings.CLUSTER_DISTANCE_TRESHOLD_MODE_JOINCUT_CHECK_SIFT
        
    results = []
        
    if 'time_diff' in check_mode:
        time_diff = frame_diff_to_milisecs(diff,fps)
        if time_diff>(float(TIMEDIFF_TRESH)*1000.0):
            results.append(True)
        else:
            results.append(False)
    
    was_separated_by_dist = False
    if 'dist' in check_mode:
        dist = img1.get_distance(img2,from_object=True)
        # print 'img1',img1.get_only_num(),'img2',img2.get_only_num(),'dist',dist,'DIST_TRESH',DIST_TRESH
        if dist > DIST_TRESH:
            was_separated_by_dist = True
            results.append(True)
        else:
            results.append(False)

    if 'sift' in check_mode and img1 and img2:
        if not was_separated_by_dist:
            dist = img1.get_distance(img2,from_object=True)
            if dist > DISTANCE_TRESH_CHECK_SIFT:
                img1 = prepare_img_for_sift(img1)
                img2 = prepare_img_for_sift(img2)
                loc_desc1 = (img1.loc, img1.desc)
                loc_desc2 = (img2.loc, img2.desc)
                im1, im2, mscores,qom,mpercent = get_kpm(loc_desc1, loc_desc2, mode='only_match')
                # print 'img1',img1.get_only_num(),'img2',img2.get_only_num(),'qom',qom,'QOM_MINIMUM_SCENECUT',settings.QOM_MINIMUM_SCENECUT
                if qom < settings.QOM_MINIMUM_SCENECUT:
                    results.append(True)
                else:
                    results.append(False)            
                
    if 'AND' in check_mode:
        if False in results: return False
        else: return True
    if 'OR' in check_mode:
        if True in results: return True
        else: return False
def are_scenes_joinable(diff,fps,dist,program_mode,check_mode,img1=None,img2=None, length_diff=None,similar_check=False):
    # h nem-e lognak egymasba
    if diff > 0:        
        DIST_TRESH = None
        TIMEDIFF_TRESH = None
        DISTANCE_TRESH_CHECK_SIFT = None
        if program_mode == 'scenes': 
            DIST_TRESH = settings.CLUSTER_DISTANCE_TRESHOLD_MODE_SCENECUT
            if similar_check:
                DIST_TRESH = settings.CLUSTER_DISTANCE_TRESHOLD_SIMILAR_CHECK
            TIMEDIFF_TRESH = settings.TIMEDIFF_TRESH_MODE_SCENECUT
            LENGTH_TRESH = settings.LENGTH_TRESH_MODE_SCENECUT
            DISTANCE_TRESH_CHECK_SIFT = settings.CLUSTER_DISTANCE_TRESHOLD_MODE_SCENECUT_CHECK_SIFT
        elif program_mode == 'joined': 
            DIST_TRESH = settings.CLUSTER_DISTANCE_TRESHOLD_MODE_JOINCUT
            if similar_check:
                DIST_TRESH = settings.CLUSTER_DISTANCE_TRESHOLD_SIMILAR_CHECK
            TIMEDIFF_TRESH = settings.TIMEDIFF_TRESH_MODE_JOINCUT
            LENGTH_TRESH = settings.LENGTH_TRESH_MODE_JOINCUT
            DISTANCE_TRESH_CHECK_SIFT = settings.CLUSTER_DISTANCE_TRESHOLD_MODE_JOINCUT_CHECK_SIFT
        
        results = []
        
        was_joined_by_dist = False
        if 'dist' in check_mode:
            if dist < DIST_TRESH:
                results.append(True)
                was_joined_by_dist = True
            else:
                results.append(False)
        
        if 'sift' in check_mode and img1 and img2:
            if not was_joined_by_dist:
                dist = img1.get_distance(img2,from_object=True)
                if dist > DISTANCE_TRESH_CHECK_SIFT:
                    img1 = prepare_img_for_sift(img1)
                    img2 = prepare_img_for_sift(img2)
                    loc_desc1 = (img1.loc, img1.desc)
                    loc_desc2 = (img2.loc, img2.desc)
                    im1, im2, mscores,qom,mpercent = get_kpm(loc_desc1, loc_desc2, mode='only_match')
                    if qom > settings.QOM_MINIMUM_SCENEJOIN:
                        results.append(True)
                    else:
                        results.append(False)        
        
        if 'length' in check_mode:
            length_time = frame_diff_to_milisecs(length_diff,fps)
            if length_time <= float(LENGTH_TRESH)*1000.0:
                results.append(True)
            else:
                results.append(False)
            
        if 'time_diff' in check_mode:
            time_diff = frame_diff_to_milisecs(diff,fps)
            if time_diff<(float(TIMEDIFF_TRESH)*1000.0):
                results.append(True)
            else:
                results.append(False)
    
        if 'AND' in check_mode:
            if False in results: return False
            else: return True
        if 'OR' in check_mode:
            if True in results: return True
            else: return False
        
    else:
        return False
Esempio n. 3
0
    if not num_of_clusters:
        if video: num_of_clusters = 1
        else:
            # default number...modified by plus 2
            num_of_clusters = int(math.sqrt(len(objects)/2)) + 2
    
    if len(objects)<int(num_of_clusters): num_of_clusters = len(objects)
    # objectek nullazas, elokeszites
    if verbose:print '\nPreparing images...\n'
    for img in objects:
        img.is_result = False
        img.was_matched_with = []
        # minden kepre: lemeretezes, pgm keszites, keypointok megtalalasa ha meg nem volt
        if is_sift:
            img = prepare_img_for_sift(img)
        
    if verbose:print 'Preparing images done\n' 

    best_clustering=None
    best_clustering_error=Decimal('Infinity')
    for i in range(num_of_repeats):
        if verbose:print '-----------------------------------'
        if verbose:print 'Repeat %s of %s' % (str(i+1),str(num_of_repeats))
        if verbose:print '-----------------------------------'
        #kmeans++
        initial_clusters=do_kmeans_plus_plus(objects,int(num_of_clusters))
        
        #random
        #initial_clusters=[[o] for o in random.sample(objects,num_of_clusters)]
        if video and fps: