An open API service indexing awesome lists of open source software.

https://github.com/1juyoung/facemeet

๐Ÿ“ฝ ํ‘œ์ • ์ธ์‹๊ณผ ๊ฐ์ • ๋ถ„์„์„ ํ†ตํ•ด ํšŒ์˜ ์ฐธ๊ฐ€์ž์˜ ๊ฐ์ •์„ ์‹œ๊ฐํ™”ํ•˜๋Š” ํ™”์ƒ ํšŒ์˜ ์„œ๋น„์Šค
https://github.com/1juyoung/facemeet

deepface emotion nodejs python react socket-io webrtc-video

Last synced: 4 months ago
JSON representation

๐Ÿ“ฝ ํ‘œ์ • ์ธ์‹๊ณผ ๊ฐ์ • ๋ถ„์„์„ ํ†ตํ•ด ํšŒ์˜ ์ฐธ๊ฐ€์ž์˜ ๊ฐ์ •์„ ์‹œ๊ฐํ™”ํ•˜๋Š” ํ™”์ƒ ํšŒ์˜ ์„œ๋น„์Šค

Awesome Lists containing this project

README

          

# FaceMeet - ํ‘œ์ • ๋ถ„์„ ๊ธฐ๋ฐ˜ ํ™”์ƒ ํšŒ์˜ ์›น ์„œ๋น„์Šค

๐Ÿ“… **๋ฐœํ‘œ ์‹œ์ **: 2024๋…„ 11์›” (์กธ์—… ์ž‘ํ’ˆ)
๐Ÿง  **์ฃผ์š” ๊ธฐ์ˆ **: WebRTC, Socket.io, React, Express, MongoDB DeepFace, OpenCV

---

## ๐Ÿงฉ ํ”„๋กœ์ ํŠธ ๊ฐœ์š”

> ์ฝ”๋กœ๋‚˜19 ์ดํ›„ ์˜จ๋ผ์ธ ํ™œ๋™์˜ ์ฆ๊ฐ€์™€ ํ•จ๊ป˜, ์‚ฌ์šฉ์ž ๊ฐ„ ๊ฐ์ • ์ดํ•ด๋ฅผ ๋•๊ธฐ ์œ„ํ•œ ํ™”์ƒ ํšŒ์˜ ์„œ๋น„์Šค์˜ ํ•„์š”์„ฑ์ด ์ปค์กŒ์Šต๋‹ˆ๋‹ค.
> **FaceMeet**๋Š” ํ‘œ์ • ์ธ์‹ ๋ฐ ๊ฐ์ • ๋ถ„์„์„ ๊ธฐ๋ฐ˜์œผ๋กœ ์‚ฌ์šฉ์ž ๊ฐ„ ๊ฐ์ • ํ๋ฆ„์„ ์‹œ๊ฐํ™”ํ•˜์—ฌ, ๋ณด๋‹ค ์›ํ™œํ•œ ์†Œํ†ต์„ ์ง€์›ํ•˜๋Š” **๊ฐ์ • ๊ธฐ๋ฐ˜ ํ™”์ƒ ํšŒ์˜ ์„œ๋น„์Šค**์ž…๋‹ˆ๋‹ค.

### ๐ŸŽฏ ์ฃผ์š” ๋ชฉํ‘œ

- ํ‘œ์ • ๋ถ„์„ ๊ธฐ์ˆ ์„ ํ™œ์šฉํ•˜์—ฌ ํšŒ์˜ ์ฐธ์—ฌ์ž์˜ ๊ฐ์ • ์ ์ˆ˜๋ฅผ ์‹œ๊ฐํ™”
- ํ˜ธ์ŠคํŠธ/ํด๋ผ์ด์–ธํŠธ ๊ฐ„ ์†Œํ†ต์„ ์œ„ํ•œ ํ™”์ƒํšŒ์˜ + ๊ฐ์ • ๊ณต์œ  ๊ธฐ๋Šฅ ๊ตฌํ˜„
- ๋น„์–ธ์–ด์  ์˜์‚ฌ์†Œํ†ต์ด ํ•„์š”ํ•œ ์™ธ๊ตญ์ธ/ํŠน์ˆ˜ ์ƒํ™ฉ์—์„œ์˜ ์ปค๋ฎค๋‹ˆ์ผ€์ด์…˜ ๊ฐœ์„ 

---

## ๐Ÿ› ๏ธ ํ”„๋กœ์ ํŠธ ํด๋” ๊ตฌ์กฐ

```
backend/
โ”‚
โ”œโ”€โ”€ app.js # ๋ฐฑ์—”๋“œ ์ง„์ž…์ 
โ”œโ”€โ”€ facemeet/ # ํ”„๋ก ํŠธ์—”๋“œ ์ฝ”๋“œ (React)
โ”œโ”€โ”€ model/ # ํ‘œ์ • ๋ถ„์„ ํŒŒ์ด์ฌ ๊ธฐ๋ฐ˜ ๋ชจ๋ธ (Flask + DeepFace)
โ”œโ”€โ”€ modules/ # ๋ฐฑ์—”๋“œ ๋ชจ๋“ˆ (๋ฏธ๋“ค์›จ์–ด, ๋กœ์ง ๋“ฑ)
โ”œโ”€โ”€ mongoose/ # MongoDB ๋ชจ๋ธ ์ •์˜
โ””โ”€โ”€ ...
```

๐Ÿ“Œ **๊ตฌ์กฐ ์„ค๋ช…**

- **facemeet/**: ํ”„๋ก ํŠธ์—”๋“œ React ํ”„๋กœ์ ํŠธ ๋””๋ ‰ํ„ฐ๋ฆฌ์ž…๋‹ˆ๋‹ค.
- **model/**: DeepFace ๊ธฐ๋ฐ˜ ๊ฐ์ • ๋ถ„์„ Python ์„œ๋ฒ„ ์ฝ”๋“œ (Flask + OpenCV)
- **๋‚˜๋จธ์ง€ ๋””๋ ‰ํ† ๋ฆฌ**: Node.js ๊ธฐ๋ฐ˜ ๋ฐฑ์—”๋“œ API ๋ฐ ์„œ๋ฒ„ ๊ตฌ์„ฑ

---

## ๐Ÿ’ก ์ฃผ์š” ๊ธฐ๋Šฅ ๋ฐ ์‹œ์Šคํ…œ ์•„ํ‚คํ…์ฒ˜

### ๐Ÿ“ท ํ‘œ์ • ๋ถ„์„

- **OpenCV Haarcascade**๋กœ ์–ผ๊ตด ์˜์—ญ ์ถ”์ถœ
- **DeepFace + CNN(VGG-Face)**๋ฅผ ํ†ตํ•ด ๊ฐ์ • ์ธ์‹
- ๊ฐ์ •๊ฐ’์— ๊ฐ€์ค‘์น˜๋ฅผ ๋‘์–ด ์ตœ์ข… ์ ์ˆ˜ ์‚ฐ์ถœ

```
Emotion Score =
(Happiness ร— 100) + (Neutral ร— 50) + (Sadness ร— 30) +
(Fear ร— 20) + (Disgust ร— 10) + (Anger ร— 10) + (Surprise ร— 50)
```

- ์ ์ˆ˜ ๋ฒ”์œ„์— ๋”ฐ๋ผ ๊ฐ์ • ์ƒํƒœ ๋ถ„๋ฅ˜:
- 0~30: ๋ถ€์ •์  ๊ฐ์ •
- 30~70: ์ค‘๋ฆฝ ๊ฐ์ •
- 70~100: ๊ธ์ •์  ๊ฐ์ •

### ๐Ÿงฑ ์‹œ์Šคํ…œ ๊ตฌ์„ฑ

| ํ™”๋ฉด ๊ตฌ์„ฑ | ์„ค๋ช… |
| ---------------- | --------------------------------------------- |
| ๋กœ๊ทธ์ธ, ํšŒ์›๊ฐ€์ž… | ๊ธฐ๋ณธ ์ธ์ฆ ๊ธฐ๋Šฅ |
| ๋ฉ”์ธํ™”๋ฉด | ํšŒ์˜ ์ƒ์„ฑ/์ฐธ์—ฌ |
| ํšŒ์˜๊ธฐ๋ก | ๊ฐ์ • ์ ์ˆ˜ ๊ธฐ๋ฐ˜ ํšŒ์˜ ๋ฆฌ์ŠคํŠธ |
| ํšŒ์˜ ํ™”๋ฉด | WebRTC ๊ธฐ๋ฐ˜ ์‹ค์‹œ๊ฐ„ ํ™”์ƒํšŒ์˜ ๋ฐ ๊ฐ์ • ์ ์ˆ˜ ํ‘œ์‹œ |

---

## โš™๏ธ ์‚ฌ์šฉ ๊ธฐ์ˆ  ์Šคํƒ

### ํ”„๋ก ํŠธ์—”๋“œ (React - `/facemeet`)

- React 18, MUI, React Router, Axios
- WebRTC
- JWT ๊ธฐ๋ฐ˜ ์ธ์ฆ
- ์‹ค์‹œ๊ฐ„ ํ†ต์‹ : Socket.io

### ๋ฐฑ์—”๋“œ (Node.js - root ๋””๋ ‰ํ„ฐ๋ฆฌ)

- Express, Mongoose, Multer (ํŒŒ์ผ ์—…๋กœ๋“œ)
- GridFS (ํ”„๋กœํ•„ ์ด๋ฏธ์ง€ ์ €์žฅ)
- PM2 (์„œ๋ฒ„ ์šด์˜), Morgan, JWT ์ธ์ฆ

### ํ‘œ์ • ๋ถ„์„ ๋ชจ๋ธ (`/model`)

- Python + Flask
- DeepFace, OpenCV
- CORS ์„ค์ •์„ ํ†ตํ•œ ๋ฐฑ์—”๋“œ ์—ฐ๋™

---

## โœ… ํ”„๋กœ์ ํŠธ ๊ฒฐ๊ณผ ๋ฐ ๊ธฐ๋Œ€ ํšจ๊ณผ

- ์›นํŽ˜์ด์ง€ ๋‚ด ํšŒ์˜ ์ƒ์„ฑ, ์ฐธ๊ฐ€, ๊ธฐ๋ก ๋ฐ ๊ฐ์ • ์ ์ˆ˜ ์‹œ๊ฐํ™” ๊ธฐ๋Šฅ ๊ตฌํ˜„
- ๊ฐ์ • ์ ์ˆ˜๋ฅผ ๊ธฐ๋ฐ˜์œผ๋กœ ํšŒ์˜ ๋ถ„์œ„๊ธฐ ํŒ๋‹จ ๊ฐ€๋Šฅ
- ์™ธ๊ตญ์ธ, ์žฅ์• ์ธ ๋“ฑ **๋น„์–ธ์–ด์  ์˜์‚ฌ์†Œํ†ต**์ด ์ค‘์š”ํ•œ ์ƒํ™ฉ์—์„œ ํ™œ์šฉ ๊ฐ€๋Šฅ

---

## ๐Ÿ™‹ ํŒ€ ์ •๋ณด

- ์ด 4์ธ ๊ตฌ์„ฑ (ํ”„๋ก ํŠธ์—”๋“œ 2, ๋ฐฑ์—”๋“œ 1, AI ๋ชจ๋ธ 1)

---