COCO数据集获取图片信息并根据URL进行显示
2020-06-17 21:24
92 查看
import time as time import json import numpy as np from collections import defaultdict import cv2 as cv def _isArrayLike(obj): return hasattr(obj, '__iter__') and hasattr(obj, '__len__') class COCO: def __init__(self, annotation_file=None): """ Constructor of Microsoft COCO helper class for reading and visualizing annotations. :param annotation_file (str): location of annotation file :param image_folder (str): location to the folder that hosts images. :return: """ # load dataset self.dataset,self.anns,self.cats,self.imgs = dict(),dict(),dict(),dict() self.imgToAnns, self.catToImgs = defaultdict(list), defaultdict(list) if not annotation_file == None: print('loading annotations into memory...') tic = time.time() dataset = json.load(open(annotation_file, 'r')) assert type(dataset)==dict, 'annotation file format {} not supported'.format(type(dataset)) print('Done (t={:0.2f}s)'.format(time.time()- tic)) self.dataset = dataset self.createIndex() def createIndex(self): # create index print('creating index...') anns, cats, imgs = {}, {}, {} imgToAnns,catToImgs = defaultdict(list),defaultdict(list) if 'annotations' in self.dataset: for ann in self.dataset['annotations']: imgToAnns[ann['image_id']].append(ann) anns[ann['id']] = ann if 'images' in self.dataset: for img in self.dataset['images']: imgs[img['id']] = img if 'categories' in self.dataset: for cat in self.dataset['categories']: cats[cat['id']] = cat if 'annotations' in self.dataset and 'categories' in self.dataset: for ann in self.dataset['annotations']: catToImgs[ann['category_id']].append(ann['image_id']) print('index created!') # create class members self.anns = anns self.imgToAnns = imgToAnns self.catToImgs = catToImgs self.imgs = imgs self.cats = cats def getImgIds(self, imgIds=[], catIds=[]): ''' Get img ids that satisfy given filter conditions. :param imgIds (int array) : get imgs for given ids :param catIds (int array) : get imgs with all given cats :return: ids (int array) : integer array of img ids ''' imgIds = imgIds if _isArrayLike(imgIds) else [imgIds] catIds = catIds if _isArrayLike(catIds) else [catIds] if len(imgIds) == len(catIds) == 0: ids = self.imgs.keys() else: ids = set(imgIds) for i, catId in enumerate(catIds): if i == 0 and len(ids) == 0: ids = set(self.catToImgs[catId]) else: ids &= set(self.catToImgs[catId]) print(ids) print() return list(ids) def loadImgs(self, ids=[]): """ Load anns with the specified ids. :param ids (int array) : integer ids specifying img :return: imgs (object array) : loaded img objects """ if _isArrayLike(ids): return [self.imgs[id] for id in ids] elif type(ids) == int: return [self.imgs[ids]] dataDir = '../..' dataType = 'val2017' annDir = '{}/annotations'.format(dataDir) annFile = '{}/instances_{}.json'.format(annDir, dataType) coco = COCO(annFile) # 从image_id获得对应的image的信息 imgIds = coco.getImgIds(imgIds = [324158]) img = coco.loadImgs(imgIds[np.random.randint(0,len(imgIds))])[0] print(img) #图片由信息中的coco_url获得 import requests r = requests.get(img['coco_url']) with open('./img.jpg', 'wb') as f: f.write(r.content) image = cv.imread("./img.jpg", 1) cv.namedWindow('IMG') cv.imshow("IMG", image) cv.waitKey() cv.destroyAllWindows()
相关文章推荐
- 服务器端根据数据库图片的url获取保存的图片并进行缩略后返回给客户端-压缩之Thumbnails
- 服务器端根据数据库图片的url获取保存的图片并进行缩略后返回给客户端-压缩之Thumbnails
- 服务器端根据数据库图片的url获取保存的图片并进行缩略后返回给客户端-压缩之Thumbnails
- 服务器端根据数据库图片的url获取保存的图片并进行缩略后返回给客户端-压缩之Thumbnails
- 服务器端根据数据库图片的url获取保存的图片并进行缩略后返回给客户端-压缩之Thumbnails
- 根据url路径获取图片并显示到ListView中
- 基于Bmob平台进行从服务器获取图片数据(url)的操作,并以瀑布流得形式显示图片
- java根据网页URL获取正文信息,并调整正文格式为段落显示---(两种方式)
- 服务器端根据数据库图片的url获取保存的图片并进行缩略后返回给客户端-压缩之Thumbnails
- C# 根据URL返回HTML_根据URL获取图片信息/缩略图
- 服务器端根据数据库图片的url获取保存的图片并进行缩略后返回给客户端-压缩之Thumbnails
- 服务器端根据数据库图片的url获取保存的图片并进行缩略后返回给客户端-压缩之Thumbnails
- 根据参数获取资源id,将图片代替指定文字进行显示
- android 根据图片url获取bitmap或者drawable,然后再进行压缩处理
- 服务器端根据数据库图片的url获取保存的图片并进行缩略后返回给客户端-压缩之Thumbnails
- Android开发,GPS获取实时时间并转为北京时间,定位信息,海拔高度,并进行显示
- Android 根据url地址显示图片
- 求助~异步联网获取图片,使用ViewPager进行显示?
- 根据url获取图片的高度和宽度
- iOS 根据图片URL从本地相册获取图片