반응형
Notice
Recent Posts
Recent Comments
Link
안 쓰던 블로그
Object Detection_2. 실습 본문
반응형
Selective Search 실습 및 시각화
AlpacaDB/selectivesearch
github.com/AlpacaDB/selectivesearch
!pip install selectivesearch
이것을 설치한다
import selectivesearch
import cv2
import matplotlib.pyplot as plt
import os
%matplotlib inline
default_dir = '/content/DLCV'
img = cv2.imread(os.path.join(default_dir, 'data/image/audrey01.jpg'))
img_rgb = cv2.cvtColor(img, cv2.COLOR_BGR2RGB)
print('img shape:', img.shape)
plt.figure(figsize=(8, 8))
plt.imshow(img_rgb)
plt.show()
이 이미지에 selective search를 해보도록 한다
Region Proposal(후보 영역)에 대한 정보 보기
#selectivesearch.selective_search()함수: 이미지의 Region Proposal정보 반환
_, regions = selectivesearch.selective_search(img_rgb, scale=100, min_size=2000)
print(type(regions), len(regions))
img_rgb: 이미지의 rgb값
scale: 알고리즘이 선택하는 오브젝트 크기를 조정하는 값->알고리즘 조정
min_size: 추천되는 값 중에 최소 이 값 이상은 선택하겠다(가로x세로값)->선택값 조정
반환된 regions 변수는 리스트 타입으로 세부 원소로 딕셔너리를 가지고 있다
개별 딕셔너리내 KEY값별 의미
rect는 x값, y값, width값, height값을 가지며 이 값이 Detected Object 후보를 나타내는 Bounding box
size는 Bounding box의 크기
labels는 해당 rect로 지정된 Bounding Box내에 있는 오브젝트들의 고유 ID
아래로 내려갈 수록 너비와 높이 값이 큰 Bounding box이며 하나의 Bounding box에 여러개의 오브젝트가 있을 확률이 커진다
cand_rects = [cand['rect'] for cand in regions]
print(cand_rects)
이렇게 하면 rect정보만 뽑아서 출력할 수 있다
Bounding Box를 시각화하기
green_rgb = (125, 255, 51) #초록색 박스
img_rgb_copy = img_rgb.copy()
for rect in cand_rects:
left = rect[0]
top = rect[1]
right = left + rect[2] #오른쪽=왼쪽+너비
bottom = top + rect[3] #바닥=탑+높이
img_rgb_copy = cv2.rectangle(img_rgb_copy, (left, top), (right, bottom), color=green_rgb, thickness=2)
plt.figure(figsize=(8, 8))
plt.imshow(img_rgb_copy)
plt.show()
opencv의 rectangle()을 이용하여 시각화
rectangle()은 이미지와 왼쪽 위 좌표, 오른쪽 아래 좌표, box컬러색, 두께 등을 인자로 입력하면 원본 이미지에 box를 그린다
앞서 했던 min_size값을 작게 잡으면 더 자세하게 그려지게 된다
bounding box의 크기가 큰 후보만 추출
cand_rects = [cand['rect'] for cand in regions if cand['size'] > 10000]
green_rgb = (125, 255, 51)
img_rgb_copy = img_rgb.copy()
for rect in cand_rects:
left = rect[0]
top = rect[1]
right = left + rect[2]
bottom = top + rect[3]
img_rgb_copy = cv2.rectangle(img_rgb_copy, (left, top), (right, bottom), color=green_rgb, thickness=2)
plt.figure(figsize=(8, 8))
plt.imshow(img_rgb_copy)
plt.show()
if문을 써서 size가 10000이상인 값만 출력할 수 있다
반응형
'머신러닝 > 머신러닝' 카테고리의 다른 글
Object Detection_4. NMS 및 성능 평가 Metric - mAP (1) | 2021.01.17 |
---|---|
Object Detection_3. 성능 평가 Metric - IOU (0) | 2021.01.17 |
Object Detection_1. 개념 (0) | 2021.01.10 |
구글 코랩colab 사용, 구글 드라이브에 연동 2021기준 (0) | 2021.01.10 |
사이킷런 - 타이타닉 생존자 ML 예측 구현하기 (0) | 2020.12.07 |
Comments