๐ฎJellymodi (Jelly mood diary)

ย Jellymodi (Jelly mood diary)
๋จธ์ ๋ฌ๋ ์ฌ๋ฌผ์ธ์ ํ๋ก์ ํธ
๋ค์ด๋ฒ ์๋ฆฌ์ฆ์์ ํ๋งค์ค์ธ ์น์์ค ์ํ์ ์ํ์ ๋ณด๋ฅผ ํฌ๋กค๋งํ์ฌ ์ป์ ์ค๊ฑฐ๋ฆฌ๋ฅผ ์์ฐ์ด ์ฒ๋ฆฌ๋ฅผ ํ์ฌ ์น์์ค์ ์คํ ๋ฆฌ๋ฅผ ๋ฒกํฐ ์๋ฒ ๋ฉ์ ํตํด ์ฌ์ฉ์๊ฐ ์ ํธํ ์์ค์ ์ค๊ฑฐ๋ฆฌ์ ์ ์ฌ๋๊ฐ ๋์ ์ํ์ ์ถ์ฒํด์ฃผ๋ ์๋น์ค
ํ๋ก์ ํธ์ ๋ํ ๋์ ์ญํ โ โ๋ณด๋ฌ๊ฐ๊ธฐ๐โ

ํ๋ก์ ํธ ๊ธฐ๊ฐ
2022-06-02 ~ 2022-06-13
์ฃผ์ ๊ธฐ๋ฅ
- JWT๋ฅผ ์ด์ฉํ ๋ก๊ทธ์ธ
- ์ฌ์ฉ์๊ฐ ์
๋ก๋ํ ์ฌ์ง์์ OpenCV๋ฅผ ์ด์ฉํด ์ผ๊ตด์ ์ธ์ํ๊ณ , ํ์ ๋ฐ์ดํฐ๋ฅผ ํ์ต์ํจ ๋ชจ๋ธ์ ํตํด
ํ์ ์ ํ๋ณํ์ฌ ํด๋นํ๋ ๊ฐ์ ์ด๋ชจํฐ์ฝ์ผ๋ก ์๋ ๋ณํ - ์ ค๋ฆฌ๋ชจ๋๋ง์ ๊ท์ฌ์ด ๊ฐ์ ํํ ์ด๋ชจํฐ์ฝ
์ ค๋ฆฌํฐ์ฝ
- ๊ฐ ๊ฐ์ ์ 4๋ฒ ์ด๋ชจํฐ์ฝ ์ ์ ๋ด๋น
- MongoDB Atlas๋ฅผ ์ด์ฉํ ์ผ๊ธฐ CRUD
- ์ด๋ชจํฐ์ฝ์ ์๋ณ๋ก ๋ฌถ์ด ๋ฆฌ์คํธ๋ก ๋ณด์ฌ์ฃผ์ด ๋์ ๊ฐ์ ์ถ์ด๋ฅผ ์๊ฐ์ ์ผ๋ก ํ์ธ
- Midea Query๋ฅผ ์ด์ฉํ ๋ฐ์ํ ํ์ด์ง
ํ๋ก์ ํธ ๊ธฐ๋ก
ํ ๊ตฌ์ฑ ๋ฐ ์ญํ
| ์ด๋ฆ | ์ญํ | ๊นํ๋ธ |
|---|---|---|
| ์ด์ ์ย ย ย ย | ๋ฉ์ธ ํ์ด์ง, ๋ฅ๋ฌ๋ | ๐zeonga1102 |
| ๋ ธ ์ | ๊ธฐ์์ฌ ๋ณ ํ์ด์ง | ๐minkkky |
| ์ดํ๊ฒฝ | ๊ฐ์ธ ํ์ด์ง | ๐LULULALA2 |
| ๊น๋๊ทผ | ๋ก๊ทธ์ธ ๋ฐ ํ์๊ฐ์ ํ์ด์ง, AWS ๋ฐฐํฌย ย ย ย | ๐yinmsk |
- ๊ฐ์ ์ธ์ ๋ฐ์ดํฐ์ ์ ์ฒ๋ฆฌ ๊ณผ์ , ๋ชจ๋ธ ์ ์ดํ์ต - ํ์ ์ ์ฒด ์ฐธ์ฌ
์คํฌ ๋ฐ ์ฌ์ฉํด
Python, Django, BeautifulSoup, Selenium,Colab, MeCab, Doc2Vec
ERD

ํ๋ก์ ํธ์ ๋ํ ๋์ ์ญํ ๋ฐ ๊ฒฝํ
๋์ ์ญํ
- ํ๊ตญ์ธ ๊ฐ์ ์ธ์ ๋ฐ์ดํฐ์
์ ์ฒ๋ฆฌ ๋ฐ ๋ชจ๋ธ ์ ์ดํ์ต (๊ณผ์ ๋ณด๋ฌ๊ฐ๊ธฐ๐)
- ๋ชจ๋ธํ์ต์ ์ํ ์ด๋ฏธ์ง ์ฒ๋ฆฌ๊ณผ์ (๊ณผ์ ๋ณด๋ฌ๊ฐ๊ธฐ๐)
-
ํ์๊ฐ์ /๋ก๊ทธ์ธ ๊ธฐ๋ฅ ๊ตฌํ
- ํ์ด์ง ์ ์
- ํ์๊ฐ์ /๋ก๊ทธ์ธ ํ์ด์ง
- ๊ธ ์์ฑ ํ์ด์ง
ํ๊ตญ์ธ ๊ฐ์ ์ธ์ ๋ฐ์ดํฐ์ ์ ์ฒ๋ฆฌ ๋ฐ ๋ชจ๋ธ ์ ์ดํ์ต
๊ธฐ์กด ๋ฐ์ดํฐ์ ์์๋ ๋ผ๋ฒจ์ด ๊ธฐ์จ, ๋นํฉ, ๋ถ๋ ธ, ๋ถ์, ์์ฒ, ์ฌํ, ์ค๋ฆฝ์ 7๊ฐ๋ก ๋ถ๋ฅ๋์ด์์๋๋ฐ, ํ์ ๋ง ๋ณด๊ณ ๋ ์ฌ๋๋ ์ธ์ํ๊ธฐ ํ๋ ํ์ ์ด ๋ง์๊ธฐ ๋๋ฌธ์ ์ธ์๋ฅ ์ ๋์ด๊ธฐ ์ํ์ฌ ๊ธฐ์จ, ์ฌํ, ๋ถ๋ ธ, ์ค๋ฆฝ์ 4๊ฐ์ ๊ฐ์ ์ผ๋ก ์นดํ ๊ณ ๋ฆฌ๋ฅผ ์ค์๋ค. ๋ํ ์ฌ๋ฐ๋ฅด๊ฒ ๋ถ๋ฅ๋์ง ์์ ์ฌ์ง์ด๋ ํ์ ์ ์ธ์ํ๊ธฐ์ ์ ๋งคํ ์ฌ์ง๋ ๋ง์๊ธฐ ๋๋ฌธ์ ๋ชจ๋ธ์ ํ์ต์ ์ํด์ ํ์ ์ด ๋ช ํํ ์ฌ์ง์ ๊ณ ๋ฅด๊ณ ๊ฐ ์ฌ์ง๋ค์์ ์ผ๊ตด๋ง ์๋ผ๋ด๋ ์์ ์ ์ถ๊ฐ๋ก ์งํํ๋ค.
๋ฐ์ดํฐ ์ ์ฒ๋ฆฌ ํ์ ๋ง๋ค์ด์ง ์๋ก์ด ๋ฐ์ดํฐ์ ์ผ๋ก ์ฝ๋ฉ์์ InceptionV3 ๋ชจ๋ธ์ ์ ์ดํ์ตํ์ฌ ์ ํ๋ ์ฝ 0.90์ ๊ฐ์ ๋ถ๋ฅ ๋ชจ๋ธ์ ์ ์ํ๋ค.
(์ฝ๋ฉ : https://colab.research.google.com/drive/1HKmdTvZSvowDDntpqg81ZUiUrp3hg4IY?usp=sharing)
from tensorflow.keras.applications.inception_v3 import InceptionV3
input = Input(shape=(224, 224, 3))
base_model = InceptionV3(weights='imagenet', include_top=False, input_tensor=input, pooling='max')
x = base_model.output
x = Dropout(rate=0.25)(x)
x = Dense(64, activation='relu')(x)
x = Dense(256, activation='relu')(x)
x = Dense(64, activation='relu')(x)
x = Dense(32, activation='relu')(x)
x = Dense(8, activation='relu')(x)
output = Dense(4, activation='softmax')(x)
model = Model(inputs=base_model.input, outputs=output)
model.compile(loss='categorical_crossentropy', optimizer=Adam(lr=0.001), metrics=['acc'])
๐งจTroubleShooting
๋ชจ๋ธํ์ต์ ์ํ ์ด๋ฏธ์ง ์ฒ๋ฆฌ๊ณผ์
๋ชจ๋ธํ์ต์ด ์ํํ๊ฒ ์ด๋ฃจ์ด์ง๋๋ก ๊ฐ์ ์ธ์๋ฅ ์ ๋์ด๊ธฐ ์ํด์ ์ด๋ฏธ์ง์์ ์ฌ๋ ์ผ๊ตด ๋ถ๋ถ๋ง ๊ฒ์ถํ์ฌ ๊ฐ์ ํฌ๊ธฐ๋ก ์๋ผ ์ ์ฅํ๋ ๊ณผ์ ์ ๊ฑฐ์น๊ธฐ๋ก ํ๋ค. ํ๊ฐ์ง ๊ฐ์ ๋น 1์ฒ์ฅ ์ ๋๋ฅผ ๋ผ๋ฒจ๋ง ํด๋์๊ธฐ ๋๋ฌธ์ ํ์ด์ฌ์ผ๋ก ๊ฐ๋จํ ํ๋ก๊ทธ๋จ์ ๋ง๋ค์ด ์๋์ผ๋ก ์ฒ๋ฆฌํ๋๋ก ํ๋ค. ์ด ๊ณผ์ ์์ ๋ฐ์ํ ์ค๋ฅ๋ฅผ ์๋์ ์ ๋ฆฌํ์๋ค.
1. ์ผ๊ตด์ด ์๋ ๊ฒ์ ์ผ๊ตด๋ก ์ธ์ํ๋ ๋ฌธ์
์ฑ
ํ์ง๋ ํฌ์คํฐ ๋ฑ ์ผ๊ตด์ด ์๋ ๊ฒ์ ์ผ๊ตด๋ก ์ธ์ํ๋ ๋ฌธ์ ๊ฐ ๋ฐ์ํ๋ค.
์ฌ์ง ์์ ์ผ๊ตด ํฌ๊ธฐ ํ๊ท ์น๋ฅผ ๊ณ์ฐํด์ ์ผ๊ตด ๊ฒ์ถ ์ฌ์ด์ฆ๋ฅผ ํ๊ท ํฌ๊ธฐ ์ด์์ผ๋ก ํ์ ์์ผ์ ์ผ๊ตด์ด ์๋ ๊ฒ์ ์ผ๊ตด๋ก ์ธ์ํ๋ ๋ฌธ์ ๋ฅผ ๋๋ถ๋ถ ํด๊ฒฐํ ์ ์์๋ค.
faces = face_cascade.detectMultiScale(gray, 1.2, minSize=(75,75))
2. ์ฌ์ง์์ ์ผ๊ตด๋ง ์๋ผ ์ ์ฅํ๋ ๊ณผ์ ์์ ๊ณ์ ์ค๋ฅ ๋ฐ์
๋ฐ์ดํฐ ์ ์ฒ๋ฆฌ๊ณผ์ ์์ ์ฌ์ง์์ ์ผ๊ตด๋ง ์๋ผ ์ ์ฅํด ๋ชจ๋ธ์ ํ์ต์ํค๋ ค๊ณ ํ์ต๋๋ค. ๊ทธ๋ฐ๋ฐ ํน์ ์ฌ์ง์ ์ผ๊ตด์ธ์๋ ์ ๋๋ก ๋์ง ์๊ณ , ๋ค์ ์ฌ์ง์ผ๋ก๋ ๋์ด๊ฐ์ง ์๊ณ ๊ณ์ ์ค๋ฅ๋ก ๋ฉ์ถ๋ ๋ฌธ์ ๊ฐ ๋ฐ์ํ์ต๋๋ค.
- ์ด๋ฏธ์ง ํด๋ ๊ฒฝ๋ก ์์ : โ\โ์์ โ/โ๋ก ์์
- ํน์ ์ฌ์ง์์๋ ์ผ๊ตด์ด ์ฌ๋ฌ๊ฐ ์ธ์๋จ : ์ผ๊ตด ๊ฐ์ง ํฌ๊ธฐ์ ์ต์ ํฌ๊ธฐ๋ฅผ ์ฃผ๊ณ ์ฌ๋ฌ๊ฐ ์ธ์๋๋ฉด crop๋ ์์ญ๋ค์ ๋ฒํธ๋ฅผ ๋ถ์ฌ ๋ชจ๋ ์ ์ฅํ๊ฒ ํจ
- ํน์ ์ฌ์ง์์ ์ผ๊ตด์ด ์ธ์๋์ง ์์ : ์ธ์์ด ์๋์ ๋ฉ์ถ๋ฉด if๋ฌธ์ผ๋ก crop๋ ์ฌ์ง์ด 1๊ฐ ์ด์์ธ ๊ฒ๋ง ๋์ด๊ฐ๊ฒ ํจ
- ์ฝ๋๊ฐ ๋์๊ฐ๋๋ฐ๋ ์ด๋ฏธ์ง๊ฐ ์ ์ฅ์ด ์๋จ : ์ ์ฅ ๊ฒฝ๋ก๋ก ์ง์ ๋์๋ ์ด๋ฏธ์ง ํด๋๋ฅผ ๋ฏธ๋ฆฌ ์์ฑํด์ค์ผ ํจ
# ์ฝ๋ ์์ ์
import cv2
import glob
# haarcascade ๋ถ๋ฌ์ค๊ธฐ
face_cascade = cv2.CascadeClassifier(cv2.data.haarcascades + 'haarcascade_frontalface_default.xml')
images = glob.glob('images\*')
for image in images:
# ์ด๋ฏธ์ง ๋ถ๋ฌ์ค๊ธฐ
img = cv2.imread(image)
img = cv2.resize(img, dsize=(0, 0), fx=0.3, fy=0.3, interpolation=cv2.INTER_AREA)
gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
# ์ผ๊ตด ์ฐพ๊ธฐ
faces = face_cascade.detectMultiScale(gray, 1.3, 5)
for (x, y, w, h) in faces:
img_x1 = x
img_x2 = x + w
img_y1 = y
img_y2 = y + h
img = img[img_y1:img_y2, img_x1:img_x2]
try:
print(f'face/{image}')
cv2.imwrite(f'face/{image}', img)
except:
pass
# ์ฝ๋ ์์ ํ
import cv2
import glob
# haarcascade ๋ถ๋ฌ์ค๊ธฐ
face_cascade = cv2.CascadeClassifier(cv2.data.haarcascades + 'haarcascade_frontalface_default.xml')
images = glob.glob('images/*')
print("images =", end=""), print(images)
result_list = []
for i in images:
temp = i.replace("\\", "/")
result_list.append(temp)
print("result_list = ", end=""), print(result_list)
# ์ด๋ฏธ์ง ๋ถ๋ฌ์ค๊ธฐ
for image in result_list:
if "jpg" in image:
print("image = ", end=""), print(image)
ori_img = cv2.imread(image)
ori_img = cv2.resize(ori_img, dsize=(0, 0), fx=0.4, fy=0.4, interpolation=cv2.INTER_AREA)
gray = cv2.cvtColor(ori_img, cv2.COLOR_BGR2GRAY)
# ์ผ๊ตด ์ฐพ๊ธฐ
faces = face_cascade.detectMultiScale(gray, 1.2, minSize=(75,75))
print("faces =", end=""), print(faces)
cnt = 0
for (x, y, w, h) in faces:
img_x1 = x
img_x2 = x + w
img_y1 = y
img_y2 = y + h
img = ori_img[img_y1:img_y2, img_x1:img_x2]
image_file_name = image.split('.')
print("image_file_name =", end=""), print(image_file_name)
file_name = image_file_name[0]
extension = image_file_name[1]
file_name += str(cnt)
filename = 'face/images/' + file_name + '.' + extension
print("filename =", end=""), print(filename)
cv2.imwrite(filename, img)
cnt += 1
ํ๊ณ
์ผ๊ธฐ๋ฅผ ์ด๋ค๋ ๊ฐ๋จํ ํ์์ ๊ฐ์ ์ธ์๊ณผ ์ ค๋ฆฌ์ด๋ชจํฐ์ฝ์ด๋ผ๋ ์์ด๋์ด๋ฅผ ์น์ด์ ์ฌ๋ฏธ์๋ ํ๋ก์ ํธ๋ก ๋ง๋ ๊ฒ ๊ฐ์์ ์ข์๋ค. ๋ณต์กํ ๊ธฐ๋ฅ์ ๋ฃ์ด์ ๋ง๋ ํ๋ก์ ํธ๋ ์๋์ง๋ง ์ฒ์์ผ๋ก ๋จธ์ ๋ฌ๋์ ํ๋ก์ ํธ์ ์ฐ๊ฒฐ์์ผ ๋ง๋ค์ด๋ณธ ํ๋ก์ ํธ์ฌ์ ๋ฟ๋ฏํ๋ค. ํ์๋ค๊ณผ ์ง์ ๋ฐ์ดํฐ์ ์ ๋ฆฌ๋ถํฐ ๋ชจ๋ธ ์ ์๊น์ง ๋ค ํจ๊ปํ๋ ๊ฒ์ด ์ ์ผ ์ฌ๋ฐ์๋ ์ผ์ด ์๋๊ฐ ์ถ๋ค. ๋ด๊ฐ ์ด ์ฝ๋ ๋ช ์ค์ ๋ชจ๋ธ์ด ํ์ต์ ํด์ ๊ฒฐ๊ณผ๋ฌผ์ ๋ณด์ฌ์ค๋ค๋ ๊ฒ์ด ์ ๊ธฐํ๋ค.
๋งค๋ฒ ์ผ์ฃผ์ผ์ด ์๋๋ ์งง์ ์๊ฐ๋์ ํ๋ก์ ํธ๋ฅผ ์งํํ๋ค๋ณด๋ ํญ์ ์๊ฐ์ ์ซ๊ฒจ ํ๋ก์ ํธ๋ฅผ ๋ง๊ฐํ๊ณ ๋ ํ๋๋ฐ, ๋ ธ์ ์ผ๋ก ์ผ์ ๊ด๋ฆฌ๋ฅผ ํด๋ณด๋ ์ด๋ฒ์๋ ์ข ๋ ์ฌ์ ๋กญ๊ฒ ํ๋ก์ ํธ๋ฅผ ๋ง๊ฐํ ์ ์์๋ ๊ฒ ๊ฐ๋ค. ์งง์ ์๊ฐ์ด์์ง๋ง ๊ธฐํํ๋๋ก ๋ค ์์ฑ์ ํ๊ณ , ๋์ค์ ์ดํ๋ก ์ถ์ํด๋ณด๊ณ ์ถ์ ๊ท์ฌ์ด ๋ชจ์์๊ฐ ๋์์ ๋ง์กฑ์ค๋ฌ์ ๋ค.