์์์ ์ผ๋ก ๋ฐ์ดํฐ ์์ง : ์ข ๋ฅ ๊ตฌ๋ถํ๊ธฐ
from google.cloud import vision
import io
import os
# ํ๊ฒฝ ๋ณ์๋ฅผ ์ค์ ํ๋ ๋ฐฉ๋ฒ
os.environ['GOOGLE_APPLICATION_CREDENTIALS'] = r"C:\Users\user\Desktop\google api\emoticon-438506-47c95f919cae.json"
# Vision API ํด๋ผ์ด์ธํธ ์์ฑ
client = vision.ImageAnnotatorClient()
# ์ด๋ฏธ์ง ์ฝ๊ธฐ
image_path = 'C:\\Users\\user\\Desktop\\google api\\loopy.png'
with io.open(image_path, 'rb') as image_file:
content = image_file.read()
# Vision API์ ์์ฒญ
image = vision.Image(content=content)
response = client.label_detection(image=image)
labels = response.label_annotations
# ๊ฒฐ๊ณผ ์ถ๋ ฅ
for label in labels:
print(f"Description: {label.description}, Score: {label.score}")
์ด ์ฌ์ง์ google vision api๋ฅผ ํ์ฉํ์ฌ ์ด๋ฏธ์ง ๋ถ์์ ํด ๋ณด์๋๋ฐ์
Description: Liquid, Score: 0.8188296556472778
Description: Font, Score: 0.7295830845832825
Description: Domestic pig, Score: 0.7196884751319885
Description: Magenta, Score: 0.6961780786514282
Description: Happy, Score: 0.6898753046989441
Description: Fashion accessory, Score: 0.6710424423217773
Description: Saving, Score: 0.6612657904624939
Description: Suidae, Score: 0.6568648815155029
Description: Art, Score: 0.6258362531661987
Description: Toy, Score: 0.6151468753814697
๋ถ์ ๊ฒฐ๊ณผ ํํฌ๋ผ์ง๋ก ์ธ์ํฉ๋๋ค..^^;;
๊ฒฐ๊ตญ ์์์ ์ผ๋ก ํด๋น ์บ๋ฆญํฐ ๊ฒ์ ํ ์ฌ๋,๋๋ฌผ,์บ๋ฆญํฐ,์คํ ๋ก ์ข ๋ฅ๋ฅผ ๋๋ด์ต๋๋ค.
์ ๊ฐ ๊ธฐํ ๋จ๊ณ์์ ์์งํ๊ธฐ๋ก ํ ๋ฐ์ดํฐ๋ ๋ค์๊ณผ ๊ฐ์๋ฐ์
ํ์ฌ๊น์ง ์์งํ ๊ฒ์ ๋ฐ์ค ๊ทธ์์ต๋๋ค.
์ด๋ชจํฐ์ฝ ์ด๋ฆ์๊ฐ๋ช์บ๋ฆญํฐ ์ ํ (๋๋ฌผ, ์ฌ๋, ์บ๋ฆญํฐ ๋ฑ)- ์ด๋ชจํฐ์ฝ ์คํ์ผ (๊ท์ฌ์ด, ์ ๋จธ๋ฌ์คํ, ๊ฐ์ฑ์ ์ธ ๋ฑ)
- ๋ฐ๋งค์ผ
์ธ๊ธฐ ์์- ์นดํ ๊ณ ๋ฆฌ (๊ฐ์ ํํ, ์ํฉ ํํ, ์ฐ์ , ํ์ฌ, ์น๊ตฌ, ๊ณ์ /์ด๋ฒคํธ ๊ด๋ จ ๋ฑ)
- 10๋,20๋,30๋ ๋ณ ์ธ๊ธฐ ์์
- ์ด๋ชจํฐ์ฝ ์๊ฐ์ SNS ํ๋ก์ฐ ์ซ์(์ ํ๋ธ,์ธ์คํ๊ทธ๋จ,์ ํ๋ธ ๋ฑ)
- ๊ฐ ์ด๋ชจํฐ์ฝ์ ํ๊ทธ
- ๋ฐ๋งค์ผ : ์นด์นด์ค ์ด๋ชจํฐ์ฝ์ต์์ ์ ๋ณด๋ฅผ ์ ๊ณตํ์ง ์์์ ์ ์ธ
- 10๋,20๋,30๋ ๋ณ ์ธ๊ธฐ ์์ : ๋ชจ๋ฐ์ผ์์๋ง ์ธ๊ธฐ ์์๋ฅผ ์ ๊ณตํ๊ณ ์นํ์ด์ง ์์๋ ์ฐ๋ น๋๋ณ ์ธ๊ธฐ ์์๋ฅผ ์ ๊ณตํ์ง ์๊ธฐ์ ์์ง ๋ถ๊ฐ
- ์ด๋ชจํฐ์ฝ ์๊ฐ์ SNS ์ซ์ : ์ธ์คํ๊ทธ๋จ์ ํ์ง ์๋ ์๊ฐ๊ฐ ๋ง๊ณ , ๊ทธ ๊ฒฐ๊ณผ ๋ฐ์ดํฐ ๊ฒฐ์ธก๊ฐ์ด ๋ง์์ ์ ์ธ
- ๊ฐ ์ด๋ชจํฐ์ฝ์ ํ๊ทธ : ์๋ ํฌ๋กค๋ง์ ํตํด ํ๊ทธ๋ฅผ ์์งํ๋ ค ํ์ผ๋ ์นด์นด์ค๋ ์นํฌ๋กค๋ง์ ๋ง์๋์๊ธฐ์ ์ ์ธ
์์์ ์ผ๋ก ๋ฐ์ดํฐ ์์ง : ์นดํ ๊ณ ๋ฆฌ ๊ธฐ์ค ์ค์ ํ ๊ตฌ๋ถํ๊ธฐ
์นดํ ๊ณ ๋ฆฌ๋ ํด๋น ๋ฐ์ดํฐ๋ฅผ ์ผ์/์ฐ์ /ํ์ฌ ํฌ๊ฒ 3๊ฐ๋ก ๊ตฌ๋ถํ์ฌ ๋๋์์ต๋๋ค.
์ฐ์ ์นดํ ๊ณ ๋ฆฌ ๋ถ๋ฅ ๊ธฐ์ค
1. ์ด๋ชจํฐ์ฝ ์ ๋ชฉ์ด ์ฐ์ ,์ปคํ,ํํธ,์ฌ๋ ๋ฑ ์ฐ์ ์ ๊ด๋ จ๋ ํค์๋๊ฐ ๋ค์ด๊ฐ ๊ฒฝ์ฐ
2. ์ด๋ชจํฐ์ฝ์ ์ปคํ๋ก ๋ณด์ด๋ ๋ ์์ ์บ๋ฆญํฐ๊ฐ ์กด์ฌํ ๊ฒฝ์ฐ
3. ์ด๋ชจํฐ์ฝ์ ์ ๋ฐ ์ด์์ด ํํธ, ์ฐ์ ๊ด๋ จ ๋ด์ฉ์ผ ๊ฒฝ์ฐ
์ฐ์ ์ ์ฌ๋, ๋ก๋งจ์ค ๊ด๋ จ ์ด๋ชจํฐ์ฝ์ด ํฌํจ๋ฉ๋๋ค.
ํํธ, ์ฌ๋ ํํ, ์ฐ์ธ ๊ฐ์ ์ํธ์์ฉ์ ๋ํ๋ด๋ ์ด๋ชจํฐ์ฝ์ ์ฐ์ ์นดํ ๊ณ ๋ฆฌ์ ์ํฉ๋๋ค.
ํ์ฌ ์นดํ ๊ณ ๋ฆฌ ๋ถ๋ฅ ๊ธฐ์ค
์ด๋ชจํฐ์ฝ ์ ๋ชฉ์ด ํ์ฌ,์ฌํ์ํ,์ง์ฅ ๋ฑ ํ์ฌ ๊ด๋ จ ํค์๋๊ฐ ๋ค์ด๊ฐ ๊ฒฝ์ฐ
์ ๋ฌด, ์คํธ๋ ์ค, ์ฑ๊ณผ ๋ฑ ์ง์ฅ๊ณผ ์ฌํ ์ํ์ ๋ํ ๋ชจ๋ ์ด๋ชจํฐ์ฝ์ด ํฌํจ๋ฉ๋๋ค.
์ง์ฅ์์ ํํ ๊ฒช๋ ๊ฐ์ ๊ณผ ์ํฉ์ ํํํ๋ ์ด๋ชจํฐ์ฝ์ ํฌํจํฉ๋๋ค.
์ผ์ ์นดํ ๊ณ ๋ฆฌ ๋ถ๋ฅ ๊ธฐ์ค
์ฐ์ ,ํ์ฌ๋ฅผ ์ ์ธํ ๋ชจ๋ ์ด๋ชจํฐ์ฝ์ ์ผ์ ์นดํ ๊ณ ๋ฆฌ๋ก ๋ถ๋ฅํ์์ต๋๋ค.
๊ฐ์ ์ด๋ ์ผ์ ํ๋์ ๋ํ๋ด๋ ๋ชจ๋ ์ด๋ชจํฐ์ฝ์ด ์ด ์นดํ ๊ณ ๋ฆฌ์ ์ํฉ๋๋ค.
์ผ์์ ์ธ ๋ํ์์ ์์ฃผ ์ฌ์ฉ๋๋ ๊ฐ์ ๋ฐ ์ํธ์์ฉ์ ํฌํจํฉ๋๋ค.
๋ฐ์ดํฐ ๋ผ๋ฒจ๋ง : google vision api๋ฅผ ํ์ฉํด ์ด๋ฏธ์ง ํน์ฑ ๋ฝ์๋ด๊ธฐ
์ด๋ชจํฐ์ฝ ์คํ์ผ์ ์ฃผ๊ด์ ์ผ๋ก ํ ์ ์๊ธฐ์ google cloud vision api๋ฅผ ์ฌ์ฉํด ์ด๋ชจํฐ์ฝ์ ํ์ ๊ณผ ๊ฐ์ ์ ๊ฐ์งํ๋ ค ํ์ต๋๋ค. ์์, ๋๋ฌผ, ํ๋จ, ์ฌ๋ ๋ฑ์ ๊ธฐ๋ณธ ๊ฐ์ ๋ ๋ฒจ์ ๊ฐ์งํด ์ด๋ชจํฐ์ฝ์ ์ฃผ์ ๊ฐ์ ํ์ ํ ํด๋น ์ด๋ชจํฐ์ฝ์ด ์ ๋จธ๋ฌ์คํ์ง, ๊ฐ์ฑ์ ์ธ์ง,๊ท์ฌ์ด์ง ๋ฑ์ ๋ถ๋ฅ ํ์ต๋๋ค.
import pandas as pd
from google.cloud import vision
import io
import os
# Google Cloud Vision API ํ๊ฒฝ ๋ณ์๋ฅผ ์ค์ ํ๋ ๋ฐฉ๋ฒ
os.environ['GOOGLE_APPLICATION_CREDENTIALS'] = r"C:\Users\user\Desktop\google api\emoticon-438506-47c95f919cae.json"
# Vision API ํด๋ผ์ด์ธํธ ์์ฑ
client = vision.ImageAnnotatorClient()
# ์ด๋ฏธ์ง ํด๋ ๊ฒฝ๋ก
image_folder = 'C:\\Users\\user\\Desktop\\google api\\'
# ๋ผ๋ฒจ์ ๊ธฐ๋ฐ์ผ๋ก ์ด๋ชจํฐ์ฝ ์คํ์ผ ๋ถ๋ฅ ํจ์
def classify_style(labels):
for label in labels:
if label.score >= 0.7: # ํ์ ์ ์๊ฐ 0.7 ์ด์์ธ ๋ผ๋ฒจ๋ง ์ฌ์ฉ
description = label.description.lower()
if 'cute' in description or 'adorable' in description:
return '๊ท์ฌ์ด'
elif 'funny' in description or 'humor' in description:
return '์ ๋จธ๋ฌ์คํ'
elif 'emotional' in description or 'heart' in description:
return '๊ฐ์ฑ์ ์ธ'
return '๊ธฐํ'
# ๋ฐ์ดํฐ๋ฅผ ์ ์ฅํ ๋ฆฌ์คํธ ์ด๊ธฐํ
data = []
# 1๋ถํฐ 100๊น์ง์ PNG ํ์ผ์ ์ฒ๋ฆฌ
for i in range(1, 201):
image_filename = str(i).zfill(4) + '.png' # ํ์ผ๋ช
์ 0001, 0002, ..., 0200 ํ์์ผ๋ก ๋ณ๊ฒฝ
image_path = os.path.join(image_folder, image_filename)
# ์ด๋ฏธ์ง ํ์ผ์ด ์กด์ฌํ๋์ง ํ์ธ
if os.path.exists(image_path):
with io.open(image_path, 'rb') as image_file:
content = image_file.read()
# Vision API์ ์์ฒญ
image = vision.Image(content=content)
response = client.label_detection(image=image)
labels = response.label_annotations
# 0.7 ์ด์์ ๋ผ๋ฒจ๋ง ์ถ์ถ (ํ๋ฅ ์ ์ ์ธํ๊ณ ์ค๋ช
๋ง ์ถ์ถ)
selected_labels = [label.description for label in labels if label.score >= 0.7]
# ์คํ์ผ ๋ถ๋ฅ
style = classify_style(labels)
# ๋ฐ์ดํฐ๋ฅผ ๋ฆฌ์คํธ์ ์ถ๊ฐ
data.append({
'Image': image_filename,
'Labels': ', '.join(selected_labels), # ๋ผ๋ฒจ์ ์ฝค๋ง๋ก ๊ตฌ๋ถํ์ฌ ์ ์ฅ
'Style': style
})
# ๋ฐ์ดํฐํ๋ ์์ผ๋ก ๋ณํ
df = pd.DataFrame(data)
# ๋ฐ์ดํฐํ๋ ์์ CSV ํ์ผ๋ก ์ ์ฅ
df.to_csv('C:\\Users\\user\\Desktop\\emoticon_labels_and_styles.csv', index=False, encoding='utf-8-sig')
# ๊ฒฐ๊ณผ ์ถ๋ ฅ (์ํ๋ค๋ฉด)
print(df)
์ด๋ชจํฐ์ฝ์ ์์์ ์ผ๋ก ์ผ์ผ์ด ์ฐ๊ณ ํ์ผ๋ช ์ ์์์ ๋ง์ถฐ ์ ์ฅํ์ต๋๋ค.
์๋ฅผ ๋ค์ด, ์ดํฐ๋ ๋ฆฌํด ์ด๋ชจํฐ์ฝ์ ์ฐ๊ณ ํ์ผ๋ช ์ 0001, ๋..๊ฐ๋๋ค ์ด๋ชจํฐ์ฝ์ ์คํฌ๋ฆฐ์ท ์ฐ๊ณ ํ์ผ๋ช ์ 0002
์ด๋ฐ์์ผ๋ก ์ ์ฅํ์ต๋๋ค. ํด๋น ์คํฌ๋ฆฐ์ท ์ด 200๊ฐ๋ฅผ google api๋ผ๋ ํด๋์ ์ ์ฅํ์์ต๋๋ค..ใ ใ
๊ทธ๋ฆฌ๊ณ for ๋ฐ๋ณต๋ฌธ์ ์ฌ์ฉํด์ 1~200 ๊น์ง์ ๋ชจ๋ ํ์ผ์ ์ฝ๊ณ ์ด๋ฏธ์ง ๋ถ์ํ์ฌ csv ํ์ผ๋ก ์ ์ฅํ๋ ์ฝ๋๋ฅผ ์์ฑํ๊ณ ์ ์ฅํ์ต๋๋ค.
import pandas as pd
from collections import Counter # Counter๋ฅผ ์ํฌํธ
# 'Labels' ์ด์์ ๋ชจ๋ ๋ผ๋ฒจ์ ํ๋์ ๋ฆฌ์คํธ๋ก ๋ถ๋ฆฌ
labels = combined_df['Labels'].str.split(', ').explode()
# ๊ฐ ๋ผ๋ฒจ์ ๋น๋ ๊ณ์ฐ
label_counts = Counter(labels)
# ๊ฒฐ๊ณผ๋ฅผ ๋ฐ์ดํฐํ๋ ์์ผ๋ก ๋ณํ
label_counts_df = pd.DataFrame(label_counts.items(), columns=['Label', 'Count'])
# ๋น๋ ์์ผ๋ก ์ ๋ ฌ
label_counts_df = label_counts_df.sort_values(by='Count', ascending=False)
# ๊ฒฐ๊ณผ ์ถ๋ ฅ
print(label_counts_df)
import matplotlib.pyplot as plt
# ์์ N๊ฐ์ ๋ผ๋ฒจ๋ง ํ์ (์: ์์ 20๊ฐ)
top_n = 20
label_counts_top = label_counts_df.head(top_n)
# ๊ทธ๋ํ ๊ทธ๋ฆฌ๊ธฐ
plt.figure(figsize=(10, 6))
plt.bar(label_counts_top['Label'], label_counts_top['Count'])
plt.title('Label Frequency')
plt.xlabel('Labels')
plt.ylabel('Count')
# x์ถ ๋ผ๋ฒจ์ 90๋๋ก ํ์
plt.xticks(rotation=90)
# ๊ทธ๋ํ ๋ณด์ฌ์ฃผ๊ธฐ
plt.tight_layout()
plt.show()
์นด์นด์ค ์ด๋ชจํฐ์ฝ ์์ 200๊ฐ๋ฅผ ์ด๋ฏธ์ง ๋ถ์์ ํตํด ๋ผ๋ฒจ๋ง ํด์ฃผ๊ณ ๊ฐ์ฅ ๋ง์ด ์ฐ์ธ ๋ผ๋ฒจ๋ค์
20๊ฐ๋ง ๋ฝ์์ ๊ทธ๋ํ๋ก ๋ํ๋์ต๋๋ค.
์ผํ๋ฅผ ๊ธฐ์ค์ผ๋ก ์นผ๋ผ๊ฐ์ ๋๋์ด ์ ์นผ๋ผ์ ์ ์ฅ
import pandas as pd
# 'Labels' ์ด์ ์ผํ๋ก ๋๋๊ณ , ์ต๋ ๋ช ๊ฐ์ ๋ผ๋ฒจ์ด ์๋์ง ํ์ธํ๊ธฐ ์ํด ํ์ฅ
label_split = combined_df['Labels'].str.split(', ', expand=True)
# ์๋ก์ด ์ด ์ด๋ฆ ์ค์ (๋ผ๋ฒจ1, ๋ผ๋ฒจ2, ๋ผ๋ฒจ3, ...)
label_split.columns = [f'๋ผ๋ฒจ{i+1}' for i in range(label_split.shape[1])]
# ์๋ ๋ฐ์ดํฐํ๋ ์๊ณผ ๋ถ๋ฆฌ๋ ๋ผ๋ฒจ ๋ฐ์ดํฐ๋ฅผ ํฉ์น๊ธฐ
df_combined = pd.concat([combined_df, label_split], axis=1)
# ๊ฒฐ๊ณผ ํ์ธ
print(df_combined)
# ์๋ก์ด CSV ํ์ผ๋ก ์ ์ฅ
df_combined.to_csv('C:\\Users\\user\\Desktop\\split_label_df.csv', index=False, encoding='utf-8-sig')
ํด๋น ๊ธฐ๋ฅ์ ํ๋ธ๋ก์์๋ ์ ์ฉํ๊ณ ์ ์ผํ๋ณ๋ก ๋๋ ์ ์ ์ฅํ์ต๋๋ค.
ํ๋ธ๋ก์๋ ํด๋น ๊ธฐ๋ฅ์ ์ฒ๋ฆฌํ ์ ์๊ธฐ์ ํ์ด์ฌ์์ ๋๋ ์ผ ํฉ๋๋ค.
์ด๋ ๊ฒ ์ ๋๋์ด์ก์ต๋๋ค.
์ด๋ก์จ ๋ฐ์ดํฐ ์์ง ๋ฐ ๋ถ๋ฅ ์์ ์ด ๋๋ฌ์ต๋๋ค.
๋ค์ ๊ธ ๋ถํด ํ๋ธ๋ก์ ํ์ด์ฌ์ ํ์ฉํ ๋ฐ์ดํฐ ๋ถ์์ ํ๊ฒ ์ต๋๋ค.