Source code for geowatch.geoannots.geococo_objects

from kwcoco.util.dict_proxy2 import AliasedDictProxy
import ubelt as ub


[docs] class CocoGeoVideo(AliasedDictProxy, ub.NiceRepr): """ # Note: hard coded while CocoVideo under development in kwcoco TODO: general coco scalars Example: >>> from geowatch.geoannots.geococo_objects import * # NOQA >>> import geowatch >>> coco_dset = geowatch.coerce_kwcoco('geowatch-msi', heatmap=True, geodata=True, dates=True) >>> video = coco_dset.videos().objs[0] >>> self = CocoGeoVideo(video, coco_dset) """ __alias_to_primary__ = {} def __init__(self, video, dset=None): self._proxy = video self.dset = dset def __nice__(self): from kwcoco.util.util_truncate import smart_truncate from functools import partial stats = ub.udict(self._proxy) stats = stats.map_values(str) stats = stats.map_values( partial(smart_truncate, max_length=32, trunc_loc=0.5)) return ub.urepr(stats, compact=1, nl=0) @ub.memoize_property def warp_vid_from_wld(self): import kwimage return kwimage.Affine.coerce(self._proxy['warp_wld_to_vid']) @ub.memoize_property def warp_wld_from_vid(self): return self.warp_vid_from_wld.inv() @property def images(self): return self.dset.images(video_id=self['id'])
[docs] def corners(self, space='video'): import kwimage if space == 'video': dsize = (self['width'], self['height']) vid_box = kwimage.Box.from_dsize(dsize) vid_poly = vid_box.to_polygon() return vid_poly elif space == 'wld': vid_poly = self.corners(space='video') wld_poly = vid_poly.warp(self.warp_wld_from_vid) return wld_poly
@property def wld_crs(self): from kwgis.utils import util_gis wld_crs = util_gis.coerce_crs(self._proxy['wld_crs_info']) return wld_crs @property def wld_corners_gdf(self): import geopandas as gpd wld_crs = self.wld_crs wld_poly = self.corners(space='wld').to_shapely() subdict = ub.udict(self._proxy) & {'id', 'name'} gdf = gpd.GeoDataFrame([ subdict | {'geometry': wld_poly}, ], crs=wld_crs) return gdf