示例#1
0
def init_assignment(formation_setted):
    global marker_1
    global marker_2
    global marker_3
    global marker_4
    marker_1=Marker(1,position_3D=(formation_setted[0][0],formation_setted[0][1],0))
    marker_2=Marker(2,position_3D=(formation_setted[1][0],formation_setted[1][1],0))
    marker_3=Marker(3,position_3D=(formation_setted[2][0],formation_setted[2][1],0))
    marker_4=Marker(4,position_3D=(formation_setted[3][0],formation_setted[3][1],0))
    markers=[marker_1,marker_2,marker_3,marker_4]
    hung_index=assignment_change(formation_setted)
    ms_pos=MarkersPosition()
    ms_pos.markers_pos=markers
    ms_pos.hungarian_index=hung_index
def main():
    cap = cv2.VideoCapture('./test_img/draw_video/video_orig_CA.avi')
    cap.set(cv2.CAP_PROP_FRAME_WIDTH, 1920)
    cap.set(cv2.CAP_PROP_FRAME_HEIGHT, 1080)

    cv2.namedWindow("image", cv2.WINDOW_NORMAL)
    video_file_path = "./test_img/"
    file_name = "video_test.avi"
    file_name_orig = "video_orig.avi"

    # Define the codec and create VideoWriter object
    #    fourcc =cv2.VideoWriter_fourcc('M','J','P','G')
    fourcc = cv2.VideoWriter_fourcc(*"XVID")
    out_video = cv2.VideoWriter(video_file_path + file_name, fourcc, 5.0,
                                (1920, 1080))
    out_video_orig = cv2.VideoWriter(video_file_path + file_name_orig, fourcc,
                                     5.0, (1920, 1080))
    #    for_adjust();
    model = None
    if Load_Autoencoder:
        model = joblib.load("./marker_detection/en_neigh_model.m")
    else:
        model = joblib.load("./marker_detection/neigh_model.m")

    log_file_path = "./log.txt"
    log_file = open(log_file_path, "w")

    formation = formation_I
    init_assignment(formation)
    addr = ('192.168.43.95', 5000)
    server = UDP_Server(addr)
    server.start_server()
    i = 0
    while (1):
        ret, frame = cap.read()
        i += 1
        print('i:', i)
        #        if i==21:
        #            continue
        #            cv2.waitKey(0)
        #        cv2.imshow("hello",frame)
        #        cv2.waitKey(0)
        before_markers = detect_markers(frame, model, 118, Load_Autoencoder)
        markers = generate_marker_5_pos(before_markers)

        global marker_1
        global marker_2
        global marker_3
        global marker_4
        global marker_5
        cur_marker_5 = []
        for marker in markers:
            if marker.id == 1:
                marker_1 = marker
            elif marker.id == 2:
                marker_2 = marker
            elif marker.id == 3:
                marker_3 = marker
            elif marker.id == 4:
                marker_4 = marker
            elif marker.id == 5:
                cur_marker_5.append(marker)
        if cur_marker_5 == 2:
            marker_5 = cur_marker_5

        # ********这一句只能在任意拓扑编队中使用**********
        hung_index = assignment_change(formation)

        ms_pos = MarkersPosition()
        ms_pos.markers_pos = markers
        ms_pos.hungarian_index = hung_index
        #        print("*******************markers_position************************")
        print(ms_pos.markers_pos_string)
        #        print(ms_pos.hungarian_index_string)
        #        for marker in markers:
        #            print(marker)
        #        print("***********************************************************")
        log_str = str(round(time.time(),
                            2)) + " " + ms_pos.markers_pos_string + "\n"
        log_file.write(log_str)
        out_video_orig.write(frame)
        markers = [marker_1, marker_2, marker_3, marker_4]  #保持图片中时刻检测到边框
        for marker in markers:
            try:
                marker.highlite_marker(frame)
            except:
                continue
        for marker in marker_5:
            try:
                marker.highlite_marker(frame)
            except:
                continue


#        if i<=272:
#            draw_T(frame,0)
#        else:
#            draw_T(frame,1)
#        draw_Line(frame)
#        frame=cv2.cvtColor(frame, cv2.COLOR_BGR2GRAY)
        cv2.imshow("image", frame)
        out_video.write(frame)

        key = cv2.waitKey(10)
        if key == 27:
            break

    server.stop_server()
    log_file.close()
    out_video.release()
    out_video_orig.release()
    cap.release()
    cv2.destroyAllWindows()