Exemplo n.º 1
0
def predict_track_scores(real_tracks, camera_delta_s, fusion_param, smooth=False):
    # fusion_param = get_fusion_param()
    # persons_deltas_score = pickle_load(fusion_param['persons_deltas_path'])
    # if pickle_load(fusion_param['persons_deltas_path']) is not None:
    #     return persons_deltas_score
    predict_path = fusion_param['renew_pid_path']
    # test_tracks.txt

    top_cnt = 10
    persons_deltas_score = list()
    # todo 不用读第二遍
    pids4probes = np.genfromtxt(predict_path, delimiter=' ')
    for probe_i, pids4probe in enumerate(pids4probes):
        person_deltas_score = list()
        if probe_i % 100 == 0:
            print '%d of %d' % (probe_i, len(pids4probes))
        for pid4probe in pids4probe:
            # todo transfer: if predict by python, start from 0, needn't minus 1
            pid4probe = int(pid4probe)
            # predict_idx = predict_idx - 1
            if len(real_tracks[pid4probe]) > 3:
                s1 = real_tracks[pid4probe][3]
                s2 = real_tracks[probe_i][3]
                if s1 != s2:
                    person_deltas_score.append(-1.0)
                    continue
            time1 = real_tracks[pid4probe][2]
            # if track_score_idx == 3914:
            #    print 'test'
            time2 = real_tracks[probe_i][2]
            c1 = real_tracks[pid4probe][1]
            c2 = real_tracks[probe_i][1]
            if smooth:
                if '_dukequerytail' in predict_path:
                    score = track_score(camera_delta_s, c1, time1, c2, time2, interval=500, moving_st=True, filter_interval=50000)
                else:
                    score = smooth_score(c1, c2, time1, time2, camera_delta_s)
            else:
                # 给定摄像头,时间,获取时空评分,这里camera_deltas如果是随机算出来的,则是随机评分
                # todo grid 需要 改区间大小
                if '_dukequerytail' in predict_path:
                    score = track_score(camera_delta_s, c1, time1, c2, time2,
                                        interval=fusion_param['window_interval'], moving_st=True,
                                        filter_interval=fusion_param['filter_interval'])
                else:
                    score = track_score(camera_delta_s, c1, time1, c2, time2, interval=700, filter_interval=40000)
            person_deltas_score.append(score)
        probe_i += 1
        persons_deltas_score.append(person_deltas_score)

    return persons_deltas_score
Exemplo n.º 2
0
def fusion_heat(fusion_param):
    camera_delta_s = pickle_load(fusion_param['distribution_pickle_path'])
    rand_camera_deltas = pickle_load(
        fusion_param['rand_distribution_pickle_path'])
    delta_width = 3000.0
    delta_cnt = 10
    interval_width = delta_width / delta_cnt
    delta_stripe = delta_width / delta_cnt
    delta_range = map(lambda x: x * delta_stripe - delta_width / 2,
                      range(delta_cnt))
    # delta_range = map(lambda x: x*1.0 - 60.0, range(120))
    viz_deltas = list()
    viz_camera_pairs = list()
    viz_values = list()
    for i in range(6):
        for j in range(i + 1, 6):
            for k in range(len(delta_range)):
                match_track_score = track_score(camera_delta_s,
                                                i + 1,
                                                0,
                                                j + 1,
                                                delta_range[k],
                                                interval=interval_width)
                rand_track_score = track_score(rand_camera_deltas,
                                               i + 1,
                                               0,
                                               j + 1,
                                               delta_range[k],
                                               interval=interval_width)
                if rand_track_score < 0.00002:
                    # print rand_track_score
                    rand_track_score = 0.00002
                else:
                    print match_track_score / rand_track_score

                # raw_probs[i][j].append(match_track_score)
                # rand_probs[i][j].append(rand_track_score)
                viz_deltas.append(delta_range[k])
                viz_camera_pairs.append('c%d-c%d' % (i + 1, j + 1))
                viz_values.append(match_track_score)
        break
    df = pd.DataFrame({
        'transfer_time': viz_deltas,
        'camera_pair': viz_camera_pairs,
        'values': viz_values
    })
    pt = df.pivot_table(index='camera_pair',
                        columns='transfer_time',
                        values='values',
                        aggfunc=np.sum)
    return pt
Exemplo n.º 3
0
def gallery_track_scores(query_tracks, gallery_tracks, camera_delta_s, fusion_param, smooth=False):
    predict_path = fusion_param['renew_pid_path']

    persons_deltas_score = list()
    pids4probes = np.genfromtxt(predict_path, delimiter=' ')
    for probe_i, pids4probe in enumerate(pids4probes):
        person_deltas_score = list()
        for i, pid4probe in enumerate(pids4probe):
            # if i >= top_cnt:
            #     break
            pid4probe = int(pid4probe)
            if len(query_tracks[0]) > 3:
                # market index minus 1
                probe_i_tmp = probe_i # (probe_i + 1) % len(pids4probes)
            else:
                probe_i_tmp = probe_i
            # todo transfer: if predict by python, start from 0, needn't minus 1
            # predict_idx = predict_idx - 1
            if len(query_tracks[probe_i_tmp]) > 3:
                s1 = query_tracks[probe_i_tmp][3]
                # print predict_idx
                s2 = gallery_tracks[pid4probe][3]
                if s1 != s2:
                    person_deltas_score.append(-1.0)
                    continue
            time1 = query_tracks[probe_i_tmp][2]
            # if track_score_idx == 3914:
            #     print 'test'
            time2 = gallery_tracks[pid4probe][2]
            c1 = query_tracks[probe_i_tmp][1]
            c2 = gallery_tracks[pid4probe][1]
            if smooth:
                score = smooth_score(c1, c2, time1, time2, camera_delta_s)
            else:
                # 给定摄像头,时间,获取时空评分,这里camera_deltas如果是随机算出来的,则是随机评分
                if 'market_market' in predict_path:
                    score = track_score(camera_delta_s, c1, time1, c2, time2, interval=100, filter_interval=500)
                elif '_market' in predict_path:
                    score = track_score(camera_delta_s, c1, time1, c2, time2, interval=700, filter_interval=40000)
                elif '_duke' in predict_path:
                    score = track_score(camera_delta_s, c1, time1, c2, time2, interval=700, filter_interval=50000)
                else:
                    score = track_score(camera_delta_s, c1, time1, c2, time2)
            person_deltas_score.append(score)
        probe_i += 1
        persons_deltas_score.append(person_deltas_score)

    return persons_deltas_score
Exemplo n.º 4
0
def smooth_score(c1, c2, time1, time2, camera_delta_s, track_interval=20, filter_interval=1000):
    smooth_window_size = 10
    smooth_scores = [
        track_score(camera_delta_s, c1,
                    time1 - (smooth_window_size / 2 - 1) * track_interval + j * track_interval, c2, time2,
                    interval=track_interval, filter_interval=filter_interval)
        for j in range(smooth_window_size)]
    # filter
    for j in range(smooth_window_size):
        if smooth_scores[j] < 0.01:
            smooth_scores[j] = 0
    # smooth
    score = sum(smooth_scores) / len(smooth_scores)
    return score
Exemplo n.º 5
0
def fusion_curve(fusion_param):
    camera_delta_s = pickle_load(fusion_param['distribution_pickle_path'])
    rand_camera_deltas = pickle_load(
        fusion_param['rand_distribution_pickle_path'])
    diff_camera_deltas = pickle_load(
        fusion_param['rand_distribution_pickle_path'].replace('rand', 'diff'))
    # for actual calculate
    delta_width = 2000.0
    delta_cnt = int(delta_width / 100)
    # for distribution viz
    # delta_width = 3000.0
    # delta_cnt = 10
    interval_width = delta_width / delta_cnt
    delta_stripe = delta_width / delta_cnt
    delta_range = map(lambda x: x * delta_stripe - delta_width / 2,
                      range(delta_cnt))
    # delta_range = map(lambda x: x*1.0 - 60.0, range(120))
    over_probs = [[list() for j in range(6)] for i in range(6)]
    probs = list()
    for i in range(6):
        for j in range(6):
            if i == j:
                continue
            cur_prob = list()
            for k in range(len(delta_range)):
                match_track_score = track_score(camera_delta_s,
                                                i + 1,
                                                0,
                                                j + 1,
                                                delta_range[k],
                                                interval=interval_width,
                                                filter_interval=delta_width /
                                                2)
                rand_track_score = track_score(rand_camera_deltas,
                                               i + 1,
                                               0,
                                               j + 1,
                                               delta_range[k],
                                               interval=interval_width,
                                               filter_interval=delta_width / 2)
                diff_track_score = track_score(diff_camera_deltas,
                                               i + 1,
                                               0,
                                               j + 1,
                                               delta_range[k],
                                               interval=interval_width,
                                               filter_interval=delta_width / 2)
                if rand_track_score < 0.00002:
                    # print rand_track_score
                    rand_track_score = 0.00002
                # if i == 3 and j == 4 and abs(delta_range[k]) <= 2000 :
                #     print i
                # else:
                #     print match_track_score / rand_track_score
                cur_prob.append(rand_track_score)
                # raw_probs[i][j].append(match_track_score)
                # rand_probs[i][j].append(rand_track_score)
                # over_probs[i][j].append(rand_track_score)
                # over_probs[i][j].append((match_track_score * (1 - 0.25) - 0.5 * diff_track_score) *
                #                         (0.8 + 0.25 / 0.25) / rand_track_score)
                over_probs[i][j].append(match_track_score)
            probs.append(over_probs[i][j])
    np_probs = np.array(probs)
    np.savetxt('market-grid-cv0_scores.txt', np_probs, fmt='%.6f\t')

    return delta_range, over_probs