def test_labels_predicted_hdf5(multi_skel_vid_labels, tmpdir): labels = multi_skel_vid_labels filename = os.path.join(tmpdir, "test.h5") # Lets promote some of these Instances to predicted instances for label in labels: for i, instance in enumerate(label.instances): if i % 2 == 0: label.instances[i] = PredictedInstance.from_instance( instance, 0.3) # Lets also add some from_predicted values for label in labels: label.instances[1].from_predicted = label.instances[0] # Try adding a node to the skeleton labels.skeletons[0].add_node("new node") # Save and compare the results Labels.save_hdf5(filename=filename, labels=labels) loaded_labels = Labels.load_hdf5(filename=filename) _check_labels_match(labels, loaded_labels) # Try deleting nodes from the skeleton node = labels.skeletons[0].nodes[-1] labels.skeletons[0].delete_node(node) node = labels.skeletons[0].nodes[-1] labels.skeletons[0].delete_node(node) # Save and compare the results Labels.save_hdf5(filename=filename, labels=labels) loaded_labels = Labels.load_hdf5(filename=filename) _check_labels_match(labels, loaded_labels)
def test_many_videos_hdf5(tmpdir): labels = Labels() filename = os.path.join(tmpdir, "test.h5") labels.videos = [Video.from_filename(f"video {i}.mp4") for i in range(3000)] Labels.save_hdf5(filename=filename, labels=labels)
def test_many_tracks_hdf5(tmpdir): labels = Labels() filename = os.path.join(tmpdir, "test.h5") labels.tracks = [Track(spawned_on=i, name=f"track {i}") for i in range(4000)] Labels.save_hdf5(filename=filename, labels=labels)
def test_hdf5_empty_save(tmpdir): labels = Labels() filename = os.path.join(tmpdir, "test.h5") Labels.save_hdf5(filename=filename, labels=labels) dummy_video = Video.from_filename("foo.mp4") labels.videos.append(dummy_video) Labels.save_hdf5(filename=filename, labels=labels)
def test_labels_hdf5(multi_skel_vid_labels, tmpdir): labels = multi_skel_vid_labels filename = os.path.join(tmpdir, "test.h5") Labels.save_hdf5(filename=filename, labels=labels) loaded_labels = Labels.load_hdf5(filename=filename) _check_labels_match(labels, loaded_labels)
def test_many_suggestions_hdf5(tmpdir): labels = Labels() filename = os.path.join(tmpdir, "test.h5") video = Video.from_filename("foo.mp4") labels.videos = [video] labels.suggestions = [SuggestionFrame(video, i) for i in range(3000)] Labels.save_hdf5(filename=filename, labels=labels)
def test_path_fix(tmpdir): labels = Labels() filename = os.path.join(tmpdir, "test.h5") # Add a video without a full path labels.add_video(Video.from_filename("small_robot.mp4")) Labels.save_hdf5(filename=filename, labels=labels) # Pass the path to the directory with the video labels = Labels.load_file(filename, video_search="tests/data/videos/") # Make sure we got the actual video path by searching that directory assert len(labels.videos) == 1 assert labels.videos[0].filename == "tests/data/videos/small_robot.mp4"
def test_path_fix_with_new_full_path(tmpdir): labels = Labels() filename = os.path.join(tmpdir, "test.h5") # Add video with bad filename labels.add_video(Video.from_filename("foo.mp4")) Labels.save_hdf5(filename=filename, labels=labels) # Pass list of full video paths to use instead of those in labels labels = Labels.load_file( filename, video_search=["tests/data/videos/small_robot.mp4"]) # Make sure we got the actual video path by searching that directory assert len(labels.videos) == 1 assert labels.videos[0].filename == "tests/data/videos/small_robot.mp4"
def test_hdf5_from_predicted(multi_skel_vid_labels, tmpdir): labels = multi_skel_vid_labels filename = os.path.join(tmpdir, "test.h5") # Add some predicted instances to create from_predicted links for frame_num, frame in enumerate(labels): if frame_num % 20 == 0: frame.instances[ 0].from_predicted = PredictedInstance.from_instance( frame.instances[0], float(frame_num)) frame.instances.append(frame.instances[0].from_predicted) # Save and load, compare the results Labels.save_hdf5(filename=filename, labels=labels) loaded_labels = Labels.load_hdf5(filename=filename) for frame_num, frame in enumerate(loaded_labels): if frame_num % 20 == 0: assert frame.instances[0].from_predicted.score == float(frame_num)
def test_labels_append_hdf5(multi_skel_vid_labels, tmpdir): labels = multi_skel_vid_labels filename = os.path.join(tmpdir, "test.h5") # Save each frame of the Labels dataset one by one in append # mode for label in labels: # Just do the first 20 to speed things up if label.frame_idx > 20: break Labels.save_hdf5(filename=filename, labels=Labels([label]), append=True) # Now load the dataset and make sure we get the same thing we started # with. loaded_labels = Labels.load_hdf5(filename=filename) _check_labels_match(labels, loaded_labels)
def test_load_file(tmpdir): labels = Labels() filename = os.path.join(tmpdir, "test.h5") labels.add_video(Video.from_filename("small_robot.mp4")) Labels.save_hdf5(filename=filename, labels=labels) # Fix video path from full path labels = load_file(filename, search_paths="tests/data/videos/small_robot.mp4") assert Path(labels.video.filename).samefile("tests/data/videos/small_robot.mp4") # No auto-detect labels = load_file(filename, detect_videos=False) assert labels.video.filename == "small_robot.mp4" # Fix video path by searching in the labels folder tmpvid = tmpdir.join("small_robot.mp4") tmpvid.write("") # dummy file assert load_file(filename).video.filename == tmpvid assert load_file(filename, search_paths=str(tmpdir)).video.filename == tmpvid assert load_file(filename, search_paths=str(tmpvid)).video.filename == tmpvid
def test_save_labels_and_frames_hdf5(multi_skel_vid_labels, tmpdir): # Lets take a subset of the labels so this doesn't take too long labels = multi_skel_vid_labels labels.labeled_frames = labels.labeled_frames[5:30] filename = os.path.join(tmpdir, "test.h5") Labels.save_hdf5(filename=filename, labels=labels, save_frame_data=True) loaded_labels = Labels.load_hdf5(filename=filename) _check_labels_match(labels, loaded_labels) # Rename file (after closing videos) for vid in loaded_labels.videos: vid.close() filerename = os.path.join(tmpdir, "test_rename.h5") os.rename(filename, filerename) # Make sure we open can after rename loaded_labels = Labels.load_hdf5(filename=filerename)