반응형
pycocotools를 통해서 masking을 하는 방법을 알아보도록 하겠습니다.
주피터 노트북에서의 파일을 준비하는 과정입니다.
coco 포맷은 yolo 포맷과는 달리 segmentation이 있기 때문에 bounding box가 아닌 masking이 가능한 것 같습니다.
1. COCO Dataset 사용 준비하기
%matplotlib inline
from pycocotools.coco import COCO
import numpy as np
import skimage.io as io
import matplotlib.pyplot as plt
import pylab
# pylab.rcParams['figure.figsize'] = (8.0, 10.0)
dataDir='.'
dataType='val2017'
annFile='{}/annotations/instances_{}.json'.format(dataDir,dataType)
# initialize COCO api for instance annotations
coco=COCO(annFile)
2. COCO 카테고리 불러오기
# display COCO categories and supercategories
cats = coco.loadCats(coco.getCatIds())
nms=[cat['name'] for cat in cats]
print('COCO categories: \n{}\n'.format(' '.join(nms)))
nms = set([cat['supercategory'] for cat in cats])
print('COCO supercategories: \n{}'.format(' '.join(nms)))
cat_food = set([cat['name'] for cat in cats if cat['supercategory'] == 'food'])
print()
print(f"food category where supercategory is food: \n {' '.join(cat_food)}")
3. 랜덤으로 이미지 출력해보기
# get all images containing given categories, select one at random
catIds = coco.getCatIds(catNms=['donut']);
# catIds = coco.getCatIds(catNms=['person','dog','skateboard']);
# print(catIds)
imgIds = coco.getImgIds(catIds=catIds );
# print(imgIds)
# imgIds = coco.getImgIds(imgIds = [324158])
# print(imgIds)
print(imgIds[np.random.randint(0,len(imgIds))])
img = coco.loadImgs(imgIds[np.random.randint(0,len(imgIds))])[0]
# load and display image
# I = io.imread('%s/images/%s/%s'%(dataDir,dataType,img['file_name']))
# use url to load image
I = io.imread(img['coco_url'])
plt.axis('off')
plt.imshow(I)
plt.show()
4. showAnn을 이용하여 annotations정보 불러와서 결과 확인하기
# load and display instance annotations
plt.imshow(I); plt.axis('off')
annIds = coco.getAnnIds(imgIds=img['id'], catIds=catIds, iscrowd=None)
anns = coco.loadAnns(annIds)
for ann in anns:
print(ann)
# print(anns)
coco.showAnns(anns)
5. masking하기
print(catIds)
print(annIds)
print(anns)
anns_img = np.zeros((img['height'], img['width']))
for ann in anns:
# print(ann)
anns_img = np.maximum(anns_img, coco.annToMask(ann) )
# print(coco.annToMask(ann))
# print(ann['category_id'])
plt.imshow(anns_img)
# print(anns_img)
참조 : COCO Dataset, How to create mask images from COCO dataset?
반응형
'Image Processing' 카테고리의 다른 글
Laplacian Method를 이용해 Blurry Image detect 하기! (0) | 2023.05.31 |
---|---|
여러 개의 (multiple) RTSP 서버 세팅 (0) | 2022.04.26 |