COCO API 끄적이기
API
- 응용 프로그램 프로그래밍 인터페이스
API 다운로드 받기
- 리눅스
1
2
3
git clone https://github.com/cocodataset/cocoapi.git
cd PythonAPI
make
make에서 c오류가 날 경우
1
pip install cython
- window
visual studio 2015를 다운로드 받아야합니다. 다운로드가 되었다는 가정하에 진행하겠습니다.
1
2
git clone https://github.com/cocodataset/cocoapi.git
cd PythonAPI
그리고 window의 오류가 발생하기 때문에 setup.py를 수정해야한다.
1
2
3
4
5
extra_compile_args=['-Wno-cpp', '-Wno-unused-function', '-std=c99']
에서
extra_compile_args={'gcc': ['/Qstd=c99']
수정이 완료가 되었다면 make를 진행하면 된다.
1
2
python setup.py build_ext install
python setup.py build_ext --inplace
만약 이상한 오류가 난다면 관리자 권한으로 실행시키면 된다.
images와 Annotations 다운로드 받기
엄청 오래걸린다.. 저같은 경우는 다운로드가 계속 잘 안되서 리눅스에서 google cloud service
를 사용해 다운로드 했습니다. 속도가 빠르다는 장점이 있습니다.
1
2
3
4
5
6
7
8
9
$ sudo apt install curl
$ curl https://sdk.cloud.google.com | bash
$ source ~/.bashrc
gsutil -m rsync gs://images.cocodataset.org/train2017 train2017
gsutil -m rsync gs://images.cocodataset.org/test2017 test2017
gsutil -m rsync gs://images.cocodataset.org/val2017 val2017
gsutil -m rsync gs://images.cocodataset.org/annotations annotations : error!!
wget -c https://images.cocodataset.org/annotations/annotations_trainval2017.zip
이제 한번 만지작 거려봅시다.
코드
코드는 기존에 깃허브에 있는 pycocoDemo를 보면서 리뷰하려고 한다.
1
2
3
dataDir='G:\dataset\COCO'
dataType='train2017'
annFile='{}/annotations/instances_{}.json'.format(dataDir,dataType)
먼저 annotations파일의 경로를 잡아줍니다. 저는 train2017을 사용했는데 val2017을 쓰는 것을 추천한다.
1
coco=COCO(annFile)
annotations파일을 초기화 시켜준다.
1
2
3
4
5
6
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)))
단순 카테고리 출력이다.
1
2
3
4
5
6
7
8
catIds = coco.getCatIds(catNms=['person','dog','skateboard']);
print(catIds)
imgIds = coco.getImgIds(catIds=catIds);
print(imgIds)
imgIds = coco.getImgIds(imgIds = [379520])
print(imgIds)
img = coco.loadImgs(imgIds[np.random.randint(0,len(imgIds))])[0]
print('img : ',img)
여기에서 우리가 필요한 데이터를 뽑는 과정으로
- 카테고리를 선택해 categories ID를 만든다.
- 이에 해당하는 카테고리를 가지고 있는 image의 ID를 찾는다.
- 하나를 선택해서 이미지를 불러온다.
1
2
3
4
5
I = io.imread(img['coco_url'])
plt.axis('off')
plt.imshow(I)
plt.show()
이미지를 보여준다. 이제부터 이미지에 annotations 파일을 적용하는데 instances, keypoint, caption 이렇게 3가지를 볼수 있다.
instances
1
2
3
4
5
6
7
8
9
10
11
annFile = '{}/annotations/instances_{}.json'.format(dataDir,dataType)
coco_kps=COCO(annFile)
plt.imshow(I)
plt.axis('off')
# annotation에 쓰일 ID
annIds = coco.getAnnIds(imgIds=img['id'], catIds=catIds, iscrowd=None)
# annotation 불러오기
anns = coco.loadAnns(annIds)
# annotation 적용하기
coco.showAnns(anns)
keypoint
1
2
3
4
5
6
7
8
9
annFile = '{}/annotations/person_keypoints_{}.json'.format(dataDir,dataType)
coco_kps=COCO(annFile)
plt.imshow(I)
plt.axis('off')
ax = plt.gca()
annIds = coco_kps.getAnnIds(imgIds=img['id'], catIds=catIds, iscrowd=None)
anns = coco_kps.loadAnns(annIds)
coco_kps.showAnns(anns)
caption
1
2
3
4
5
6
7
annFile = '{}/annotations/captions_{}.json'.format(dataDir,dataType)
coco_caps=COCO(annFile)
annIds = coco_caps.getAnnIds(imgIds=img['id']);
anns = coco_caps.loadAnns(annIds)
coco_caps.showAnns(anns)
plt.imshow(I); plt.axis('off'); plt.show()
참조
This post is licensed under CC BY 4.0 by the author.