카테고리 없음

[인공지능응용] 구글의 인공지능 캐치마인드, QuickDraw 알아보기

Honey Badger 2023. 6. 21. 17:45

 

Quick Draw는 신경망이 위와 같은 낙서를 인식하도록 훈련시키는 드로잉 게임입니다. quickdraw 는 Quick Draw 데이터에 접근하기 위한 파이썬 API로, 필요에 따라 데이터 파일을 다운로드하고 로컬로 캐시하여 사용할 수 있도록 해석해줍니다. 

 

 

시작하기

 

 

1. 먼저 퀵드로우의 파이썬 라이브러리를 pip를 이용해 설치합니다. 

pip install quickdraw

 

 

 

Anaconda 프롬프트를 열고 자신의 가상환경에 접근해 설치할 수 있습니다.

 

 

 

 

 

 

2. 설치한 라이브러리를 사용하는 방법의 예시를 소개하겠습니다. 자세한 내용은 API설명서를 참조하시면 됩니다. QuckDrawData를 사용하여 QuickDraw 데이터를 열고 '모루'의 Drawing을 가져오겠습니다. 

from quickdraw import QuickDrawData # 퀵드로우 라이브러리에서 데이터 임포트하기.
qd = QuickDrawData() # 변수에 데이터 저장. 
anvil = qd.get_drawing("anvil") # 데이터 중 "모루"에 관한 그림파일을 불러와 저장.

print(anvil) # 불러온 그림파일 출력.

 

실행 결과 

 

 

 

 

quickdrawanvil.bin 데이터 파일을 다운로드하고 anvil의 랜덤 Drawing을 위한 데이터를 반환합니다. 

 

Drawing들은 다음과 같이 그림의 여러 속성들을 담고 있는 QuickDrawing 오브젝트로 반환됩니다. 

print(anvil.name) # 이름
print(anvil.key_id) # ID
print(anvil.countrycode) # 국가 코드
print(anvil.recognized) # 그림이 인식되었는지 여부를 나타내는 플래그 반환.
print(anvil.timestamp) # 그림이 작성된 시간(epoch 이후 초)을 반환.
print(anvil.no_of_strokes) # 그림 작성에 사용된 펜 스트로크 수.
print(anvil.image_data) # x,y 좌표 리스트와 함께 raw 이미지 데이터를 스트로크의 리스트로 반환.
print(anvil.strokes) # 그림을 구성하는 (x,y) 좌표 리스트가 포함된 펜 스트로크 리스트를 반환.

 

실행 결과

 

 

 

이러한 속성들을 이용해 그림을 저장하거나 애니메이션 속성을 이용해 그림의 애니메이션(그리는 과정)을 저장할 수도 있습니다. 

anvil.image.save("my_anvil.gif") # 그림 저장
anvil.animation.save("my_anvil_animation.gif") # 그림의 애니메이션 저장

저장된 그림
저장된 애니메이션

 

 

 

 

그림의 이름(모루, 사과, 축구 등)을 전달하는 QuickDrawDataGroup을 사용하여 퀵드로우 그림들의 그룹을 열 수 있습니다. 

from quickdraw import QuickDrawDataGroup

anvils = QuickDrawDataGroup("anvil")
print(anvils.drawing_count)
print(anvils.get_drawing())

 

 

 

 

디폴트로 1000개의 그림만 오픈할 수 있으며, QuickDrawDataGroup의 max_drawings 매개 변수를 수정하여 이 값을 변경할 수 있습니다. None으로 설정하면 해당 그룹의 모든 그림이 오픈됩니다. 

from quickdraw import QuickDrawDataGroup

anvils = QuickDrawDataGroup("anvil", max_drawings=None)
print(anvils.drawing_count)

 

모든 데이터 개수가 12만6천개가 넘는다;;;

 

 

 

 

그룹의 모든 그림들을 순회하려면 Drawings generator를 사용합니다.

from quickdraw import QuickDrawDataGroup

qdg = QuickDrawDataGroup("anvil")
for drawing in qdg.drawings:
    print(drawing)

 

 

 

QuickDrawData의 drawing_names 속성을 사용하여 모든 그림 이름의 목록을 가져올 수 있습니다.

from quickdraw import QuickDrawData

qd = QuickDrawData()
print(qd.drawing_names)

 

이렇게나 많은 키워드가 존재한다!

['aircraft carrier', 'airplane', 'alarm clock', 'ambulance', 'angel', 'animal migration', 
'ant', 'anvil', 'apple', 'arm', 'asparagus', 'axe', 'backpack', 'banana', 'bandage', 'barn', 
'baseball bat', 'baseball', 'basket', 'basketball', 'bat', 'bathtub', 'beach', 'bear', 'beard', 
'bed', 'bee', 'belt', 'bench', 'bicycle', 'binoculars', 'bird', 'birthday cake', 'blackberry',
'blueberry', 'book', 'boomerang', 'bottlecap', 'bowtie', 'bracelet', 'brain', 'bread', 'bridge',
'broccoli', 'broom', 'bucket', 'bulldozer', 'bus', 'bush', 'butterfly', 'cactus', 'cake',
'calculator', 'calendar', 'camel', 'camera', 'camouflage', 'campfire', 'candle', 'cannon', 
'canoe', 'car', 'carrot', 'castle', 'cat', 'ceiling fan', 'cell phone', 'cello', 'chair',
'chandelier', 'church', 'circle', 'clarinet', 'clock', 'cloud', 'coffee cup', 'compass',
'computer', 'cookie', 'cooler', 'couch', 'cow', 'crab', 'crayon', 'crocodile', 'crown', 
'cruise ship', 'cup', 'diamond', 'dishwasher', 'diving board', 'dog', 'dolphin', 'donut',
'door', 'dragon', 'dresser', 'drill', 'drums', 'duck', 'dumbbell', 'ear', 'elbow', 'elephant',
'envelope', 'eraser', 'eye', 'eyeglasses', 'face', 'fan', 'feather', 'fence', 'finger',
'fire hydrant', 'fireplace', 'firetruck', 'fish', 'flamingo', 'flashlight', 'flip flops',
'floor lamp', 'flower', 'flying saucer', 'foot', 'fork', 'frog', 'frying pan', 'garden hose',
'garden', 'giraffe', 'goatee', 'golf club', 'grapes', 'grass', 'guitar', 'hamburger', 'hammer',
'hand', 'harp', 'hat', 'headphones', 'hedgehog', 'helicopter', 'helmet', 'hexagon', 
'hockey puck', 'hockey stick', 'horse', 'hospital', 'hot air balloon', 'hot dog', 'hot tub',
'hourglass', 'house plant', 'house', 'hurricane', 'ice cream', 'jacket', 'jail', 'kangaroo',
'key', 'keyboard', 'knee', 'knife', 'ladder', 'lantern', 'laptop', 'leaf', 'leg', 'light bulb',
'lighter', 'lighthouse', 'lightning', 'line', 'lion', 'lipstick', 'lobster', 'lollipop',
'mailbox', 'map', 'marker', 'matches', 'megaphone', 'mermaid', 'microphone', 'microwave',
'monkey', 'moon', 'mosquito', 'motorbike', 'mountain', 'mouse', 'moustache', 'mouth', 'mug', 
'mushroom', 'nail', 'necklace', 'nose', 'ocean', 'octagon', 'octopus', 'onion', 'oven', 'owl', 
'paint can', 'paintbrush', 'palm tree', 'panda', 'pants', 'paper clip', 'parachute', 'parrot',
'passport', 'peanut', 'pear', 'peas', 'pencil', 'penguin', 'piano', 'pickup truck',
'picture frame', 'pig', 'pillow', 'pineapple', 'pizza', 'pliers', 'police car', 'pond', 'pool',
'popsicle', 'postcard', 'potato', 'power outlet', 'purse', 'rabbit', 'raccoon', 'radio',
'rain', 'rainbow', 'rake', 'remote control', 'rhinoceros', 'rifle', 'river', 'roller coaster',
'rollerskates', 'sailboat', 'sandwich', 'saw', 'saxophone', 'school bus', 'scissors', 
'scorpion', 'screwdriver', 'sea turtle', 'see saw', 'shark', 'sheep', 'shoe', 'shorts',
'shovel', 'sink', 'skateboard', 'skull', 'skyscraper', 'sleeping bag', 'smiley face',
'snail', 'snake', 'snorkel', 'snowflake', 'snowman', 'soccer ball', 'sock', 'speedboat', 
'spider', 'spoon', 'spreadsheet', 'square', 'squiggle', 'squirrel', 'stairs', 'star',
'steak', 'stereo', 'stethoscope', 'stitches', 'stop sign', 'stove', 'strawberry', 
'streetlight', 'string bean', 'submarine', 'suitcase', 'sun', 'swan', 'sweater', 'swing set',
'sword', 'syringe', 't-shirt', 'table', 'teapot', 'teddy-bear', 'telephone', 'television',
'tennis racquet', 'tent', 'The Eiffel Tower', 'The Great Wall of China', 'The Mona Lisa', 
'tiger', 'toaster', 'toe', 'toilet', 'tooth', 'toothbrush', 'toothpaste', 'tornado',
'tractor', 'traffic light', 'train', 'tree', 'triangle', 'trombone', 'truck', 'trumpet',
'umbrella', 'underwear', 'van', 'vase', 'violin', 'washing machine', 'watermelon', 
'waterslide', 'whale', 'wheel', 'windmill', 'wine bottle', 'wine glass', 'wristwatch',
'yoga', 'zebra', 'zigzag']