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
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: