Python Tools
We provide some useful scripts to handle scalabel projects and I/O. They are in
the tools
module of the Scalabel python package. We recommend
using the tools through python module invoke convention. For example,
python3 -m scalabel.tools.prepare_data ...
prepare_data
prepare_data
converts videos or images to a data folder and an image list
that can be directly used for creating Scalabel projects. Assume all the images
are in .jpg
format.
Available arguments:
--input INPUT [INPUT ...], -i INPUT [INPUT ...]
path to the video/images to be processed
--input-list INPUT_LIST [INPUT_LIST ...]
List of input directories and videos for processing.
Each line in each file is a file path.
--out-dir OUT_DIR, -o OUT_DIR
output folder to save the frames
--fps FPS, -f FPS the target frame rate. default is the original video
framerate.
--scratch ignore non-empty folder.
--s3 S3 Specify S3 bucket path in bucket-name/subfolder
--url-root URL_ROOT Url root used as prefix in the yaml file. Ignore it if
you are using s3.
--start-time START_TIME
The starting time of extracting frames in seconds.
--max-frames MAX_FRAMES
Max number of output frames for each video.
--no-list do not generate the image list.
--jobs JOBS, -j JOBS Process multiple videos in parallel.
You can download our testing video at https://scalabel-public.s3-us-west-2.amazonaws.com/demo/dancing.mp4. The video was from Youtube with Creative Commons Attribution license.
Convert video to a folder of images and generate the image list:
python3 -m scalabel.tools.prepare_data --start-time 5 --max-frames 100 \
-i dancing.mp4 -o ./dancing --fps 3 \
--url-root http://localhost:8686/items/dancing1k
The above command also starts extracting the frames from the 5th second and
stops at 100th frame. The extraction fps is 3 and it is assumed that the images
are served from the items dir. The command will also generate
image_list.yml
in the output folder. It will be ready to be used in the
Scalabel project creation. You can put multiple videos after -i
to process
those videos togther and put all the images in the image_list.yml
If you want to upload the images to the s3 and generate the corresponding image list, you can do
python3 -m scalabel.tools.prepare_data --start-time 5 --max-frames 100 \
-i ~/Downloads/dancing.mp4 --fps 3 -o dancing-s3 \
--s3 scalabel-public/demo/dancing
Please refer to the s3 doc to configure your S3 bucket.
We also support multiple inputs, as well as image folder. The command below will read the images from the folder dancing-s3 and copy them to the output folder before breaking down the video. The script will think we will create a frame list of two videos. The images in the generated list will be assigned to one of two video names.
python3 -m scalabel.tools.prepare_data --start-time 5 --max-frames 100 \
--fps 3 -i ./dancing-s3 dancing.mp4 -o test
If you want to process a folder of videos together with a list of videos, you can use
python3.8 -m scalabel.tools.prepare_data -i videos/*.mov --input-list \
videos.txt -o frames_all/
edit_labels
edit_labels
provides utilities to edit image and label list.
Add url prefix to the name field in the frames and assign it to the url field
python3 -m scalabel.tools.edit_labels --add-url http://localhost:8686/items -i \
input.json -o output.json