๊ธฐ๊ณ„ ํ•™์Šต๊ณผ Tinder๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์‹œ๊ฐ„๋‹น 13๋ช…์˜ ์†Œ๋…€๋ฅผ ๋ฐ๋ฆฌ๋Ÿฌ ์˜ค๋Š” ๋ฐฉ๋ฒ•

*๋ฌผ๋ก  ๊ธฐ๊ณ„ ํ•™์Šต์„ ๊ณต๋ถ€ํ•˜๊ธฐ ์œ„ํ•ด์„œ๋งŒ. ์‚ฌ๋ž‘ํ•˜๋Š” ์•„๋‚ด์˜ ์•ฝ๊ฐ„ ๋ถˆ์พŒํ•œ ์‹œ์„  ์•„๋ž˜.

ํ‹ด๋”๋งŒํผ ์ฒ™์ถ”๋ฐ˜์‚ฌ ์ˆ˜์ค€๊นŒ์ง€ ๊ฐ„๋‹จํ•œ ์ ์šฉ์€ ์•„๋งˆ ์—†์„ ๊ฒƒ์ž…๋‹ˆ๋‹ค. ๊ทธ๊ฒƒ์„ ์‚ฌ์šฉํ•˜๋ ค๋ฉด ํ•œ ์†๊ฐ€๋ฝ์œผ๋กœ ์Šค ์™€์ดํ”„ํ•˜๊ณ  ์ผ๋ถ€ ๋‰ด๋Ÿฐ์œผ๋กœ ๊ฐ€์žฅ ์ข‹์•„ํ•˜๋Š” ์†Œ๋…€ ๋˜๋Š” ๋‚จ์„ฑ์„ ์„ ํƒํ•˜์‹ญ์‹œ์˜ค. ์Œ์„ ์„ ํƒํ•  ๋•Œ ๋ฌด์ฐจ๋ณ„ ๋Œ€์ž…์˜ ์ด์ƒ์ ์ธ ๊ตฌํ˜„.

๋‚˜๋Š” ์ด๊ฒƒ์ด ์ƒˆ๋กœ์šด ๊ทธ๋ž˜ํ”ฝ ์นด๋“œ์—์„œ ๊ธฐ๊ณ„ ํ•™์Šต์˜ ๋ง›์„ ์กฐ๊ธˆ ์–ป์„ ์ˆ˜ ์žˆ๋Š” ์ข‹์€ ๋ฐฉ๋ฒ•์ด๋ผ๊ณ  ์ƒ๊ฐํ–ˆ์Šต๋‹ˆ๋‹ค. ๋‚จ์€ ๊ฒƒ์€ ๋” ๋‘๊บผ์šด ์ƒˆ ์—ฌ์„ฑ์ด ํ•„์š”ํ•˜์ง€ ์•Š์ง€๋งŒ ์‹ ๊ฒฝ๋ง์„ ํ›ˆ๋ จ์‹œํ‚ค๋Š” ๊ฒƒ์ผ ๋ฟ์ด๋ผ๊ณ  ์•„๋‚ด์—๊ฒŒ ์„ค๋ช…ํ•˜๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค.

๊ธฐ๊ณ„ ํ•™์Šต๊ณผ Tinder๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์‹œ๊ฐ„๋‹น 13๋ช…์˜ ์†Œ๋…€๋ฅผ ๋ฐ๋ฆฌ๋Ÿฌ ์˜ค๋Š” ๋ฐฉ๋ฒ•

๋ฐ์ดํŠธ ๋„คํŠธ์›Œํฌ์˜ ๋ฌธ์ œ์ 

๊ทธ๋Ÿฐ ์ž์›์ด์žˆ์—ˆ์Šต๋‹ˆ๋‹ค - Ashley Madison. โ€œ์ธ์ƒ์€ ์งง๋‹ค. ๋ฐ”๋žŒํ”ผ๋‹ค ์ฃผ์š” ์ฒญ์ค‘์€ ๋ถ€์—…์„ ์ฐพ๋Š” ๊ธฐํ˜ผ ๋‚จ์„ฑ์ž…๋‹ˆ๋‹ค. ์ˆ˜์ต ์ฐฝ์ถœ๋„ ์žฌ๋ฏธ ์žˆ์Šต๋‹ˆ๋‹ค. ํ‘œ์ค€ "์ข‹์•„์š” ๋ฐ ์“ฐ๊ธฐ์— ํฌ์ธํŠธ ์‚ฌ์šฉ"์™ธ์—๋„ ์ถ”์ ์—†์ด ์‚ฌ์šฉ์ž ๊ณ„์ •์„ ์‚ญ์ œํ•˜๊ธฐ ์œ„ํ•ด $ 19๋ฅผ ์š”์ฒญํ–ˆ์Šต๋‹ˆ๋‹ค.

2015๋…„ ์‚ฌ์ดํŠธ๊ฐ€ ์ž์—ฐ์Šค๋ ˆ ์œ ์ถœ๋˜๋ฉด์„œ 60GB์˜ ๊ฐœ์ธ์ •๋ณด๊ฐ€ ํผ๋ธ”๋ฆญ ๋„๋ฉ”์ธ์œผ๋กœ ์œ ์ถœ๋๋‹ค. ๋งŽ์€ ํŒŒ๊ดด๋œ ๊ฐ€์กฑ ์™ธ์—๋„ ์ด ์œ ์ถœ์€ ๋ถ„์„๊ฐ€๋“ค์—๊ฒŒ ๋งŽ์€ ํฅ๋ฏธ๋กœ์šด ์ •๋ณด๋ฅผ ์ œ๊ณตํ–ˆ์Šต๋‹ˆ๋‹ค. ๋‚˜๋Š” ํ•ญ์ƒ ๋ฐ์ดํŠธ ์‚ฌ์ดํŠธ์— ํ›จ์”ฌ ๋” ๋งŽ์€ ๋‚จ์ž๋“ค์ด ์žˆ๋‹ค๊ณ  ์˜์‹ฌํ–ˆ์ง€๋งŒ, ์ด ๊ฒฝ์šฐ ๊ฝค ํฅ๋ฏธ๋กœ์› ๋‹ค. ์• ๋„๋ฆฌ ๋‰ด๋น„์ธ  ๊ธฐ์ž ์œ ์ถœ ๋ฐ์ดํ„ฐ ๋ถ„์„ 5๋ฐฑ๋งŒ ๋ช…์˜ ์‚ฌ์šฉ์ž ์ค‘ 12๋ช…๋งŒ์ด ์‹ค์ œ ์†Œ๋…€ ๊ณ„์ •์ฒ˜๋Ÿผ ๋ณด์ด๊ณ  ์ •๊ธฐ์ ์œผ๋กœ ์‚ฌ์šฉ๋œ๋‹ค๋Š” ์‚ฌ์‹ค์„ ๋ฐœ๊ฒฌํ–ˆ์Šต๋‹ˆ๋‹ค. ๋‚˜๋จธ์ง€๋Š” ๋‚จ์„ฑ ๋ฐฉ๋ฌธ์ž์™€ ์ƒํ˜ธ ์ž‘์šฉํ•˜๋Š” ๋ด‡์ด์—ˆ์Šต๋‹ˆ๋‹ค.

๋‚จ์„ฑ ๊ณ„์ •์— ๋Œ€ํ•œ ์ด๋Ÿฌํ•œ ์šฐ์„ธ๋Š” ์ด ๋ฆฌ์†Œ์Šค๋ฟ๋งŒ ์•„๋‹ˆ๋ผ ๋Œ€๋ถ€๋ถ„์˜ ๋‹ค๋ฅธ ๋ฐ์ดํŠธ ์‚ฌ์ดํŠธ์—์„œ๋„ ์ผ๋ฐ˜์ ์ž…๋‹ˆ๋‹ค. ์ง€์ธ์— ๋Œ€ํ•ด ์‹ ์ค‘ํ•˜๊ฒŒ ์ƒ๊ฐํ•ด์•ผํ•˜๊ณ  ์†Œ๋…€๋Š” ๋“ฑ๋ก ๋งŒํ•˜๋ฉด๋˜๋Š”์ด ์˜์‹ฌ ํ•  ์—ฌ์ง€์—†์ด ๋ถˆ๊ณตํ‰ ํ•œ ์ƒํ™ฉ์„ ๋งŽ์ด ์ ‘ํ–ˆ์„ ๊ฒƒ์ž…๋‹ˆ๋‹ค. ์ด ํŒฌ ๊ตฐ์ค‘์˜ ์งˆ์€ ์ œ์ณ๋‘๊ณ  ์‚ฌ์‹ค์€ ๋ถ€์ธํ•  ์ˆ˜ ์—†์œผ๋ฉฐ ์ˆ˜์š”์™€ ๊ณต๊ธ‰์˜ ๊ท ํ˜•์ด ๋ถ„๋ช…ํžˆ ์†Œ๋…€๋“ค์—๊ฒŒ ์œ ๋ฆฌํ•˜๊ฒŒ ์ด๋™ํ–ˆ์Šต๋‹ˆ๋‹ค.

ํ‹ด๋” ๊ธฐ๋Šฅ

๊ธฐ๊ณ„ ํ•™์Šต๊ณผ Tinder๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์‹œ๊ฐ„๋‹น 13๋ช…์˜ ์†Œ๋…€๋ฅผ ๋ฐ๋ฆฌ๋Ÿฌ ์˜ค๋Š” ๋ฐฉ๋ฒ•
์  ๋” ๊ด€๊ณ„์—์„œ ์ด์ƒ์ ์ธ ๋ฌด์ฐจ๋ณ„ ๋Œ€์ž…

์ด ํ”Œ๋žซํผ์˜ ์ฃผ์š” ํŠน์ง•์€ ์ง€์ธ๋‹น ์ €๋ ดํ•œ ๋น„์šฉ์ž…๋‹ˆ๋‹ค. ๋‘ ๋ฒˆ์˜ ์Šค ์™€์ดํ”„์˜ ์ผ์น˜๋กœ ์ถฉ๋ถ„ํ•˜๋ฉฐ ์ด๋ฏธ ์ž ์žฌ์ ์œผ๋กœ ํฅ๋ฏธ๋กœ์šด ์‚ฌ๋žŒ๊ณผ ์ด์•ผ๊ธฐํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค. ๋ฌธ์ œ๋Š” ๊ฐ™์€ ์„ฑ๋ณ„ ๋ถˆ๊ท ํ˜•์ด ๋Œ€๋ถ€๋ถ„์˜ ์†Œ๋…€๋“ค์ด ํ•˜๋ฃจ์— ์ˆ˜์‹ญ ๊ฐœ์˜ ์„ฑ๋ƒฅ์„ ๊ฐ–๊ฒŒ ๋œ๋‹ค๋Š” ์‚ฌ์‹ค๋กœ ์ด์–ด์ง„๋‹ค๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค. ์ด๊ฒƒ์€ ๊ทธ๋“ค์ด ๋‹ค๋ฅธ ํ›„๋ณด์ž๋“ค ์‚ฌ์ด์—์„œ ๋‹น์‹ ์—๊ฒŒ ๊ด€์‹ฌ์„ ๊ธฐ์šธ์ผ ์‹œ๊ฐ„์ด ์—†์„ ๊ฐ€๋Šฅ์„ฑ์ด ๋†’๋‹ค๋Š” ๊ฒƒ์„ ์˜๋ฏธํ•ฉ๋‹ˆ๋‹ค.

ํ”Œ๋žซํผ์ด ์ˆ˜์˜๋ณต ์ฐจ๋ฆผ์˜ ์‚ฌ์ง„์„ XNUMX์ดˆ ๋™์•ˆ ๋ณด๊ฑฐ๋‚˜ ํŠธ๋ Œ๋””ํ•œ ์ฐฉ์ƒ‰ ์ž๋™์ฐจ๋ฅผ ์šด์ „ํ•จ์œผ๋กœ์จ ์‚ฌ๋žŒ์˜ ๊นŠ์€ ๋‚ด๋ฉด ์„ธ๊ณ„๋ฅผ ํ‰๊ฐ€ํ•  ๊ธฐํšŒ๊ฐ€ ๊ฑฐ์˜ ์—†๋‹ค๋Š” ๊ฒƒ์€ ๋ถ„๋ช…ํ•ฉ๋‹ˆ๋‹ค. ๋”ฐ๋ผ์„œ ์‚ฌ์ง„์—์„œ ๋‹จ์ˆœํžˆ ์‹ ์„ฑํ•˜๊ฒŒ ๋ณด์ด์ง€ ์•Š๋Š”๋‹ค๋ฉด ์ž…์–‘์„ ํ†ตํ•ด ํ™•๋ฅ ์„ ๋†’์ผ ์ˆ˜๋ฐ–์— ์—†์Šต๋‹ˆ๋‹ค. r ์ „๋žต ์ผ๋ถ€ ์ข…์—์„œ๋Š”. ๊ฐ„๋‹จํžˆ ๋งํ•ด์„œ, ์šฐ๋ฆฌ๋Š” ์œก์ข… ์„ฑ๊ณต์˜ ๊ธฐํšŒ๋ฅผ ๋†’์ด๊ธฐ ์œ„ํ•ด ๋ฌด์ฐจ๋ณ„ ๋Œ€์ž…ํ•˜๊ณ  ์–‘์„ ๋Š˜๋ฆด ๊ฒƒ์ž…๋‹ˆ๋‹ค. ๋•Œ๋•Œ๋กœ ์Œ์‹๊ณผ ์ˆ˜๋ฉด์œผ๋กœ ์ฃผ์˜๊ฐ€ ์‚ฐ๋งŒํ•ด์ง€๊ณ  ์Šค ์™€์ดํ”„๊ฐ€ ์ œํ•œ๋˜๊ธฐ ๋•Œ๋ฌธ์— ์ž๋™ํ™”๊ฐ€ ๊ท€ํ•˜์˜ ์ทจํ–ฅ์— ๊ฐ€์žฅ ์ ํ•ฉํ•œ ์†Œ๋…€ ๋˜๋Š” ๋‚จ์„ฑ์„ ์„ ํƒํ•˜๋Š” ๊ฒƒ์„ ์„ ํ˜ธํ•  ๊ฒƒ์ž…๋‹ˆ๋‹ค. ์ž‘์€ ๋นจ๊ฐ„ ๋จธ๋ฆฌ ๋˜๋Š” ํ‚ค๊ฐ€ ํฐ ๊ฐˆ์ƒ‰ ๋จธ๋ฆฌ - ์ด๊ฒƒ์€ ๋‹น์‹ ์—๊ฒŒ ๋‹ฌ๋ ค ์žˆ์Šต๋‹ˆ๋‹ค.

๋ฐ์ดํ„ฐ ์ˆ˜์ง‘

์šฐ์„  ์ •์ƒ์ ์ธ ์ •ํ™•๋„๋ฅผ ์œ„ํ•ด์„œ๋Š” ๋งŽ์€ ๋ฐ์ดํ„ฐ๊ฐ€ ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค. ๊ธฐ๊ณ„ ํ•™์Šต์„ ๋‹ค๋ฃจ์–ด ๋ณธ ์‚ฌ๋žŒ์ด๋ผ๋ฉด ๋ˆ„๊ตฌ๋‚˜ ์˜ฌ๋ฐ”๋ฅด๊ฒŒ ์กฐํ•ฉ๋˜๊ณ  ๋ ˆ์ด๋ธ”์ด ์ง€์ •๋œ ๋ฐ์ดํ„ฐ ์„ธํŠธ๋ฅผ ์ž…๋ ฅํ•˜๋Š” ๊ฒƒ์ด ์–ผ๋งˆ๋‚˜ ์–ด๋ ค์šด์ง€ ์•Œ๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค. ์ด๋ก ์ ์œผ๋กœ Instagram์ด๋‚˜ ๋‹ค๋ฅธ ์†Œ์…œ ๋„คํŠธ์›Œํฌ์™€ ๊ฐ™์€ ์œ ์‚ฌํ•œ ๋ฆฌ์†Œ์Šค๋Š” ๋ฐ์ดํ„ฐ ์†Œ์Šค๋กœ ์ ํ•ฉํ•ฉ๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ ๋ฏธ๋ž˜์— ๋„คํŠธ์›Œํฌ๊ฐ€ ์ž‘๋™ํ•  ์ƒ˜ํ”Œ์— ๋Œ€ํ•ด ํ•™์Šตํ•˜๋Š” ๊ฒƒ์ด ๊ฐ€์žฅ ์ข‹์Šต๋‹ˆ๋‹ค.

์ €์žฅ์†Œ๋ฅผ ๊ธฐ์ดˆ๋กœ ์‚ผ์ž ํ‹ด๋” ์ž๋™ํ™”. Tinder์˜ ์‚ฌ์ง„์€ ํ•ญ์ƒ ๊ณต๊ฐœ๋˜์ง€๋งŒ "์ข‹์•„์š”" ๊ธฐ๋Šฅ์€ ์ด๋ฏธ ์ œํ•œ๋˜์–ด ์žˆ์Šต๋‹ˆ๋‹ค. ๋”ฐ๋ผ์„œ ๋ฐ˜๊ฒฝ ๋‚ด์˜ ๋ชจ๋“  ์ƒ๋ฌผ์„ ์ถ”์ถœํ•˜์—ฌ ์‹ ์ค‘ํ•˜๊ฒŒ ํ‘œ์‹œํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ์‹œ์ž‘ํ•˜๋ ค๋ฉด ๋งค์šฐ ๊ฐ„๋‹จํ•œ ์Šคํฌ๋ฆฝํŠธ๋ฅผ ์‚ฌ์šฉํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

from skimage.io import imread, imsave, imshow, show
import matplotlib.pyplot as plt
import pynder
from helpers import get_access_token, get_login_credentials
from io_helper import save_image

email, password, FBID = get_login_credentials()
FBTOKEN = get_access_token(email, password)
session = pynder.Session(facebook_token=FBTOKEN)

while True:
    users = session.nearby_users()
    for user in users:
        photos = user.get_photos()
        print("Fetched user photos..")
        for photo in photos:
            print(photo)
            image = imread(photo)
            imshow(image)
            show()

            input_string = "Write 1 to like. Write 2 to dislike."
            ans = str(input(input_string)).lower()

            if ans == "1":
                save_image(image, photo, True)
            else:
                save_image(image, photo, False)

๋‹จ ๋‘ ๊ฐœ์˜ ๋ฒ„ํŠผ์œผ๋กœ ๊ฐ€๋Šฅํ•œ ํ•œ ๋นจ๋ฆฌ ๋ฐ์ดํ„ฐ ์„ธํŠธ๋ฅผ ๋งˆํฌ์—…ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ฃผ์š” ํ•จ์ •์€ werkzeug ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๊ฐ€ ์ด์ „ ๋ฒ„์ „๊ณผ์˜ ํ˜ธํ™˜์„ฑ์„ ๊นจ๋œจ๋ฆฌ๊ณ  ๊ฐ•์ œ๋กœ ๋‹ค์šด๊ทธ๋ ˆ์ด๋“œํ•ด์•ผ ํ•œ๋‹ค๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค. ๊ทธ๋ ‡์ง€ ์•Š์œผ๋ฉด ์ด ์˜ค๋ฅ˜๊ฐ€ ๋ฐœ์ƒํ•ฉ๋‹ˆ๋‹ค.

Traceback (most recent call last):
  File "img_scrape.py", line 4, in <module>
    from helpers import get_access_token, get_login_credentials
  File "/home/someone/tmp/TinderAutomation/helpers.py", line 1, in <module>
    import robobrowser
  File "/home/someone/tmp/TinderAutomation/venv/lib/python3.6/site-packages/robobrowser/__init__.py", line 3, in <module>
    from .browser import RoboBrowser
  File "/home/someone/tmp/TinderAutomation/venv/lib/python3.6/site-packages/robobrowser/browser.py", line 8, in <module>
    from werkzeug import cached_property
ImportError: cannot import name 'cached_property'

๋”ฐ๋ผ์„œ werkzeug==0.16.1์€ requirements.txt์— ์ž‘์„ฑํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋ฉด ์ด๋ฅ™ํ•ฉ๋‹ˆ๋‹ค.
๋‘ ๋ฒˆ์งธ ๋ฌธ์ œ๋Š” ๋ฐ”๋กœ ์ด ํ† ํฐ์„ ์–ป๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค. ์ €์žฅ์†Œ์˜ ํ‘œ์ค€ ๋ฐฉ๋ฒ•์€ ๋‚˜์—๊ฒŒ ์ ํ•ฉํ•˜์ง€ ์•Š์•˜์ง€๋งŒ ๊ฐœ๋ฐœ์ž ์ฝ˜์†”์—์„œ ์–ป์„ ์ˆ˜ ์žˆ์—ˆ์Šต๋‹ˆ๋‹ค. ์ด๋ ‡๊ฒŒ ํ•˜๋ ค๋ฉด ๋‹ค์Œ์œผ๋กœ ์ด๋™ํ•˜์‹ญ์‹œ์˜ค. ๋งํฌ POST ์š”์ฒญ์— ๋Œ€ํ•œ ์‘๋‹ต์„ www.facebook.com/v2.6/dialog/oauth/confirm?dpr=1. ๋‚ด๋ถ€์—์„œ 'access_token'์„ ์ฐพ๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค. ์–ด๋–ค ์ด์œ ๋กœ ์ฒ˜์Œ์—๋Š” ์ž‘๋™ํ•˜์ง€ ์•Š์•˜์ง€๋งŒ ๋‚˜์ค‘์— ์ฐพ์•„์„œ ์Šคํฌ๋ฆฝํŠธ์— ํ•˜๋“œ์ฝ”๋”ฉํ–ˆ์Šต๋‹ˆ๋‹ค.

๋ฐ์ดํ„ฐ ์„ธํŠธ ์š”๊ตฌ ์‚ฌํ•ญ

๊ธฐ๊ณ„ ํ•™์Šต ๋ฐ์ดํ„ฐ ์„ธํŠธ์—๋Š” ๋ช‡ ๊ฐ€์ง€ ์ฃผ์š” ์š”๊ตฌ ์‚ฌํ•ญ์ด ์žˆ์Šต๋‹ˆ๋‹ค.

  1. ์ ์ ˆ
  2. ์ผ๋ฅ 
  3. ๋‹ค์–‘์„ฑ

์ด ๊ฒฝ์šฐ ์ถฉ๋ถ„ํ•˜๋ ค๋ฉด ์ ์ ˆํ•œ ๋ชจ๋ธ์„ ๊ตฌ์ถ•ํ•˜๊ธฐ ์œ„ํ•ด ์ตœ์†Œ 10000์žฅ์˜ ์‚ฌ์ง„์ด ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค. ์˜ˆ, ๋งŽ์ด ์žˆ์Šต๋‹ˆ๋‹ค. ๊ทธ๋ž˜์„œ ๋‹ค์Œ๊ณผ ๊ฐ™์€ ์„œ๋น„์Šค๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค. ์•„๋งˆ์กด ๊ธฐ๊ณ„ ํ„ฐํฌ, ์œ ๋ฃŒ๋กœ ๋ฐ์ดํ„ฐ ์„ธํŠธ์˜ ๋งˆํฌ์—…์„ ๋‹ค๋ฅธ ์‚ฌ๋žŒ์—๊ฒŒ ์•„์›ƒ์†Œ์‹ฑํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๋ฐ˜๋ฉด์— ๋ด‡์ด ์•„๋ฆ„๋‹ค์šด ๋‹ฌ๋น› ์–ผ๊ตด์˜ ์•„์‹œ์•„ ์†Œ๋…€๋ฅผ ์ข‹์•„ํ•˜๊ฒŒ ํ•˜์‹œ๊ฒ ์Šต๋‹ˆ๊นŒ, ์•„๋‹ˆ๋ฉด ์ธ๋„์— ๋ฟŒ๋ฆฌ๋ฅผ ๋‘” ๋˜‘๊ฐ™์ด ์•„๋ฆ„๋‹ค์šด ์†Œ๋…€๋ฅผ ์ข‹์•„ํ•˜๊ฒŒ ํ•˜์‹œ๊ฒ ์Šต๋‹ˆ๊นŒ? ๊ทธ๋ž˜๋„ ๋ชจ๋ธ์€ ๊ท€ํ•˜์˜ ์ทจํ–ฅ์„ ์ •ํ™•ํžˆ ๋ฐ˜์˜ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

๋‹ค์–‘์„ฑ์—๋Š” ํŠน๋ณ„ํ•œ ๋ฌธ์ œ๊ฐ€ ์—†์œผ๋ฉฐ ๋ชจ๋“  ์‚ฌ์ง„์€ ๋‹ค์–‘ํ•œ ๊ฐ๋„์™€ ์กฐ๋ช…์œผ๋กœ ์ œ๊ณต๋ฉ๋‹ˆ๋‹ค. ์•ˆ๊ฒฝ, ๋“œ๋ ˆ์Šค, ์ˆ˜์˜๋ณต, ์Šคํ‚ค๋ณต. ๋ฐ์ดํ„ฐ ์„ธํŠธ์˜ ๊ท ์ผ์„ฑ์œผ๋กœ ์ธํ•ด ๋ฌธ์ œ๊ฐ€ ๋ฐœ์ƒํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ด์ƒ์ ์œผ๋กœ๋Š” ์ƒ˜ํ”Œ์„ ๋งˆํฌ์—…ํ•  ๋•Œ ๊ฑฐ์˜ ๋™์ผํ•œ ๋ถ€๋ถ„์œผ๋กœ ๊ตฌ์„ฑ๋˜์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. "๋น„๋šค์–ด์ง„" ๋ฐ์ดํ„ฐ ์„ธํŠธ๊ฐ€ ์žˆ๋Š” ๊ฒฝ์šฐ ๋‹ค๋ฅธ ์†Œ์Šค์˜ ์‚ฌ์ง„์œผ๋กœ ํฌ์„ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ๋” ์˜ˆ์œ ๊ฒƒ์„ ์ถ”๊ฐ€ํ•ด์•ผ ํ•˜๊ฑฐ๋‚˜ ๊ทธ ๋ฐ˜๋Œ€์˜ ๊ฒฝ์šฐ๋„ ๋งˆํฌ์—… ๊ฒฐ๊ณผ์— ๋”ฐ๋ผ ๊ฒฐ์ •๋ฉ๋‹ˆ๋‹ค. ๋‚˜๋Š” 60% ๊ท€์—ฌ์šด ์˜์—ญ์—์„œ ๋ญ”๊ฐ€๋ฅผ ์–ป์—ˆ๋‹ค. ๋‚ด๊ฐ€ ๋„ˆ๋ฌด ๊นŒ๋‹ค๋กญ์ง€ ์•Š๊ฑฐ๋‚˜ ์šด์ด ์ข‹์•„์„œ ์ฃผ๋ณ€์— ์˜ˆ์œ ์—ฌ์ž๊ฐ€ ๋งŽ๋‹ค.

๋‚˜๋Š” ๋˜ํ•œ ๊ทธ๋“ค ์‚ฌ์ด์— ๋งŽ์€ ๋ด‡์ด ์žˆ๋‹ค๋Š” ๊ฐ€์„ค์„ ๋ฌด์‹œํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ์šฐ๋ฆฌ๋Š” ๋‹ค๋ฅธ ๋ด‡์„ ์ข‹์•„ํ•  ๋ด‡์„ ํ›ˆ๋ จ์‹œํ‚ต๋‹ˆ๋‹ค. ์—ฌ๊ธฐ์—๋Š” ์•ฝ๊ฐ„์˜ ์•„์ด๋Ÿฌ๋‹ˆ๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค.

๋ฐ์ดํ„ฐ ์ฒ˜๋ฆฌ

ํƒœ๊ทธ๊ฐ€ ์ง€์ •๋œ ์‚ฌ์ง„์ด ๋งŽ์ด ์žˆ์ง€๋งŒ ๋งค์šฐ ํ˜ผํ•ฉ๋˜์–ด ์žˆ์Šต๋‹ˆ๋‹ค. ๋‚ฎ, ๋ฐค, ๋“ฑ ๋’ค์—์„œ. ์œ ๊ฐ์Šค๋Ÿฝ๊ฒŒ๋„ ์ƒ˜ํ”Œ์ด ๋งค์šฐ ๊ณ ๋ฅด์ง€ ์•Š๊ธฐ ๋•Œ๋ฌธ์— ๋ฐ˜๋Œ€ ๊ฐ๋„์—์„œ ์‚ฌ์ง„์„ ํ›ˆ๋ จํ•˜๋Š” ๊ฒƒ์ด ํŠน๋ณ„ํžˆ ๋ถˆ๊ฐ€๋Šฅํ•˜๋‹ค๋Š” ๊ฒƒ์„ ์ดํ•ดํ•ฉ๋‹ˆ๋‹ค. ๋”ฐ๋ผ์„œ ๊ฐ€์žฅ ์ข‹์€ ์„ ํƒ์€ ์–ผ๊ตด์„ "์˜ˆ์จ"์˜ ๊ธฐ์ค€ ๊ธฐํ˜ธ๋กœ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค. ์—ฌ์ „ํžˆ ์šฐ๋ฆฌ์—๊ฒŒ๋Š” ๋‹ค๋ฅธ ์˜์žฅ๋ฅ˜์™€ ๋งˆ์ฐฌ๊ฐ€์ง€๋กœ ์ด๊ฒƒ์ด ํ•ต์‹ฌ ๋งค๊ฐœ ๋ณ€์ˆ˜์ž…๋‹ˆ๋‹ค.

๋”ฐ๋ผ์„œ ์šฐ๋ฆฌ๋Š” ํ•˜๋ฅด ํญํฌ. ์ด ์•Œ๊ณ ๋ฆฌ์ฆ˜์€ ์ž˜๋ชป๋œ ๊ธ์ • ์˜ค๋ฅ˜ ๋น„์œจ์ด ๋‚ฎ์€ ์ด๋ฏธ์ง€์—์„œ ์–ผ๊ตด์„ ์ฐพ์„ ์ˆ˜ ์žˆ๋Š” ๋›ฐ์–ด๋‚œ ์•Œ๊ณ ๋ฆฌ์ฆ˜์ž…๋‹ˆ๋‹ค.

๊ธฐ๊ณ„ ํ•™์Šต๊ณผ Tinder๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์‹œ๊ฐ„๋‹น 13๋ช…์˜ ์†Œ๋…€๋ฅผ ๋ฐ๋ฆฌ๋Ÿฌ ์˜ค๋Š” ๋ฐฉ๋ฒ•
๋Œ€ํ•œ ์„ค๋ช…์„œ์— ์ž์„ธํžˆ ์„ค๋ช…๋˜์–ด ์žˆ์Šต๋‹ˆ๋‹ค. OpenCV

๋‹ค์Œ ๋‹จ๊ณ„์—์„œ๋Š” ์ƒ˜ํ”Œ์— ์–ผ๊ตด๋งŒ ํฌํ•จ๋œ ํ›„ ์ƒ‰์ƒ์„ ์ œ๊ฑฐํ•˜๋Š” ๊ฒƒ์ด ์ข‹์Šต๋‹ˆ๋‹ค. ์‚ฌ์‹ค, ์•„๋ฆ„๋‹ค์šด ํŒŒ๋ž€์ƒ‰ ํŒ๋„๋ผ ์—ฌ์„ฑ๊ณผ ๋…น์ƒ‰ ํ”ผ๋ถ€ ๋ฏธ์ธ ์ค‘์—์„œ ์„ ํƒํ•ด์•ผ ํ•  ๊ฐ€๋Šฅ์„ฑ์€ ๊ฑฐ์˜ ์—†์Šต๋‹ˆ๋‹ค.

๊ธฐ๊ณ„ ํ•™์Šต๊ณผ Tinder๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์‹œ๊ฐ„๋‹น 13๋ช…์˜ ์†Œ๋…€๋ฅผ ๋ฐ๋ฆฌ๋Ÿฌ ์˜ค๋Š” ๋ฐฉ๋ฒ•
์ถœ์ฒ˜

Hue ํ”ผํ”Œ์˜ ๊ฒฝ์šฐ ํ”ผ๋ถ€์ƒ‰ ๋งค๊ฐœ๋ณ€์ˆ˜๋Š” ๊ท€์—ฌ์›€ ์ ์ˆ˜์— ํฌ๊ฒŒ ๊ธฐ์—ฌํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.
๋”ฐ๋ผ์„œ ์‹ ๊ฒฝ๋ง์˜ ์ž‘์—…์„ ๋‹จ์ˆœํ™”ํ•˜๊ณ  ๊ทธ๋ ˆ์ด์Šค์ผ€์ผ๋งŒ ๋‚จ๊ฒจ๋‘˜ ๊ฐ€์น˜๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค.

๋ชจ๋ธ ๊ตฌ์ถ•

์ข‹์€ ๋น„๋””์˜ค ์นด๋“œ์™€ CUDA๊ฐ€ ์—†์œผ๋ฉด ์ ์ ˆํ•œ ์‹œ๊ฐ„ ๋‚ด์— ํ›ˆ๋ จ๋œ ๋ชจ๋ธ์„ ์–ป์„ ์ˆ˜ ์—†์„ ๊ฐ€๋Šฅ์„ฑ์ด ๋†’๋‹ค๋Š” ์ ์„ ๋ฐ”๋กœ ๋ง์”€๋“œ๋ฆฌ๊ณ  ์‹ถ์Šต๋‹ˆ๋‹ค. ๋”ฐ๋ผ์„œ ํŠน์ˆ˜ ํด๋ผ์šฐ๋“œ ๋˜๋Š” python-CUDA๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์ฆ‰์‹œ ๊ณ„์‚ฐ์„ ๋ชฉํ‘œ๋กœ ํ•ฉ๋‹ˆ๋‹ค.

๋ฆฌํฌ์ง€ํ† ๋ฆฌ ์ž‘์„ฑ์ž์˜ ๊ธฐ๋ณธ 72๊ณ„์ธต ์˜ˆ์ œ๋ฅผ ๊ฐ€์ ธ์™”๋Š”๋ฐ ๋†€๋ž๊ฒŒ๋„ ์•ฝ XNUMX%์˜ ์ •ํ™•๋„๋ฅผ ๋ณด์—ฌ ์ƒ๋‹นํžˆ ์ข‹์€ ๊ฒฐ๊ณผ๋ฅผ ๋ณด์˜€์Šต๋‹ˆ๋‹ค.

model = Sequential()
model.add(Convolution2D(32, 3, 3, activation='relu', input_shape=(img_size, img_size, 3)))
model.add(MaxPooling2D(pool_size=(2,2)))

model.add(Convolution2D(32, 3, 3, activation='relu'))
model.add(MaxPooling2D(pool_size=(2,2)))

model.add(Convolution2D(64, 3, 3, activation='relu'))
model.add(MaxPooling2D(pool_size=(2,2)))
          
model.add(Flatten())
model.add(Dense(128, activation='relu'))
model.add(Dropout(0.5))
model.add(Dense(2, activation='softmax'))

adam = optimizers.SGD(lr=1e-4, decay=1e-6, momentum=0.9, nesterov=True)
model.compile(loss='categorical_crossentropy',
              optimizer= adam,
              metrics=['accuracy'])

์ข‹์€ ์ƒ˜ํ”Œ์ด ์žˆ์œผ๋ฉด ์‹คํ–‰ ๊ฐ€๋Šฅํ•œ ๋ชจ๋ธ์„ ์–ป๋Š” ๋ฐ ์ถฉ๋ถ„ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

๋ด‡ ์‹คํ–‰

๊ธฐ๊ณ„ ํ•™์Šต๊ณผ Tinder๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์‹œ๊ฐ„๋‹น 13๋ช…์˜ ์†Œ๋…€๋ฅผ ๋ฐ๋ฆฌ๋Ÿฌ ์˜ค๋Š” ๋ฐฉ๋ฒ•

์•„์ด๋””์–ด๋ฅผ ์‹ ์†ํ•˜๊ฒŒ ํ…Œ์ŠคํŠธํ•  ์ˆ˜ ์žˆ๋Š” ๊ธฐ์„ฑํ’ˆ ์ €์žฅ์†Œ ์ž‘์„ฑ์ž์—๊ฒŒ ๊ฐ์‚ฌ๋“œ๋ฆฝ๋‹ˆ๋‹ค. ์‹ค์ œ๋กœ ๊ธฐ๋ณธ ๋ฒ„์ „์—์„œ ๋งค์šฐ ์ž˜ ์ž‘๋™ํ•˜๋ฉฐ ์›์น™์ ์œผ๋กœ ๋‹น์‚ฌ์—์„œ ์‹œ์ž‘ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ค€๋น„๋œ ์ž„๋Œ€ ์„œ๋ฒ„. ์•„์ง ํ›ˆ๋ จํ•  ์ˆ˜๋Š” ์—†์Šต๋‹ˆ๋‹ค. ํ˜„์žฌ๋กœ์„œ๋Š” ๊ณ„์‚ฐ์„ ์œ„ํ•œ CUDA ์ง€์›์ด ์žˆ๋Š” ๊ฐ€์ƒ ๋จธ์‹ ์„ ์ œ๊ณตํ•˜์ง€ ์•Š์ง€๋งŒ ๋ฌธ์ œ ์—†์ด ์—ฐ์ค‘๋ฌดํœด ์ž‘์—…์„ ์‹คํ–‰ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๋ด‡์€ ๋งค์šฐ ๊ฐ€๋ณ๊ธฐ ๋•Œ๋ฌธ์— ์‚ฌ์šฉํ•œ ๋ฆฌ์†Œ์Šค์— ๋Œ€ํ•œ ์ง€๋ถˆ๋กœ ๊ด€์„ธ๋ฅผ ๋ถ€๊ณผํ•˜๋Š” ๊ฒƒ์ด ๋” ์œ ๋ฆฌํ•  ๊ฒƒ์ž…๋‹ˆ๋‹ค.

์กฐ์‚ฌ ๊ฒฐ๊ณผ

๊ธฐ๊ณ„ ํ•™์Šต๊ณผ Tinder๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์‹œ๊ฐ„๋‹น 13๋ช…์˜ ์†Œ๋…€๋ฅผ ๋ฐ๋ฆฌ๋Ÿฌ ์˜ค๋Š” ๋ฐฉ๋ฒ•
๋‚˜๋Š” ๋งค์šฐ ๊ท€์—ฌ์šธ ๊ฒƒ์ž…๋‹ˆ๋‹ค. ๊ทธ๋ฆฌ๊ณ  ๋‚˜๋Š” ํ’๋ถ€ํ•œ ๋‚ด๋ฉด ์„ธ๊ณ„๋ฅผ ๊ฐ€์ง€๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค. ํ•œ ์‹œ๊ฐ„ ์•ˆ์— 13๊ฒฝ๊ธฐ ์ง€์—ญ์—์„œ ๋ฌด์–ธ๊ฐ€๋ฅผ ์–ป์—ˆ์Šต๋‹ˆ๋‹ค. ๋˜ํ•œ ์†Œ๋…€๋“ค์ด ๋จผ์ € ์—ฌ๋Ÿฌ ๋ฒˆ ์ผ์Šต๋‹ˆ๋‹ค.
๊ทธ ๊ฒฐ๊ณผ ๊ธฐ๊ณ„ ํ•™์Šต๊ณผ ๋ฐ์ดํ„ฐ ๋งˆํฌ์—…๋งŒ ํ•˜๋ ค๊ณ  ์™”๋‹ค๋Š” ์•„์ฃผ ์ข‹์€ ๋Œ€ํ™”๋ฅผ ์–ป์—ˆ์Šต๋‹ˆ๋‹ค. ์†Œ๋…€ ์ค‘ ํ•œ ๋ช…์€ ์ž์‹ ์ด ๊ฐœ๋ฐœ์ž์ด๊ธฐ ๋•Œ๋ฌธ์— ๋งค์šฐ ๊ด€์‹ฌ์ด ๋งŽ์•˜์Šต๋‹ˆ๋‹ค. ๊ทธ๋…€๊ฐ€ ๊ฒฐ๊ตญ Habrรฉ์—์„œ ์ด ๊ฒŒ์‹œ๋ฌผ์„ ์ฝ์„ ๊ฒƒ์ด๋ผ๋Š” ๊ฐ•ํ•œ ๋Š๋‚Œ์ด ์žˆ์Šต๋‹ˆ๋‹ค. Oksana๊ฐ€ ๋‚ด ์ต๋ช…์„ ์œ ์ง€ํ•˜๊ธฐ๋ฅผ ์ •๋ง๋กœ ๋ฐ”๋ž๋‹ˆ๋‹ค. ๐Ÿ™‚
*์†์„ ํ”๋“ค๋ฉฐ ์ธ์‚ฌํ•œ๋‹ค.

๋ฌธ์ œ์˜ ์œค๋ฆฌ์  ์ธก๋ฉด์— ๋Œ€ํ•ด ์กฐ๊ธˆ

์†”์งํžˆ ๋งํ•ด์„œ ๋‚˜๋Š” ๋‚จ์ž์™€ ์—ฌ์ž ์‚ฌ์ด์˜ ๊ด€๊ณ„๋ฅผ ๋กœ๋ด‡ํ™”ํ•œ๋‹ค๋Š” ์ƒ๊ฐ์ด ์ „ํ˜€ ๋งˆ์Œ์— ๋“ค์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ํ™€๋กœ ์„œ ์žˆ๋Š” ์–ผ์–ด๋ถ™์€ ์ด๋ฐฉ์ธ์˜ ์–ด๊นจ์— ์žฌํ‚ท์„ ๊ฑธ์ณ์ฃผ๋Š” ๊ฒƒ์€ ๋งค์šฐ ์˜ณ์€ ์ผ์ž…๋‹ˆ๋‹ค. ๋˜๋Š” ์—ฌ๋ฆ„ ์นดํŽ˜์—์„œ ์˜ˆ์œ ์†Œ๋…€์—๊ฒŒ ๋‹ค๊ฐ€๊ฐ€ ํ•จ๊ป˜ ์ปคํ”ผ๋ฅผ ๋งˆ์‹ ๋‹ค. ๋ชจ๋‹ˆํ„ฐ ๋’ค์—์„œ ๋‚˜๊ฐ€์‹ญ์‹œ์˜ค.

์—ฌ๋ฆ„์ฏค. ์นœํ•ด์งˆ ์‹œ๊ฐ„์ž…๋‹ˆ๋‹ค.

๊ธฐ๊ณ„ ํ•™์Šต๊ณผ Tinder๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์‹œ๊ฐ„๋‹น 13๋ช…์˜ ์†Œ๋…€๋ฅผ ๋ฐ๋ฆฌ๋Ÿฌ ์˜ค๋Š” ๋ฐฉ๋ฒ•

๊ธฐ๊ณ„ ํ•™์Šต๊ณผ Tinder๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์‹œ๊ฐ„๋‹น 13๋ช…์˜ ์†Œ๋…€๋ฅผ ๋ฐ๋ฆฌ๋Ÿฌ ์˜ค๋Š” ๋ฐฉ๋ฒ•

์ถœ์ฒ˜ : habr.com

์ฝ”๋ฉ˜ํŠธ๋ฅผ ์ถ”๊ฐ€