이미지 분류를 위해 샘플데이터를 만들어 보자
MNIST만 맨날 하는 건 지겹지 않은가??
이번엔 아래와 같이 이미지 분류의 A to Z를 연재하려 한다
1. 이미지 크롤링
2. EfficientNet을 이용한 이미지 분류
3. GradCAM을 통한 XAI
그중 첫 번째, 이미지 크롤링!
아주 쉽다.
본래 아래 url의 구글 이미지 다운로드(!pip install google_images_download)를 사용하면 더 쉬웠지만
구글이 업데이트 과정에 이를 막아놨다.
https://pypi.org/project/google_images_download/
그래서 파이썬으로 따로 크롤러를 짜서 사용하자, 30초도 안 걸린다 ㅎㅎ
ref1) https://ultrakid.tistory.com/13
1) 함수 선언부
## 선언
import os
from urllib.request import urlopen
from bs4 import BeautifulSoup as bs
from urllib.parse import quote_plus
baseUrl = 'https://search.naver.com/search.naver?where=image&sm=tab_jum&query='
save_root = 'downloads'
if not os.path.exists(save_root):os.makedirs(save_root)
def get_images(query='apple', limit=20):
save_path = os.path.join(save_root, query)
if not os.path.exists(save_path):
os.makedirs(save_path)
# 한글 검색 자동 변환
url = baseUrl + quote_plus(query)
html = urlopen(url)
soup = bs(html, "html.parser")
img = soup.find_all(class_='_img', limit=limit)
n = 1
for i in img:
imgUrl = i['data-source']
with urlopen(imgUrl) as f:
with open(os.path.join(save_path, str(n)+'.jpg'),'wb') as h: # w - write b - binary
img = f.read()
h.write(img)
n += 1
print('%s download complete' % (query))
2) 함수 실행부
queries = ['이낙연',
'이재명',
'홍준표',
'황교안',
'박원순',
'추미애',
'심상정']
num_limit = 1100
for query in queries:
get_images(query=query, limit=num_limit)
print('done!!');beep = lambda x: os.system("echo -n '\a';sleep 0.3;" * x);beep(3);
'queries =' 뒤에 수집하고 싶은 키워드를 넛는다.
나는 차기 대선후보들을 크롤링하기 위해 '이낙연',.... 을 선택했다
num_limit은 몇 개를 다운로드할 것인가 이다. 1100으로 놨으니 1100개만 다운로드하여진다.
나는 1100개를 다운로드하고 난 후 여러 사람이 한 사진에 나오거나 잘못된 이미지를 지워서 1000개를 만들려고 1100개를 설정했다.
저 코드를 수행하는데 10초도 걸리지 않는다.
이제 다음장에서 이미지 분류 최강자인 EfficientNet을 적용해볼 거다!!
따라와 따라와~!
근데 해보니 한 검색어당 50개까지밖에 안된다!!!
스크롤을 내려야되서 자동으로 스크롤을 내려서 검색하는 기능은 없다.
다음편에서 50개 이상 왕창 이미지 다운받을수 있는 코드를 알아보자
Reference
'AI > 영상인식(Vision)' 카테고리의 다른 글
(이미지 분류 고급) 1_대선후보 이미지 자동 크롤링! 무한개까지 (4) | 2022.04.05 |
---|---|
OCR 정리 (1) | 2020.06.24 |
(이미지 분류 고급) 2_EfficientNet을 이용한 대선후보 분류 Hands-On (18) | 2020.06.15 |