배우고 나누는 사람

모두에게 더 넓고 더 깊은 세상을 향해

F.U.N. 프로젝트/차로 본 내 이미지, 차본내

[프로젝트] 자동차로 본 이미지 (1편)

Jeongwon Seo 2022. 12. 2. 00:37

이번 포스팅부터는 그동안 미루고 미루왔던 프로젝트를 시작하고 진행과정에 대해 리뷰를 해보려해요. 만드려는 프로그램은 나의 (또는 누군가의) 사진을 사진 파일 또는 웹캠을 통해 업로드 하면 자동으로 그 사람과 어울리는 자동차 이미지를 보여주도록 설계를 해보려 합니다. 유튜버 "조코딩"님의 강의 영상을 참고했고, 조코딩님의 친절한 영상을 보고 싶으신 분들은 여기를 클릭해주세요. 프로젝트의 이름은 일단 자본지(동차로 이미)으로 정했습니다. 

 

 

조코딩님의 동물상 테스트 프로젝트는 재미가 목적이기는 하지만 그나마 비슷한 동물상과 비슷한 연예인을 엮어주는 등 사회가 용인할 정도의 신뢰성을 바탕으로 하거든요. 근데 제가 만들 프로그램은 전~혀 신뢰성을 요구하지 않고 순수히 재미로만 만들 생각입니다. 일단 자동차의 종류별로 이미지가 좀 비슷한 연예인들을 뽑았고요 (사실 이 또한 조코딩님의 리시트에서 조금 변경한 수준) 이 연예인들을 그룹으로 묶어서 트레이닝을 시킨 후 나중에 자동차별로 매칭을 시키려 합니다. 그러니까 어떻게 보면 동물상 테스트의 아류작이라고도 말하고 싶네요. 저야 프로그래머가 아니라서 여유있게 코드를 짤 수 있는 것도 아니고 요즘 가족들을 돌보느라 시간도 더 없고, 박사과정도 논문방어심사만 남겨놓고 있어서 하던 연구도 마무리 지어야 해서 (그냥 핑계가 많네요..) 창의적인 프로그램을 짜는 건 아직 힘들거 같아요. 대부분의 방법, 컨텐츠 등은 조코딩님의 유튜브 채널에서 가져왔음을 다시 한 번 밝힙니다. 

 

조코딩님은 구름IDE라는 것을 사용하셨는데, 저는 Google에서 제공하는 Colab을 사용했어요. 제가 구름IDE에 별로 익숙하지도 않고 첫 강의를 따라해보니 Colab으로도 지원이 다 가능하더라고요. 앞으로의 강의에서는 어떻게 될지 모르겠지만 시작은 Colab으로 했어요. Colab의 단점은 일단 무료 버전의 경우 오랜시간 컨트롤을 안해주면 서버와의 연결이 끊겨요. 만약 GPU를 사용하도록 설정했다면 30분에서 1시간 정도면 (혹은 더 짧은 시간에) 연결이 끊길 수도 있고요. GPU를 사용안하면 그래도 몇시간은 가는 것 같아요. 그래서 컴퓨터를 켜놓고 잠을 자러 가거나 하기에는 그닥 믿음직스럽지는 않은 편이지만 그래도 다른 작업을 하면서 프로그램을 돌리기(실행시켜 놓기)에는 나쁘지 않은 것 같아요. 무엇보다도 여러 콜랩 페이지를 열어놓고 실행을 시킬 수도 있고 빠르게 열리고 구글의 다른 앱들과도 연동이 된다는 게 아주 큰 장점이라 할 수 있을 것 같네요. 

 

오리엔테이션은 마친 것 같고 그래서 이번 포스팅에서는 간단하게 제 첫 번째 콜랩 코드를 어떻게 짰는지 보여드리고 마치려 합니다. 먼저 조코딩님의 강의에서 나온대로 크롤링을 해볼건데요. google_images_download라는 패지키가 업데이트가 안된건지 어쩐건지 아래의 예제 코드가 정상적으로 실행되지 않더군요. (콜랩에서는 pip 앞에 "1"를 꼭 붙여야 실행이 됩니다.)

 

!pip install google_images_download

from google_images_download import google_images_download   #importing the library

response = google_images_download.googleimagesdownload()   #class instantiation

arguments = {"keywords":"Polar bears,baloons,Beaches","limit":20,"print_urls":True}   #creating list of arguments
paths = response.download(arguments)   #passing the arguments to the function
print(paths)   #printing absolute paths of the downloaded images

 

아니면 실행이 되었더라도 다운로드 받아진 파일이 없을텐데요. 인터넷 (Stackoverflow)에 찾아보니 깃허브(Github)에 올라온 업데이트로 이를 수정할 수 있더라고요. 그래서 위 코드의 첫번째 줄을 아래처럼 코드를 수정하면 작동함을 알 수 있습니다.

 

!pip install git+https://github.com/Joeclinton1/google-images-download.git

 

자 이렇게 google_images_download 패키지를 정상 가동하도록 만들었으니 연예인 이미지를 크롤링(쉽게 말해 자동 검색 및 다운로드) 해볼까요. 저는 자동차 분류를 7가지로 나누어봤고 (컨버터블, 스포츠카, 세단, SUV, 리무진, 벤, 픽업 트럭) 이에 조코딩님의 연예인 리스트에서 두 가지 분류 (리무진 - 키 큰 연예인, SUV - 다재다능한 연예인)를 추가해봤어요. 그래서 총 28명의 연예인의 사진을 100장씩 일단 가져와 보겠습니다. 필터 때문에 100장이라 해도 다 받아지는게 아니고 받아진 사진도 사람이 손수 골라내는 작업(Data Cleaning)이 추가적으로 필요하니 정확도를 위해선 더 많은 사진이 있으면 좋으나 먼저 말씀드린대로 정확도가 목적인 프로젝트가 아니라 일단 이렇게 설정했어요. 아래 코드를 통해서 해당 사진들을 다운로드 받을 수 있겠네요.

 

from google_images_download import google_images_download

response = google_images_download.googleimagesdownload()
myList = ["워너원 강다니엘", "엑소 백현", "박보검", "송중기", "워너원 황민현", "엑소 시우민", "강동원", "이종석", 
          "이준기", "마동석", "조진웅", "조세호", "안재홍", "윤두준", "이민기", "김우빈", "육성재", "공유", "정국", 
          "아이콘 바비", "워너원 박지훈", "엑소 수호", "윤균상", "이광수", "남주혁", "조인성", "연정훈", "하정우"]

for i in range(len(myList)):
  arguments = {"keywords":myList[i],"limit":100,"print_urls":True, "format":"jpg"}
  paths = response.download(arguments)

 

이렇게 다운을 받고 나면 이 파일들은 여전히 구글 콜랩 서버 안에서만 존재하거든요. 그래서 이 파일들을 다음에 사용할 수 있도록 로컬(자신의 컴퓨터)에 저장하는 작업이 필요합니다. 먼저 다운로드 받아진 파일은 아래처럼 저장이 될 텐데요.

 

 

downloads 폴더를 압축한 후 내려받는 방법을 택했습니다. 사진별로 알아서 폴더를 만들어 저장되게 하려했더니 그것도 일이더군요. 아래의 코드를 보시면 첫 번째 줄은 필요한 패키지를 import하는 구문이고 다음 줄은 downloads 폴더를 압축하는 코드, 그리고 마지막 줄은 압축된 파일을 로컬에 내려받는 코드가 되겠네요. 구름IDE에서는 마우스 클릭으로 전체 내려받기가 되는 것 같던데 콜랩에선 지원이 안되는 것 같아 이렇게 해봤어요.

 

from google.colab import files
!zip -r /content/downloads.zip /content/downloads
files.download("/content/downloads.zip")

 

이렇게 하면 앞으로 Teachable Machine 사이트에서 사용할 데이터가 준비가 됩니다. 이번 포스팅에서 다룬 코드를 아래에서 한 블럭으로 옮겨 놓을게요. 앞으로도 개발과정 코드들을 축적하는 방식으로 계속 업로드 하려 합니다. 그리고 최종코드는 이 프로젝트의 마지막 축적코드에서 또는 구글 콜랩 링크에서 확인 할 수 있도록 할게요. 그럼 다음 포스팅에서 또 뵈요!

 

!pip install git+https://github.com/Joeclinton1/google-images-download.git

from google_images_download import google_images_download
from google.colab import files

response = google_images_download.googleimagesdownload()

myList = ["워너원 강다니엘", "엑소 백현", "박보검", "송중기", "워너원 황민현", "엑소 시우민", "강동원", "이종석", 
          "이준기", "마동석", "조진웅", "조세호", "안재홍", "윤두준", "이민기", "김우빈", "육성재", "공유", "정국", 
          "아이콘 바비", "워너원 박지훈", "엑소 수호", "윤균상", "이광수", "남주혁", "조인성", "연정훈", "하정우"]

for i in range(len(myList)):
  arguments = {"keywords":myList[i],"limit":100,"print_urls":True, "format":"jpg"}
  paths = response.download(arguments)

!zip -r /content/downloads.zip /content/downloads
files.download("/content/downloads.zip")

 

728x90
반응형