Beispiel #1
0
    data = Info.ReadReconstructionData(info)
    trajectory = {}
    for shot in data['shots']:
        [x, y, z] = optical_center(data['shots'][shot])
        trajectory[shot] = [x, y, z]
    data['gcp'] = gcp
    #print gcp
    data['transformation'] = list(M)
    #print type(M[0])
    data['trajectory'] = trajectory
    #print trajectory
    f_name = Info.Get3DRansacFileName(info)
    f = open(f_name, 'w')
    f.write(json.dumps(data, indent=4))
    f.close()
    print '%s ransac finish' % ID


if __name__ == '__main__':
    do_lst = Info.GetStateList(['ransac_2D', 'match_result'], ['yes', 'yes'])
    print do_lst
    print len(do_lst)
    #pool= Pool(processes = 8)
    #pool.map(RPE.RansacPointExtract, do_lst)
    #for one in do_lst:
    #RunRansac(one)
    #pool.map(RunRansac, do_lst)
    #SendEmail.SendEmail()
    RunExtract('000067')
    RunRansac('000067')
    WriteImageList(frame_path, frame_lst_name)
    WriteImageList(pano_download_path, pano_lst_name)

    command_1 = 'VisualSFM siftgpu %s' % frame_lst_name
    command_2 = 'VisualSFM siftgpu %s' % pano_lst_name
    subprocess.call(command_1, shell=True)
    subprocess.call(command_2, shell=True)

    command_1 = 'mv %s/*.sift %s' % (frame_path, frame_sift_path)
    command_2 = 'mv %s/*.sift %s' % (pano_download_path, pano_sift_path)
    subprocess.call(command_1, shell=True)
    subprocess.call(command_2, shell=True)

    GetSiftList(frame_sift_path, frame_sift_lst_name)
    GetSiftList(pano_sift_path, pano_sift_lst_name)
    os.remove(frame_lst_name)
    os.remove(pano_lst_name)


if __name__ == '__main__':
    do_lst = Info.GetStateList(
        ['reconstruction', 'downloadpano', 'extractsift'],
        ['yes', 'yes', 'no'])
    print 'Total %d videos to extract sift' % len(do_lst)
    #pool = Pool(processes = 1)
    #pool.map(ExtractSift, do_lst)
    for ID in do_lst:
        ExtractSift(ID)
        #exit()
    SendEmail.SendEmail(Text='ExtractSift finish!!')
    if len(reconstruct_set) == 0 or len(latlon_set) == 0:
        return
    #try:
    [M, model] = RANSAC_2D(reconstruct_set,
                           latlon_set,
                           iteration=1000,
                           tolerance=Info.Config.STEP_TEN_METER)
    print M
    #except:
    #    return
    if not M is None and not model is None:
        reconstruct = Info.ReadReconstructionData(info)['shots']
        f = open(Info.GetGCPFileName(info), 'w')
        frame_lst = sorted(reconstruct.keys())
        for index, frame in enumerate(frame_lst):
            [x, y, z] = optical_center(reconstruct[frame])
            point = np.dot(M,
                           np.transpose(np.array([x, y, 1], dtype=np.float32)))
            s = '%s\t%f\t%f\n' % (frame, point[0], point[1])
            f.write(s)
        f.close()


if __name__ == '__main__':
    do_lst = Info.GetStateList(['matchLst'], ['yes'])
    #pool = Pool(processes = 8)
    RunRANSAC('001234')
    #pool.map(RunRANSAC, do_lst)
    #SendEmail.SendEmail(Text = 'RANSAC finish!!!')
    #print do_lst
Beispiel #4
0
        except:
            data.pop(key)
            continue
        #print panoid
        if panoid is None:
            data.pop(key)
            continue
        elif not panoid in pano_lst:
            pano_lst.append(panoid)
            try:
                loc = GSV.getLocationbyID(panoid)
                data[key] = [float(loc[0]), float(loc[1])]
            except:
                data.pop(key)
                continue
        else:
            data.pop(key)
    f = open(info['match_path'] + '/google_info.json', 'w')
    f.write(json.dumps(data, indent=4))
    f.close()


if __name__ == '__main__':
    do_lst = Info.GetStateList(['lat_lon'], ['yes'])
    #print do_lst
    #print len(do_lst)
    Merge('000067')
    #for one in do_lst:
    #    Merge(one)
    #SendEmail.SendEmail()
Beispiel #5
0
def Plot():
    lst = Info.GetStateList(['match_result'], ['yes'])
    do_lst = [x for x in lst if CheckState(x)]
    #print len(do_lst)
    # our
    our_dis = []
    for one in do_lst:
        info = Info.GetVideoInfo(one)
        f = GetOurPath(info)
        data = LoadFile(f)
        for key in data:
            our_dis.append(data[key])
    number_of_point = len(our_dis)
    our_dis = np.array(our_dis, dtype=np.float32)
    print 'Ourmethod Max val : %f' % np.max(our_dis)
    print 'Ourmethod Min val : %f' % np.min(our_dis)
    print 'Ourmethod Mean val : %f' % np.mean(our_dis)
    print 'Ourmethod Standard Deviation : %f' % np.std(our_dis)
    top_bound = np.ceil(np.max(our_dis))
    #print top_bound
    histogram = np.zeros([int(top_bound) + 1], dtype=np.float32)
    ceil_data = np.ceil(our_dis)
    for i in range(0, int(top_bound) + 1):
        count = np.sum(ceil_data <= i)
        histogram[i] = count
    #print histogram
    our_Y = histogram
    our_X = np.arange(0, top_bound + 1)
    # affine
    affine_dis = []
    for one in do_lst:
        info = Info.GetVideoInfo(one)
        f = GetAffinePath(info)
        data = LoadFile(f)
        for key in data:
            affine_dis.append(data[key])
    affine_dis = np.array(affine_dis, dtype=np.float32)
    print 'Affine Max val : %f' % np.max(affine_dis)
    print 'Affine Min val : %f' % np.min(affine_dis)
    print 'Affine Mean val : %f' % np.mean(affine_dis)
    print 'Affine Standard Deviation : %f' % np.std(affine_dis)
    top_bound = np.ceil(np.max(affine_dis))
    #print top_bound
    histogram = np.zeros([int(top_bound) + 1], dtype=np.float32)
    ceil_data = np.ceil(affine_dis)
    for i in range(0, int(top_bound) + 1):
        count = np.sum(ceil_data <= i)
        histogram[i] = count
    #print histogram
    affine_Y = histogram
    affine_X = np.arange(0, top_bound + 1)
    # rigid
    rigid_dis = []
    for one in do_lst:
        info = Info.GetVideoInfo(one)
        f = GetRigidPath(info)
        data = LoadFile(f)
        for key in data:
            rigid_dis.append(data[key])
    rigid_dis = np.array(rigid_dis, dtype=np.float32)
    print 'Rigid Max val : %f' % np.max(rigid_dis)
    print 'Rigid Min val : %f' % np.min(rigid_dis)
    print 'Rigid Mean val : %f' % np.mean(rigid_dis)
    print 'Rigid Standard Deviation : %f' % np.std(rigid_dis)
    top_bound = np.ceil(np.max(rigid_dis))
    #print top_bound
    histogram = np.zeros([int(top_bound) + 1], dtype=np.float32)
    ceil_data = np.ceil(rigid_dis)
    for i in range(0, int(top_bound) + 1):
        count = np.sum(ceil_data <= i)
        histogram[i] = count
    #print histogram
    rigid_Y = histogram
    rigid_X = np.arange(0, top_bound + 1)

    our_max = np.max(our_Y)
    affine_max = np.max(affine_Y)
    rigid_max = np.max(rigid_Y)
    all_max = np.max([our_max, affine_max, rigid_max])
    top_bound = int(np.ceil(all_max))
    X_axis = np.arange(0, top_bound + 1)

    tmp = np.zeros([top_bound + 1], dtype=np.float32)
    tmp[:] = our_max
    tmp[0:our_Y.size] = our_Y
    our_Y = tmp / number_of_point * 100
    tmp = np.zeros([top_bound + 1], dtype=np.float32)
    tmp[:] = affine_max
    tmp[0:affine_Y.size] = affine_Y
    affine_Y = tmp / number_of_point * 100
    tmp = np.zeros([top_bound + 1], dtype=np.float32)
    tmp[:] = rigid_max
    tmp[0:rigid_Y.size] = rigid_Y
    rigid_Y = tmp / number_of_point * 100

    X_axis = X_axis[1:]
    our_Y = our_Y[1:]
    affine_Y = affine_Y[1:]
    rigid_Y = rigid_Y[1:]
    fig = plt.subplot('111')
    plt.plot(X_axis, our_Y, 'r', color='r', linewidth=4, label='ourmethod')
    plt.plot(X_axis, affine_Y, 'r', color='g', linewidth=4, label='affine')
    plt.plot(X_axis, rigid_Y, 'r', color='b', linewidth=4, label='rigid')
    plt.xscale('log')
    #plt.xlim([1, 300])
    plt.xlabel('within distance(m)')
    plt.ylabel('persent(%)')
    plt.legend(loc='right')
    plt.savefig('ransac_transform.jpg')
    plt.show()
Beispiel #6
0
        frame_short_name = name.split('.')[0]
        for i in range(0,results.shape[1]):
            pano_name = pano_sift_lst[results[index, i]]
            pano_short_name = pano_name.split('.')[0]
            kp_pairs = lib_SIFTmatch.flann_match('%s/%s'%(info['frame_sift_path'],frame_short_name),
                                                 '%s/%s'%(info['pano_sift_path'],pano_short_name))
            #print kp_pairs
            try:
                (mkp1, mkp2) = zip(*kp_pairs)
                mkp1_pts = [ (x[0],x[1]) for x in mkp1 ]
                mkp2_pts = [ (x[0],x[1]) for x in mkp2 ]
                mkp1_pts = np.float32(mkp1_pts)
                mkp2_pts = np.float32(mkp2_pts)
                F, mask = cv2.findFundamentalMat(mkp1_pts,mkp2_pts,cv2.FM_RANSAC,20)
                q_pts = mkp1_pts[mask.ravel()==1]
                t_pts = mkp2_pts[mask.ravel()==1]
                Mi.append(len(q_pts))
            except:
                Mi.append(0)
                continue
        MM.append(Mi)
    np.save('%s/results_fundM'%info['pano_path'],MM)    

if __name__ == '__main__':
    do_lst = Info.GetStateList(['fisher', 'matchFunM'], ['yes', 'no'])
    #print do_lst
    #MatchFunM(do_lst[0])
    pool = Pool(processes = 8)
    pool.map(MatchFunM, do_lst)
    SendEmail.SendEmail(Text = 'Match Finish')
    gmm = (data['a'], data['b'], data['c'])
    mean = data['mean']
    pca_transform = data['pca_transform']

    image_fvs = []
    for image_dec in (frame_desc + pano_desc):
        image_dec = np.dot(image_dec - mean, pca_transform)
        fv = ynumpy.fisher(gmm, image_dec, include='mu')
        image_fvs.append(fv)
    image_fvs = np.vstack(image_fvs)
    image_fvs = np.sign(image_fvs) * np.abs(image_fvs)**0.5
    norms = np.sqrt(np.sum(image_fvs**2, 1))
    image_fvs /= norms.reshape(-1, 1)
    image_fvs[np.isnan(image_fvs)] = 100

    frame_fvs = image_fvs[0:len(frame_sift_lst)]
    pano_fvs = image_fvs[len(frame_sift_lst):]

    results, distances = ynumpy.knn(frame_fvs, pano_fvs, nnn=10)
    #print results
    #print distances
    np.save(info['pano_path'] + '/fisher_results', results)


if __name__ == '__main__':
    do_lst = Info.GetStateList(['extractsift', 'fisher'], ['yes', 'no'])
    #print do_lst
    pool = Pool(processes=4)
    pool.map(GetKnn, do_lst)
    SendEmail.SendEmail(Text='Fisher Finish!!!')
Beispiel #8
0
import SendEmail


def Merge(ID):
    info = Info.GetVideoInfo(ID)
    f1_name = Info.Get3DRansacFileName(info)
    subprocess.call('cp %s %s/ransac_3D_result_old.json' %
                    (f1_name, info['match_path']),
                    shell=True)
    f2_name = info['match_path'] + '/timeline.json'
    f1 = open(f1_name, 'r')
    f2 = open(f2_name, 'r')
    data = json.load(f1)
    tim = json.load(f2)
    data['id'] = tim['id']
    data['time'] = tim['time']
    f1.close()
    f2.close()
    f1 = open(f1_name, 'w')
    f1.write(json.dumps(data, indent=4))
    f1.close()


if __name__ == '__main__':
    #Merge('000049')
    do_lst = Info.GetStateList(['ransac_3D'], ['yes'])
    print(do_lst)
    Merge('000067')
    #pool = Pool(processes = 4)
    #pool.map(Merge, do_lst)
    for frame_index, frame_sift_name in enumerate(frame_sift_lst):
        arg_sort_index = np.argsort(match_score[frame_index, :])
        highest_index = arg_sort_index[-1]
        highest_score = match_score[frame_index, highest_index]
        second_index = arg_sort_index[-2]
        second_score = match_score[frame_index, second_index]

        ratio = float(highest_score) / float(second_score)
        if highest_score >= THRESHOLD:
            frame_name = frame_sift_name.split('.')[0] + '.jpg'
            pano_sift_name = pano_sift_lst[fisher_result[frame_index,
                                                         highest_index]]
            pano_name = pano_sift_name.split('.')[0] + '.jpg'
            pano_id = pano_name[5:27]
            print pano_id

            loc = GoogleSV.getLocationbyID(pano_id)
            if loc is None:
                continue
            s = '%s\t%s\t%s\t%s\t%d\n' % (frame_name, pano_name, loc[0],
                                          loc[1], highest_score)
            f.write(s)
    f.close()


if __name__ == '__main__':
    do_lst = Info.GetStateList(['matchFunM'], ['yes'])
    GetResultLst('000225')  #000538
    #pool = Pool(processes = 2)
    #pool.map(GetResultLst, do_lst)
def Plot():
    lst = Info.GetStateList(['match_result'], ['yes'])
    do_lst = []
    for one in lst:
        if CheckState(one):
            do_lst.append(one)
# Deep
    dis_data = []
    for one in do_lst:
        info = Info.GetVideoInfo(one)
        f = GetDeepPath(info)
        data = LoadFile(f)
        for key in data:
            dis_data.append(data[key])
    deep_dis_data = np.array(dis_data, dtype=np.float32)
    print 'Deep Max val : %f'%np.max(deep_dis_data)
    print 'Deep Min val : %f'%np.min(deep_dis_data)
    print 'Deep Mean val : %f'%np.mean(deep_dis_data)
    print 'Deep Standard Deviation : %f'%np.std(deep_dis_data)
    deep_max = int(np.max(dis_data))
    nop = len(deep_dis_data) 
#####
# Hog
    dis_data = []
    for one in do_lst:
        info = Info.GetVideoInfo(one)
        f = GetHogPath(info)
        data = LoadFile(f)
        for key in data:
            dis_data.append(data[key])
    hog_dis_data = np.array(dis_data, dtype=np.float32)
    print 'Hog Max val : %f'%np.max(hog_dis_data)
    print 'Hog Min val : %f'%np.min(hog_dis_data)
    print 'Hog Mean val : %f'%np.mean(hog_dis_data)
    print 'Hog Standard Deviation : %f'%np.std(hog_dis_data)
    hog_max = int(np.max(dis_data))
#####
# Dsift
    dis_data = []
    for one in do_lst:
        info = Info.GetVideoInfo(one)
        f = GetDsiftPath(info)
        data = LoadFile(f)
        for key in data:
            dis_data.append(data[key])
    dsift_dis_data = np.array(dis_data, dtype=np.float32)
    print 'Dsift Max val : %f'%np.max(dsift_dis_data)
    print 'Dsift Min val : %f'%np.min(dsift_dis_data)
    print 'Dsift Mean val : %f'%np.mean(dsift_dis_data)
    print 'Dsift Standard Deviation : %f'%np.std(dsift_dis_data)
    dsift_max = int(np.max(dis_data))
#####
    all_max = np.max([deep_max, hog_max, dsift_max])
    top_bound = int(np.ceil(all_max))
    x_axis = np.arange(0, top_bound+1)
    deep_hist = np.zeros([top_bound+1], dtype=np.float32)
    hog_hist = np.zeros([top_bound+1], dtype=np.float32)
    dsift_hist = np.zeros([top_bound+1], dtype=np.float32)
    for i in range(0, top_bound+1):
        deep_hist[i] = np.sum(deep_dis_data <= i)
        hog_hist[i] = np.sum(hog_dis_data <= i)
        dsift_hist[i] = np.sum(dsift_dis_data <= i)
    
    x_axis = x_axis[1:]
    deep_hist = deep_hist[1:]
    hog_hist = hog_hist[1:]
    dsift_hist = dsift_hist[1:]
    plt.subplot('111')
    plt.plot(x_axis, deep_hist/nop*100, 'r', color='r', linewidth='4', label = 'deep match')
    plt.plot(x_axis, hog_hist/nop*100, 'r', color='g', linewidth='4', label = 'hog match')
    plt.plot(x_axis, dsift_hist/nop*100, 'r', color='b', linewidth='4', label = 'dense sift match')
    plt.xscale('log')
    #plt.xscale('log')
    #plt.xlim([1])
    plt.xlabel('within distance(m)')
    plt.ylabel('persent(%)')
    plt.legend(loc = 'right')
    plt.savefig('match.jpg')
    plt.show()