본문 바로가기

AI/영상인식(Vision)

1) 이미지 분류 따라해보기 : 네이버 데이터 크롤링! 20초면 끝 -50개까지만 가능

이미지 분류를 위해 샘플데이터를 만들어 보자

MNIST만 맨날 하는 건 지겹지 않은가??

이번엔 아래와 같이 이미지 분류의 A to Z를 연재하려 한다

1. 이미지 크롤링

2. EfficientNet을 이용한 이미지 분류

3. GradCAM을 통한 XAI

 

그중 첫 번째, 이미지 크롤링!

 

아주 쉽다.

본래 아래 url의 구글 이미지 다운로드(!pip install google_images_download)를 사용하면 더 쉬웠지만

구글이 업데이트 과정에 이를 막아놨다.

https://pypi.org/project/google_images_download/

 

google_images_download

Python Script to download hundreds of images from 'Google Images'. It is a ready-to-run code!

pypi.org

 

그래서 파이썬으로 따로 크롤러를 짜서 사용하자, 30초도 안 걸린다 ㅎㅎ

ref1) https://ultrakid.tistory.com/13

ref2) https://velog.io/@joygoround/%EC%A1%B0%EC%BD%94%EB%94%A9-%EC%99%84%EC%84%B1%ED%98%95-%EC%84%9C%EB%B9%84%EC%8A%A4-%EB%A7%8C%EB%93%A4%EA%B8%B0-1

 

 

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

ref1) https://ultrakid.tistory.com/13

ref2) https://velog.io/@joygoround/%EC%A1%B0%EC%BD%94%EB%94%A9-%EC%99%84%EC%84%B1%ED%98%95-%EC%84%9C%EB%B9%84%EC%8A%A4-%EB%A7%8C%EB%93%A4%EA%B8%B0-1