Ejemplo n.º 1
0
def vis_interp(movie, header, flow, bboxes, baseline=False, worst=False):
    if baseline and worst:
        raise "rendering mode could not be duplicated"

    if baseline:
        cap, out = open_video(movie, postfix="interp_w_baseline")
    elif worst:
        cap, out = open_video(movie, postfix="interp_w_worst")
    else:
        cap, out = open_video(movie, postfix="interp")

    count = int(cap.get(cv2.CAP_PROP_FRAME_COUNT))
    width = int(cap.get(cv2.CAP_PROP_FRAME_WIDTH))
    height = int(cap.get(cv2.CAP_PROP_FRAME_HEIGHT))

    pos = 0
    for i in trange(count):
        ret, frame = cap.read()
        if ret is False or i > bboxes.size:
            break

        if baseline:
            pos = i
            frame = draw_i_frame(frame, flow[i], bboxes[pos])
        elif header["pict_type"][i] == "I":
            pos = i
            frame = draw_i_frame(frame, flow[i], bboxes[pos])
        elif worst:
            frame = draw_i_frame(frame, flow[i], bboxes[pos])
        else:
            # bboxes[pos] is updated by reference
            frame = draw_p_frame(frame, flow[i], bboxes[pos])

        cv2.rectangle(frame, (width - 220, 20), (width - 20, 60), (0, 0, 0),
                      -1)
        cv2.putText(frame, f"pict_type: {header['pict_type'][i]}",
                    (width - 210, 50), cv2.FONT_HERSHEY_DUPLEX, 1,
                    (255, 255, 255), 1)

        out.write(frame)

    cap.release()
    out.release()
Ejemplo n.º 2
0
Archivo: flow.py Proyecto: ujtakk/mvint
def vis_flow(movie, flow, draw=draw_flow):
    cap, out = open_video(movie, postfix='flow')
    count = int(cap.get(cv2.CAP_PROP_FRAME_COUNT))

    for i in tqdm.trange(count):
        ret, frame = cap.read()
        if ret is False:
            break

        frame = draw(frame, flow[i])
        out.write(frame)

    cap.release()
    out.release()
Ejemplo n.º 3
0
def vis_histogram(movie, header, flow, bboxes):
    graph_prefix = os.path.basename(movie)
    if not os.path.exists(os.path.join("graph", graph_prefix)):
        os.makedirs(os.path.join("graph", graph_prefix))

    cap = open_video(movie, display=False)

    count = int(cap.get(cv2.CAP_PROP_FRAME_COUNT))
    width = int(cap.get(cv2.CAP_PROP_FRAME_WIDTH))
    height = int(cap.get(cv2.CAP_PROP_FRAME_HEIGHT))

    for i in trange(count):
        ret, frame = cap.read()
        if ret is False or i > bboxes.size:
            break

        draw_histogram(i, frame, flow[i], bboxes[i], prefix=graph_prefix)

    cap.release()
Ejemplo n.º 4
0
def vis_annotate(movie, header, draw, onlyi=False):
    cap, out = open_video(movie, postfix='annotate')
    count = int(cap.get(cv2.CAP_PROP_FRAME_COUNT))
    height = int(cap.get(cv2.CAP_PROP_FRAME_HEIGHT))

    pos = 0
    for i in tqdm.trange(count):
        ret, frame = cap.read()
        if ret is False:
            break

        cv2.putText(frame, f"pict_type: {header['pict_type'][i]}",
                    (10, height - 10), cv2.FONT_HERSHEY_DUPLEX, 1,
                    (255, 255, 255), 1)
        if onlyi:
            if header["pict_type"][i] == "I":
                pos = i
        else:
            pos = i
        frame = draw(frame, i, pos)
        out.write(frame)

    cap.release()
    out.release()
Ejemplo n.º 5
0
def vis_composed(movie, header, flow, bboxes, baseline=False, worst=False):
    if baseline and worst:
        raise "rendering mode could not be duplicated"

    if baseline:
        cap, out = open_video(movie, postfix="kalman_w_base")
    elif worst:
        cap, out = open_video(movie, postfix="kalman_w_worst")
    else:
        cap, out = open_video(movie, postfix="kalman")

    count = int(cap.get(cv2.CAP_PROP_FRAME_COUNT))
    width = int(cap.get(cv2.CAP_PROP_FRAME_WIDTH))
    height = int(cap.get(cv2.CAP_PROP_FRAME_HEIGHT))

    kalman_0 = KalmanInterpolator()
    kalman_clos_0 = lambda bboxes, flow, frame: \
            interp_kalman(bboxes, flow, frame, kalman_0, calc=calc_flow_mean)
    kalman_1 = KalmanInterpolator()
    kalman_clos_1 = lambda bboxes, flow, frame: \
            interp_kalman(bboxes, flow, frame, kalman_1, calc=calc_flow_mean_grad)

    color = (255, 0, 255)

    pos = 0
    for i in trange(count):
        ret, frame = cap.read()
        if ret is False or i > bboxes.size:
            break

        # linear
        if baseline:
            pos = i
            bboxes_0 = bboxes[pos].copy()
            bboxes_1 = bboxes[pos].copy()

            frame = draw_i_frame(frame, flow[i], bboxes_0)
            frame = draw_i_frame(frame, flow[i], bboxes_1, color=color)
        elif header["pict_type"][i] == "I":
            pos = i
            bboxes_0 = bboxes[pos].copy()
            bboxes_1 = bboxes[pos].copy()

            frame = draw_i_frame(frame, flow[i], bboxes_0)
            frame = draw_i_frame(frame, flow[i], bboxes_1, color=color)
            kalman_0.reset(bboxes[pos])
            kalman_1.reset(bboxes[pos])
        elif worst:
            frame = draw_i_frame(frame, flow[i], bboxes_0)
            frame = draw_i_frame(frame, flow[i], bboxes_1, color=color)
        else:
            # bboxes_0 is updated by reference
            frame = draw_p_frame(frame, flow[i], bboxes_0,
                                 interp=kalman_clos_0)
            frame = draw_p_frame(frame, flow[i], bboxes_1, color=color,
                                 interp=kalman_clos_1)

        cv2.rectangle(frame, (width-220, 20), (width-20, 60), (0, 0, 0), -1)
        cv2.putText(frame,
                    f"pict_type: {header['pict_type'][i]}", (width-210, 50),
                    cv2.FONT_HERSHEY_DUPLEX, 1, (255, 255, 255), 1)

        out.write(frame)

    cap.release()
    out.release()
Ejemplo n.º 6
0
def eval_mot16(src_id,
               prefix="MOT16/train",
               MOT16=MOT16,
               thresh=0.0,
               baseline=False,
               worst=False,
               display=False,
               gop=12):
    mot = MOT16(src_id)
    bboxes = mot.pick_bboxes()

    movie = join(prefix, src_id)
    flow, header = get_flow(movie, prefix=".", gop=gop)

    if display:
        cap, out = open_video(movie, display=True)
    else:
        cap = open_video(movie, display=False)

    count = int(cap.get(cv2.CAP_PROP_FRAME_COUNT))
    width = int(cap.get(cv2.CAP_PROP_FRAME_WIDTH))
    height = int(cap.get(cv2.CAP_PROP_FRAME_HEIGHT))

    kalman = KalmanInterpolator()
    interp_kalman_clos = lambda bboxes, flow, frame: \
            interp_kalman(bboxes, flow, frame, kalman)

    for index, bbox in enumerate(bboxes):
        if not bbox.empty:
            bboxes[index] = bbox.query(f"prob >= {thresh}")

    start = time.perf_counter()
    for i in range(count):
        ret, frame = cap.read()
        if ret is False or i > bboxes.size:
            break

        if baseline:
            bbox = bboxes[i].copy()
            if display:
                frame = draw_i_frame(frame, flow[i], bbox)
            mot.eval_frame(bbox)
            kalman.reset(bbox)
        elif header["pict_type"][i] == "I":
            bbox = bboxes[i].copy()
            if display:
                frame = draw_i_frame(frame, flow[i], bbox)
            mot.eval_frame(bbox)
            kalman.reset(bbox)
        elif worst:
            if display:
                frame = draw_i_frame(frame, flow[i], bbox)
            mot.eval_frame(bbox)
        else:
            # bbox is updated by reference
            if display:
                frame = draw_p_frame(frame,
                                     flow[i],
                                     bbox,
                                     interp=interp_kalman_clos)
            else:
                interp_kalman_clos(bbox, flow[i], frame)
            mot.eval_frame(bbox)

        if display:
            cv2.rectangle(frame, (width - 220, 20), (width - 20, 60),
                          (0, 0, 0), -1)
            cv2.putText(frame, f"pict_type: {header['pict_type'][i]}",
                        (width - 210, 50), cv2.FONT_HERSHEY_DUPLEX, 1,
                        (255, 255, 255), 1)

            out.write(frame)
    end = time.perf_counter()
    print(f"{src_id}: {count/(end-start):3.1f} FPS")
    # print(f"{end-start:5.2f}")

    cap.release()
    if display:
        out.release()
Ejemplo n.º 7
0
def eval_mot16_pred(src_id,
                    model,
                    prefix="MOT16/train",
                    MOT16=MOT16,
                    thresh=0.0,
                    baseline=False,
                    worst=False,
                    display=False):
    mot = MOT16(src_id)

    movie = join(prefix, args.src_id)
    flow, header = get_flow(movie, prefix=".")

    if display:
        cap, out = open_video(movie, display=True)
    else:
        cap = open_video(movie, display=False)

    count = int(cap.get(cv2.CAP_PROP_FRAME_COUNT))
    width = int(cap.get(cv2.CAP_PROP_FRAME_WIDTH))
    height = int(cap.get(cv2.CAP_PROP_FRAME_HEIGHT))

    start = time.perf_counter()
    for i in trange(count):
        ret, frame = cap.read()
        if ret is False:
            break

        if baseline:
            bbox = predict(model, frame, thresh=thresh)
            if display:
                frame = draw_i_frame(frame, flow[i], bbox)
            mot.eval_frame(bbox)
        elif header["pict_type"][i] == "I":
            bbox = predict(model, frame, thresh=thresh)
            if display:
                frame = draw_i_frame(frame, flow[i], bbox)
            mot.eval_frame(bbox)
        elif worst:
            if display:
                frame = draw_i_frame(frame, flow[i], bbox)
            mot.eval_frame(bbox)
        else:
            # bbox is updated by reference
            if display:
                frame = draw_p_frame(frame, flow[i], bbox)
            else:
                interp_linear(bbox, flow[i], frame)
            mot.eval_frame(bbox)

        if display:
            cv2.rectangle(frame, (width - 220, 20), (width - 20, 60),
                          (0, 0, 0), -1)
            cv2.putText(frame, f"pict_type: {header['pict_type'][i]}",
                        (width - 210, 50), cv2.FONT_HERSHEY_DUPLEX, 1,
                        (255, 255, 255), 1)

            out.write(frame)
    end = time.perf_counter()
    print(f"{src_id}: {count/(end-start):3.1f} FPS")

    cap.release()
    if display:
        out.release()