geowatch.cli.coco_visualize_videos module¶
KWCoco video visualization script
Todo
- [ ] Option to interpret a channel as a heatmap and overlay it on top of
another set of channels interpreted as a grayscale image.
[ ] Migrate to kwcoco proper
[ ] Show valid image regions
CommandLine
# A demo of this script on toydata is as follows
# TEMP_DPATH=$(mktemp -d)
TEMP_DPATH=$HOME/.cache/kwcoco/demo/viz
mkdir -p $TEMP_DPATH
echo "TEMP_DPATH = $TEMP_DPATH"
cd $TEMP_DPATH
KWCOCO_BUNDLE_DPATH=$TEMP_DPATH/toy_bundle
KWCOCO_FPATH=$KWCOCO_BUNDLE_DPATH/data.kwcoco.json
VIZ_DPATH=$KWCOCO_BUNDLE_DPATH/_viz
python -m kwcoco toydata --key=vidshapes3-msi-multisensor-frames7 --dst=$KWCOCO_FPATH
python -m geowatch.cli.coco_visualize_videos --src=$KWCOCO_FPATH --viz_dpath=$VIZ_DPATH --animate=True --workers=0 --any3=only --max_dim=128
python -m geowatch.cli.coco_visualize_videos --src=$KWCOCO_FPATH --viz_dpath=$VIZ_DPATH --zoom_to_tracks=True --start_frame=1 --num_frames=5 --animate=True
- class geowatch.cli.coco_visualize_videos.CocoVisualizeConfig(*args, **kwargs)[source]¶
Bases:
DataConfig
Visualizes annotations on kwcoco video frames on each band
CommandLine
# Point to your kwcoco file DVC_DPATH=$HOME/data/dvc-repos/smart_watch_dvc COCO_FPATH=$DVC_DPATH/drop1-S2-L8-aligned/data.kwcoco.json python -m geowatch.cli.coco_visualize_videos --src $COCO_FPATH --viz_dpath ./viz_out --channels="red|green|blue" --space="video" COCO_FPATH=/home/joncrall/data/dvc-repos/smart_watch_dvc/drop1-S2-L8-WV-aligned/KR_R001/subdata.kwcoco.json COCO_FPATH=/home/joncrall/data/dvc-repos/smart_watch_dvc/drop1-S2-L8-WV-aligned/data.kwcoco.json python -m geowatch.cli.coco_visualize_videos --src $COCO_FPATH --space="image" # Also note you can make an animated gif python -m kwplot.cli.gifify -i "./viz_out/US_Jacksonville_R01/_anns/red|green|blue/" -o US_Jacksonville_R01_anns.gif # NEW: as of 2021-11-04 : helper animation script python -m geowatch.cli.animate_visualizations --viz_dpath ./viz_out
Valid options: []
- Parameters:
*args – positional arguments for this data config
**kwargs – keyword arguments for this data config
- default = {'alpha': <Value(None)>, 'animate': <Value('auto')>, 'ann_score_thresh': <Value(0)>, 'any3': <Value(False)>, 'channels': <Value(None)>, 'cmap': <Value('viridis')>, 'draw_anns': <Value('auto')>, 'draw_boxes': <Value(True)>, 'draw_chancode': <Value(True)>, 'draw_header': <Value(True)>, 'draw_imgs': <Value(True)>, 'draw_labels': <Value(True)>, 'draw_segmentations': <Value(True)>, 'draw_track_trails': <Value(False)>, 'draw_valid_region': <Value(False)>, 'exclude_sensors': <Value(None)>, 'extra_header': <Value(None)>, 'fixed_normalization_scheme': <Value(None)>, 'include_sensors': <Value(None)>, 'max_dim': <Value(None)>, 'max_workers': <Value(None)>, 'min_dim': <Value(384)>, 'norm_over_time': <Value(False)>, 'num_frames': <Value(None)>, 'only_boxes': <Value(False)>, 'resolution': <Value(None)>, 'role_order': <Value(None)>, 'select_images': <Value(None)>, 'select_videos': <Value(None)>, 'skip_aggressive': <Value(False)>, 'skip_missing': <Value(True)>, 'smart': <Value(False)>, 'space': <Value('video')>, 'src': <Value('data.kwcoco.json')>, 'stack': <Value('auto')>, 'start_frame': <Value(0)>, 'verbose': <Value(0)>, 'viz_dpath': <Value(None)>, 'workers': <Value('auto')>, 'zoom_to_tracks': <Value(False)>}¶
- geowatch.cli.coco_visualize_videos.main(cmdline=True, **kwargs)[source]¶
CommandLine
xdoctest -m geowatch.cli.coco_visualize_videos main:2
Example
>>> import kwcoco >>> from geowatch.utils import kwcoco_extensions >>> from geowatch.cli.coco_visualize_videos import * # NOQA >>> import ubelt as ub >>> dpath = ub.Path.appdir('geowatch/tests/viz_video1').delete().ensuredir() >>> dset = kwcoco.CocoDataset.demo('vidshapes8-multispectral', num_frames=2, image_size=(64, 64), num_videos=2) >>> img = dset.dataset['images'][0] >>> coco_img = dset.coco_image(img['id']) >>> kwargs = { >>> 'src': dset.fpath, >>> 'viz_dpath': dpath, >>> 'space': 'video', >>> 'channels': None, >>> 'zoom_to_tracks': True, >>> } >>> cmdline = False >>> main(cmdline=cmdline, **kwargs)
Example
>>> import kwcoco >>> from geowatch.utils import kwcoco_extensions >>> from geowatch.cli.coco_visualize_videos import * # NOQA >>> import geowatch >>> import ubelt as ub >>> dpath = ub.Path.appdir('geowatch/tests/viz_video2').delete().ensuredir() >>> dset = geowatch.coerce_kwcoco('geowatch-msi', num_frames=5, image_size=(64, 64), num_videos=1) >>> img = dset.dataset['images'][0] >>> coco_img = dset.coco_image(img['id']) >>> kwargs = { >>> 'src': dset.fpath, >>> 'viz_dpath': dpath, >>> 'space': 'video', >>> 'channels': None, >>> 'zoom_to_tracks': False, >>> 'stack': 'only', >>> } >>> cmdline = False >>> main(cmdline=cmdline, **kwargs)
Example
>>> # Test ability to draw track trails >>> from geowatch.cli.coco_visualize_videos import * # NOQA >>> import kwcoco >>> import numpy as np >>> from kwcoco.demo.perterb import perterb_coco >>> import kwimage >>> anchors = np.array([[0.05, 0.05]]) >>> size = (512, 512) >>> dset = kwcoco.CocoDataset.demo('vidshapes1', num_frames=20, num_tracks=20, anchors=anchors, image_size=size) >>> # Make 3 annots not have tracks >>> dset.remove_tracks(dset.tracks()[0:3], keep_annots=True) >>> # Give half of the tracks a random color >>> for track in dset.dataset['tracks'][::2]: >>> track['color'] = kwimage.Color.random().ashex() >>> # Give tracks roles >>> for track in dset.dataset['tracks'][2::2]: ... track['role'] = 'role1' >>> for track in dset.dataset['tracks'][3::2]: ... track['role'] = 'role2' >>> dpath = ub.Path.appdir('geowatch/tests/viz_video3').ensuredir() >>> for r, ds, fs in dpath.walk(): ... for f in fs: ... (r / f).delete() >>> kwargs = { >>> 'src': dset, >>> 'viz_dpath': dpath, >>> 'channels': 'r,b', >>> 'draw_track_trails': True, >>> 'stack': 'only', >>> 'role_order': ['role1', 'role2'], >>> 'cmap': 'gray', >>> 'workers': 0, >>> 'verbose': 101, >>> } >>> cmdline = False >>> main(cmdline=cmdline, **kwargs)
- class geowatch.cli.coco_visualize_videos.TrackInfoLookup(dset)[source]¶
Bases:
object
Prototype implementation for something that kwcoco can use to make track information more accessible. TODO: cache information to make subsequent queries slightly faster.
- geowatch.cli.coco_visualize_videos.select_fixed_normalization(fixed_normalization_scheme, sensor_coarse)[source]¶
- geowatch.cli.coco_visualize_videos.draw_chan_group(coco_dset, frame_id, name, ann_view_dpath, img_view_dpath, delayed, chan_row, finalize_opts, verbose, skip_missing, skip_aggressive, chan_to_normalizer, cmap, header_lines, valid_image_poly, draw_imgs, draw_anns, only_boxes, draw_boxes, draw_labels, draw_segmentations, role_to_drawables, valid_video_poly, stack, draw_header, stack_idx, request_roles, ann_score_thresh, alpha)[source]¶
This draws a single image using selected set of channelse for an intensity, color, or false color visualization with annotations optionally drawn.