fei-cocoapi-0.2.0: src/MXNet/Coco/Index.hs
module MXNet.Coco.Index where
import Control.Lens ((^.))
import qualified Data.Vector as V (Vector, filter, null, head)
import MXNet.Coco.Types
allCats :: Instance -> V.Vector Category
allCats = (^. categories)
allAnns :: Instance -> V.Vector Annotation
allAnns = (^. annotations)
catByName :: String -> V.Vector Category -> Maybe Category
catByName name = vecToMaybe . V.filter (\cat -> cat ^. odc_name == name)
annsByCat :: Category -> V.Vector Annotation -> V.Vector Annotation
annsByCat cat = V.filter (\ann -> ann ^. ann_category_id == cat ^. odc_id )
annsByImg :: Image -> V.Vector Annotation -> V.Vector Annotation
annsByImg img = V.filter (\ann -> ann ^. ann_image_id == img ^. img_id )
annByCatImg :: Image -> Category -> V.Vector Annotation -> Maybe Annotation
annByCatImg img cat = vecToMaybe . annsByCat cat . annsByImg img
vecToMaybe :: V.Vector a -> Maybe a
vecToMaybe vec | V.null vec = Nothing
| otherwise = Just $ V.head vec