일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 | 31 |
- 스마트인재개발원
- 프로젝트
- 비스포크시네마
- gitclone
- MSE
- 활성화함수
- 머신러닝
- 선형모델 분류
- 백엔드
- 1차프로젝트
- 손실함수
- KNN모델
- 하이퍼파라미터튜닝
- JSP/Servlet
- randomForest
- 2차 실전프로젝트
- ERD
- 교차검증
- 내일배움카드
- semantic_segmentation
- 취업성공패키지
- 크롤링
- 국비지원
- 안드로이드
- 취업연계
- MVCmodel
- 2차프로젝트
- 오픈소스깃허브사용
- springSTS
- intent
- Today
- Total
또자의 코딩교실
[2차 프로젝트] 데이터 수집 및 전처리 본문
✅ Source of data collection
- Stanford Dog set - 'http://vision.stanford.edu/aditya86/ImageNetDogs/'
- DogFaceNet - 'https://github.com/GuillaumeMougeot/DogFaceNet'
- Web Crwaling - Various dogs of emoji
- Animation - Howl's Moving Castle(2004), Spirited Away(2001), My Neighbor Totoro(1988)
✅ 기존 데이터 수집 단계
[현재 확정된 할일]
~ 21/12/21 강아지 데이터 수집(웹 크롤링) 및 데이터 전처리(확실히 전처리) : 실사와 그림데이터 수집. 추후 자세한 사항 안내 예정.
~ 21/12/21 github, google에서 오픈소스 참고자료 찾기
[GAN 모델링 2021/12/18]
- 기획발표 시안 : pix2pix 딥러닝 모델 사용
(pix2pix : 전&후 사진을 모두 넣어서 학습)
(StyleGAN : 후 사진을 넣어서 학습)
(CariGeoGAN >> CariGeoGAN(pix2pix의 특성을 가짐)와 CariStyleGAN(StyleGAN의 특성을 가짐))
각자 되는만큼 [강아지] 데이터를 pix2pix에 사용하기에 알맞은 전/후 데이터를 수집이 목표
[데이터 수집 권장사항 - 2021/12/22자]
1. 실사사진과 캐릭터사진이 거의 안바뀐 데이터가 가장좋다
2. 측면/ 얼굴만 있는거 상관없이 데이터는 있을수록 학습에 도움된다
3. 현재는 강아지 사진만 모으면 된다
[2022/01/17자]
1. CartoonGAN - diyaCartoonGAN을 사용함.
필요한 데이터
- 이미지
- 이미지 블러처리
- 실사 강아지
(모든 데이터들은 사이즈가 같아야한다.)
이미지
- 강아지 emoji
- 영화 ( 마이펫의 이중생활)
- 애니메이션( 지브리 - 하울의 움직이는성, 센과 치히로의 행방불명, 이웃집 토토로) 각 3000장 씩
실사 강아지
- DogFaceNet
- Stanford Dog Dataset
✅ 사용도구
- 이미지 수집 - Python Web Crwaling - Beautiful soup, Selenium
- 이미지 전처리(resize) - OpenCV
- 이미지 블러(가우시안 블러) - OpenCV
이미지 수집 코드 - 1
✅Beautiful Soup 사용해서 Dog emoji 크롤링하기
- 크롤링할 사이트
- https://emojipedia.org/dog-face/
- div id= "vendor-image"
- https://emojipedia.org/dog-face/
!pip install requests
!pip install bs4
!pip install tqdm
import requests as req
from bs4 import BeautifulSoup as bs
#ㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡ
#URL 지정
url = "https://emojipedia.org/dog-face/"
res = req.get(url)
res
# 이미지 태그 파싱
doggy_DOM = bs(res.text, 'html.parser')
doggy_img_list = doggy_DOM.select('div.vendor-image img')
doggy_img_list
#ㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡ
# src 태그만 tag list에 append
doggy_new_list=[]
for img_tag in doggy_img_list :
doggy_new_list.append(img_tag.get('src'))
print(img_tag.get('src'))
doggy_new_list
#ㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡ
# 쓸모없는 데이터 지우기
# 기본 리스트
print('삭제 전 개수 : {}'.format(len(doggy_new_list)))
# 삭제할 원소 집합 생성
rm_set = {'/static/img/lazy.svg'}
# 리스트 컴프리헨션 활용: 삭제할 원소 집합 데이터와 일일이 비교
dog_src_list = [i for i in doggy_new_list if i not in rm_set]
print('삭제 후 개수 : {}'.format(len(dog_src_list)))
#ㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡ
# 이미지 확인
from tqdm import tqdm
import time
for img_tag in dog_src_list :
print(img_tag)
#ㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡ
#이미지 저장
#숫자 17까지 들어가있는 사진 이름 리스트를 만듦
#img src만 있는 리스트와 함께 딕셔너리 형태로 만듦
#딕셔너리의 key value값에 따라 저장
from urllib.request import urlretrieve
name_list = [1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17]
for n in name_list:
print(n)
file_list = []
for img_tag in dog_src_list :
file_list.append(img_tag)
dic = {}
for i in range(len(name_list)):
dic[name_list[i]] = file_list[i]
for i, j in dic.items():
save_path = "./images/{}.png".format(i)
urlretrieve(j, save_path) #다운받을 url, 저장할 폴더 경로 및 파일이름등을 가져오게 됨
✅ 이미지 수집 코드 - 2
Selenium 사용해서 Dog emoji 크롤링하기
- 크롤링할 사이트
- https://www.iconfinder.com/search?q=dog+face
- div id = "icon-preview-img d-flex align-items-center justify-content-center"
- https://www.iconfinder.com/search?q=dog+face
!pip install selenium
from selenium import webdriver as wb # 드라이버를 제어하기위한 모듈
from selenium.webdriver.common.keys import Keys # 키보드 제어
import time # 시간제어
import os
import re
from time import sleep
import urllib.request
import time
from bs4 import BeautifulSoup as bs
from selenium import webdriver
from selenium.common.exceptions import ElementNotInteractableException
from selenium.common.exceptions import NoSuchElementException
from selenium.webdriver.common.keys import Keys
from bs4 import BeautifulSoup
import pandas as pd
import numpy as np
import requests
driverPath = "C:\chromedriver\chromedriver.exe"
driver = webdriver.Chrome(driverPath)
#ㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡ
url = "https://www.iconfinder.com/search?q=dog+face"
driver.get(url)
res = req.get(url)
res
#ㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡ
doggy_DOM = bs(res.text, 'html.parser')
doggy_img_list = doggy_DOM.select('div.icon-preview-img img')
print(len(doggy_img_list))
import pandas as pd
from pandas import DataFrame
df = DataFrame(doggy_img_list)
df.isnull().sum(axis=1)
doggy_new_list=[]
for img_tag in doggy_img_list :
doggy_new_list.append(img_tag.get('src'))
print(img_tag.get('src'))
doggy_new_list
#ㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡ
from urllib.request import urlretrieve
name_list = []
for i in range(18, (96+17)):
name_list.append(i)
file2_list = []
for img_tag in doggy_new_list :
file2_list.append(img_tag)
dic = {}
print(len(name_list))
print(len(file2_list))
for i in range(len(name_list)):
dic[name_list[i]] = file2_list[i]
dic
#ㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡ
for i, j in dic.items():
save_path = "./images/{}.png".format(i)
urlretrieve(j, save_path) #다운받을 url, 저장할 폴더 경로 및 파일이름등을 가져오게 됨
✅ 이미지 수집 코드 - 3
OpenCV 사용해서 다운받은 영화 스크린샷 저장하기
- 저장할 영화
- 마이펫의 이중생활(2016)
- 마이펫의 이중생활(2016)
!pip3 install thread6
import cv2
import time
import threading
try:
print("camera run")
cap = cv2.VideoCapture("./data/images/The.Secret.Life.of.Pets.2016.mkv") #캡쳐할 영화가 있는 경로를 지정
except:
print("run error")
cap.set(3, 1080) #3: 가로
cap.set(4, 1920) #4: 세로
cnt = 0
while True:
#카메라로부터 비디오 파일을 읽고 프레임(frame)과 읽기여부(ret)를 반환
ret, frame = cap.read()
if not ret:
print("video read error! 구동창을 닫습니다.")
cap.release() #close()메소드 #구동한 cap객체를 해제 카메라 닫는 역할
cv2.destroyAllWindows()
break
#성공했을 경우 비디오 재생 #frame
#색깔을 입혀서 보여주기 위해 color 변수 설정
color = cv2.cvtColor(frame, cv2.COLOR_RGB2BGRA)
cv2.imshow('video', frame)
k = cv2.waitKey(30) #30 = 키 입력을 대기하는 함수. 0.03초 동안 키 입력을 대기
if k == 50: #아스키 코드. 키보드 2를 누르면 캡쳐됩니다.
cnt = cnt+1
print("test{}.png".format(cnt))
cv2.imwrite("test{}.png".format(cnt), frame, params = [cv2.IMWRITE_PNG_COMPRESSION, 0])
if k == 49: #k==49 : 49는 숫자 1을 의미(아스키 코드)
cap.release() #구동한 cap 객체를 해제
cv2.destroyAllWindows()
break
✅ 이미지 전처리 코드 - 가우시안 블러
!pip install opencv-python
import os
import glob
import numpy as np
import pandas as pd
import cv2
from PIL import Image
#ㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡ
path = 'images/'
im_size = 256
images = []
for file in os.listdir(path):
img = cv2.imread(path + '/' + file) # reading that image as array
img = cv2.resize(img, (im_size, im_size)) #이미지 사이즈 조절
dst = cv2.GaussianBlur(img, (0, 0), 1.5) #1.5는 블러 강도
print(img.shape)
images.append(img)
# Save the image in Output Folder
cv2.imwrite(str(file) + '_resized.png', img)
cv2.imwrite(str(file) + '_blur.png', dst)
>> 블러 처리 결과
'코딩공부 > 프로젝트 진행' 카테고리의 다른 글
[2차 프로젝트] Colab을 활용한 CartoonGAN 사용 - 2 (0) | 2022.02.04 |
---|---|
[2차 프로젝트] Colab을 활용한 CartoonGAN 사용 - 1 (0) | 2022.01.27 |
[2차 프로젝트] 기획 소개 (0) | 2022.01.03 |
[스마트인재개발원]-1차 프로젝트를 진행하며-(5) (0) | 2021.12.01 |
[스마트인재개발원]-1차 프로젝트를 진행하며-(4-2) (0) | 2021.12.01 |