Exemplo n.º 1
0
def get_all_annotations(project, pro_version):
    logger.debug(f'Getting all annotations')
    annotations = []
    mat_file = os.path.join(base_dir, 'projects', project, 'drone.cam.npz')
    fov.set_camera_params(mat_file)
    reg_files = os.path.join(base_dir, 'projects', project, '*.json')
    files = glob.glob(reg_files)
    drone_log.get_log_data(project)
    for file in files:
        with open(file, 'r') as fp:
            json_data = json.load(fp)
        objects = json_data['objects']
        video_file = file.split(os.sep)[-1][:-5]
        drone_log.get_video_data_from_data_file(project, video_file)
        fov.set_image_size(*drone_log.video_size)
        drone_log.match_log_and_video()
        if objects:
            for obj in objects:
                if obj['type'] == 'FrameLine' or obj['type'] == 'FramePoint':
                    annotation = get_frame_obj_data(obj)
                    annotation.extend([video_file, project, pro_version])
                else:
                    logger.debug(
                        f'Unknown annotation found of type: {obj["type"]}')
                    annotation = None
                annotations.append(annotation)
    return annotations
Exemplo n.º 2
0
def get_all_annotations(project, pro_version, video=None):
    logger.debug(f'Getting all annotations')
    annotations = []
    drone = Drone.query.get_or_404(project.drone_id)
    fov.set_camera_params(*drone.calibration)
    drone_log.get_log_data(project.log_file)
    videos = [video] if video else project.videos
    for video in videos:
        json_data = json.loads(video.json_data)
        objects = json_data['objects']
        drone_log.set_video_data(video.duration, video.frames,
                                 (video.width, video.height),
                                 (video.latitude, video.longitude))
        fov.set_image_size(*drone_log.video_size)
        drone_log.match_log_and_video()
        if objects:
            for obj in objects:
                if obj['type'] == 'FrameLine' or obj['type'] == 'FramePoint':
                    annotation = get_frame_obj_data(obj)
                    annotation.extend([video.file, project.name, pro_version])
                else:
                    logger.debug(
                        f'Unknown annotation found of type: {obj["type"]}')
                    annotation = None
                annotations.append(annotation)
    return annotations
Exemplo n.º 3
0
def video(project, video_file):
    logger.debug(
        f'Video called with video: {video_file} and project: {project}')
    mat_file = os.path.join(base_dir, 'projects', project, 'drone.cam.npz')
    fov.set_camera_params(mat_file)
    drone_log.get_log_data(project)
    drone_log.get_video_data_from_data_file(project, video_file)
    fov.set_image_size(*drone_log.video_size)
    video_start_time = read_video_start_time(project, video_file)
    if video_start_time:
        drone_log.video_start_time = video_start_time
    else:
        video_start_time, message = drone_log.match_log_and_video()
        if message:
            flask.flash(message, 'warning')
        write_video_start_time(project, video_file, video_start_time)
    plot_script, plot_div = plot_log_data.get_log_plot_with_video(
        drone_log.log_data(), video_start_time, drone_log.video_duration,
        drone_log.video_nb_frames)
    json_data = read_json_annotations(project, video_file)
    args = dict(project=project,
                video=video_file,
                json_data=json_data,
                plot_script=plot_script,
                plot_div=plot_div,
                video_width=drone_log.video_size[0],
                video_height=drone_log.video_size[1],
                num_frames=drone_log.video_nb_frames,
                fps=drone_log.video_nb_frames / drone_log.video_duration,
                video_start_time=video_start_time)
    logger.debug(f'Render video {video_file} for {project}')
    return flask.render_template('videos/video.html', **args)
Exemplo n.º 4
0
def plot_log(project):
    drone_log.get_log_data(project)
    plot_script, plot_div = plot_log_data.get_log_plot(drone_log.log_data())
    logger.debug(f'Render video plot for {project}')
    return flask.render_template('videos/plot.html',
                                 plot_div=plot_div,
                                 plot_script=plot_script,
                                 project=project)
Exemplo n.º 5
0
def plot_log(project_id):
    project = Project.query.get_or_404(project_id)
    drone_log.get_log_data(project.log_file)
    plot_script, plot_div = plot_log_data.get_log_plot(drone_log.log_data())
    logger.debug(f'Render video plot for {project_id}')
    return flask.render_template('projects/plot.html',
                                 plot_div=plot_div,
                                 plot_script=plot_script,
                                 project_id=project_id)
Exemplo n.º 6
0
def video(video_id):
    logger.debug(f'Video called with video: {video_id}')
    video = Video.query.get_or_404(video_id)
    project = Project.query.get_or_404(video.project_id)
    drone = Drone.query.get_or_404(project.drone_id)
    fov.set_camera_params(*drone.calibration)
    log_file = os.path.join(data_dir, project.log_file)
    drone_log.get_log_data(log_file)
    drone_log.set_video_data(video.duration, video.frames,
                             (video.width, video.height),
                             (video.latitude, video.longitude))
    fov.set_image_size(*drone_log.video_size)
    json_data = video.json_data if type(video.json_data) is str else '{}'
    video_start_time = video.start_time
    if video_start_time:
        drone_log.video_start_time = video_start_time
    else:
        video_start_time, message = drone_log.match_log_and_video()
        if message:
            flask.flash(message, 'warning')
        video.start_time = video_start_time
        db.session.commit()
    plot_script, plot_div = plot_log_data.get_log_plot_with_video(
        drone_log.log_data(), video_start_time, drone_log.video_duration,
        drone_log.video_nb_frames)
    args = dict(project_id=project.id,
                video=video,
                json_data=json.loads(json_data),
                plot_script=plot_script,
                plot_div=plot_div,
                video_width=drone_log.video_size[0],
                video_height=drone_log.video_size[1],
                num_frames=drone_log.video_nb_frames,
                fps=drone_log.video_nb_frames / drone_log.video_duration,
                video_start_time=video_start_time)
    logger.debug(f'Render video {video.file}')
    return flask.render_template('videos/video.html', **args)