Spaces:
Sleeping
Sleeping
| title: Deeplearning Board | |
| emoji: π§ | |
| colorFrom: pink | |
| colorTo: yellow | |
| sdk: docker | |
| pinned: false | |
| # ASL Letter Board | |
| Teachable MachineμΌλ‘ νμ΅ν ASL μνλ²³ μ΄λ―Έμ§ λΆλ₯ λͺ¨λΈμ FastAPIμ React νλ©΄μ μ°κ²°ν νλ‘μ νΈμ λλ€. | |
| μ¬μ©μλ μ΄λ―Έμ§ μ λ‘λ λλ μΉμΊ 촬μμΌλ‘ ASL A-Z μνλ²³μ μμΈ‘νκ³ , μμΈ‘ κ²°κ³Όλ₯Ό κ²μνμ μ μ₯ν΄ νμ΅ κΈ°λ‘μ²λΌ κ΄λ¦¬ν μ μμ΅λλ€. | |
| λ¨μ΄ νμ΅ νλ©΄μ νΉμ λ¨μ΄λ§ 보μ¬μ£Όλ λ°©μμμ λ²μ΄λ, μ¬μ©μκ° μνλ μμ΄ λ¨μ΄λ₯Ό μ λ ₯νλ©΄ κ° μνλ²³μ ASL μν μ΄λ―Έμ§λ₯Ό μμλλ‘ νμΈνλ λ°©μμΌλ‘ κ°μ νμ΅λλ€. λͺ¨λΈ νμ μ΄ μμ§ μμ ν μμ μ μ΄μ§ μμ μ μ κ³ λ €ν΄, νμ΅ νλ©΄μμλ μλ μ±μ λ³΄λ€ μΉμΊ μ κ±°μΈμ²λΌ μ¬μ©ν΄ μνκ³Ό μμ μ μ λͺ¨μμ μ§μ λΉκ΅νλ νλ¦μ μ§μ€νμ΅λλ€. | |
|  | |
| ## μ£Όμ κΈ°λ₯ | |
| - Teachable Machine Keras λͺ¨λΈ(`keras_model.h5`) κΈ°λ° ASL A-Z μνλ²³ μ΄λ―Έμ§ λΆλ₯ | |
| - `labels.txt`λ₯Ό μ΄μ©ν ν΄λμ€ λΌλ²¨ λ‘λ© λ° κ²μν νν° μμ± | |
| - μ΄λ―Έμ§ μ λ‘λ, λλκ·Έ μ€ λλ‘, μΉμΊ 촬μ λΆμ | |
| - μμΈ‘ κ²°κ³Ό Top 5, μ λ’°λ, λͺ¨λΈ μ 보, μΆλ‘ μκ° νμ | |
| - μμΈ‘ κ²°κ³Ό κ²μν μ μ₯, λͺ©λ‘ μ‘°ν, μμΈ μ‘°ν | |
| - κ²μκΈ μ λͺ© μμ λ° μμ | |
| - μνλ μμ΄ λ¨μ΄λ₯Ό μ λ ₯ν΄ ASL μνλ²³ μνμ μμλλ‘ νμ΅ | |
| - μΉμΊ κ±°μΈ λͺ¨λλ‘ μν μ¬μ§κ³Ό λ΄ μ λͺ¨μ λΉκ΅ | |
| - SQLite κΈ°λ° λ‘컬 λ°μ΄ν° μ μ₯ | |
| ## νλ©΄ κ΅¬μ± | |
| <table> | |
| <tr> | |
| <td width="50%"><img src="docs/image/start.png" alt="Start screen" width="100%"></td> | |
| <td width="50%"><img src="docs/image/home.png" alt="Home screen" width="100%"></td> | |
| </tr> | |
| <tr> | |
| <td width="50%"><img src="docs/image/classification.png" alt="Classification screen" width="100%"></td> | |
| <td width="50%"><img src="docs/image/learn.png" alt="Learn screen" width="100%"></td> | |
| </tr> | |
| <tr> | |
| <td width="50%"><img src="docs/image/board.png" alt="Board screen" width="100%"></td> | |
| <td width="50%"></td> | |
| </tr> | |
| </table> | |
| μ£Όμ κ²½λ‘: | |
| - `/`: ν νλ©΄ | |
| - `/classify`: ASL μνλ²³ λΆλ₯ νλ©΄ | |
| - `/learning`: λ¨μ΄ μ λ ₯ν ASL νμ΅ νλ©΄ | |
| - `/board`: μ μ₯λ νμ΅ κΈ°λ‘ κ²μν | |
| - `/post/{id}`: κ²μκΈ μμΈ νλ©΄ | |
| - `/webcam-test`: μΉμΊ μ₯μΉ ν μ€νΈ νλ©΄ | |
| ## μ€ν λ°©λ² | |
| Python ν¨ν€μ§λ₯Ό μ€μΉν©λλ€. | |
| ```bash | |
| pip install -r requirements.txt | |
| ``` | |
| React νλ©΄μ λΉλν©λλ€. | |
| ```bash | |
| cd frontend | |
| npm install | |
| npm run build | |
| cd .. | |
| ``` | |
| FastAPI μλ²λ₯Ό μ€νν©λλ€. | |
| ```bash | |
| python -m uvicorn backend.app.main:app --reload | |
| ``` | |
| λΈλΌμ°μ μμ μλ μ£Όμλ‘ μ μν©λλ€. | |
| ```text | |
| http://127.0.0.1:8000 | |
| ``` | |
| μΉμΊ κΈ°λ₯μ λΈλΌμ°μ κΆνμ΄ νμν©λλ€. κΆν μμ²μ΄ λ¨λ©΄ νμ©ν΄μΌ 촬μ λΆμκ³Ό κ±°μΈ μ°μ΅μ μ¬μ©ν μ μμ΅λλ€. | |
| κ°λ° μ€ React dev serverλ₯Ό λ°λ‘ μ€ννλ €λ©΄ μλ λͺ λ Ήμ μ¬μ©ν©λλ€. Vite proxyκ° `/api`, `/word-images`, `/static` μμ²μ FastAPI μλ²λ‘ μ λ¬ν©λλ€. | |
| ```bash | |
| cd frontend | |
| npm run dev | |
| ``` | |
| ## λͺ¨λΈ νμΌ | |
| Teachable Machineμμ TensorFlow/Keras νμμΌλ‘ λ΄λ³΄λΈ λͺ¨λΈ νμΌμ μλ μμΉμ λ‘λλ€. | |
| ```text | |
| ai/model/keras_model.h5 | |
| ai/model/labels.txt | |
| ``` | |
| `labels.txt`λ Teachable Machine κΈ°λ³Έ νμμ μ§μν©λλ€. | |
| ```text | |
| 0 A | |
| 1 B | |
| 2 C | |
| ... | |
| 25 Z | |
| ``` | |
| μλΉμ€λ λΌλ²¨ νμΌμ μ½μ΄ μμΈ‘ κ²°κ³Ό μ΄λ¦κ³Ό κ²μν νν°λ₯Ό ꡬμ±ν©λλ€. | |
| ## λ¨μ΄ νμ΅ μ΄λ―Έμ§ | |
| λ¨μ΄ νμ΅ νλ©΄μ `docs/image/test_image`μ μλ A-Z ν μ€νΈ μ΄λ―Έμ§λ₯Ό μνλ²³ μνλ‘ μ¬μ©ν©λλ€. νμΌλͺ μ `{μνλ²³}_test.jpg` νμμ μ¬μ©ν©λλ€. | |
| ```text | |
| docs/image/test_image/ | |
| ββ A_test.jpg | |
| ββ B_test.jpg | |
| ββ C_test.jpg | |
| ... | |
| ββ Z_test.jpg | |
| ``` | |
| FastAPIλ μ΄ ν΄λλ₯Ό `/test-images` κ²½λ‘λ‘ μ 곡ν©λλ€. | |
| ```text | |
| http://127.0.0.1:8000/test-images/A_test.jpg | |
| http://127.0.0.1:8000/test-images/Z_test.jpg | |
| ``` | |
| νμ¬ μ΄λ―Έμ§λ ν μ€νΈμ©μ΄λΌ λ€μ μ΄λμΈ μ μμ΅λλ€. μ΄ν λ°κΈ°μ λ°°κ²½μ 보μ ν A-Z λν μ΄λ―Έμ§λ₯Ό κ°μ νμΌλͺ μΌλ‘ κ΅μ²΄νλ©΄ νλ©΄ λ‘μ§μ λ°κΎΈμ§ μκ³ νμ§μ κ°μ ν μ μμ΅λλ€. | |
| ## API | |
| ### μ΄λ―Έμ§ μμΈ‘ | |
| ```http | |
| POST /api/v1/predict | |
| Content-Type: multipart/form-data | |
| ``` | |
| μμ² νλ: | |
| - `file`: jpg, jpeg, png μ΄λ―Έμ§ νμΌ | |
| μλ΅ μμ: | |
| ```json | |
| { | |
| "success": true, | |
| "filename": "sample.png", | |
| "predicted_class": "A", | |
| "confidence": 0.9821, | |
| "top_k": [ | |
| { "label": "A", "score": 0.9821 }, | |
| { "label": "B", "score": 0.0121 } | |
| ], | |
| "model": { | |
| "name": "keras_model.h5", | |
| "version": "v1" | |
| }, | |
| "inference_time_ms": 123 | |
| } | |
| ``` | |
| ### λΌλ²¨ μ‘°ν | |
| ```http | |
| GET /api/v1/predict/labels | |
| ``` | |
| μλ΅ μμ: | |
| ```json | |
| { | |
| "classes": ["A", "B", "C"], | |
| "count": 3 | |
| } | |
| ``` | |
| ### κ²μκΈ | |
| ```http | |
| GET /api/v1/posts | |
| GET /api/v1/posts?category=A | |
| GET /api/v1/posts/{post_id} | |
| POST /api/v1/posts | |
| PUT /api/v1/posts/{post_id} | |
| DELETE /api/v1/posts/{post_id} | |
| ``` | |
| κ²μκΈ μ μ₯ μμ² μμ: | |
| ```json | |
| { | |
| "title": "ASL A λΆλ₯ κ²°κ³Ό", | |
| "image_url": "data:image/png;base64,...", | |
| "prediction": "A", | |
| "confidence": 0.95 | |
| } | |
| ``` | |
| ## νλ‘μ νΈ κ΅¬μ‘° | |
| ```text | |
| Deeplearning_Board/ | |
| ββ ai/ | |
| β ββ model/ | |
| β ββ keras_model.h5 | |
| β ββ labels.txt | |
| ββ backend/ | |
| β ββ app/ | |
| β ββ main.py | |
| β ββ routers/ | |
| β β ββ pages.py | |
| β β ββ post.py | |
| β β ββ predict.py | |
| β ββ services/ | |
| β ββ classifier_service.py | |
| β ββ post_service.py | |
| ββ data/ | |
| β ββ app.db | |
| ββ docs/ | |
| β ββ image/ | |
| β ββ test_image/ | |
| β β ββ A_test.jpg | |
| β β ββ ... | |
| β ββ words/ | |
| β ββ LOVE/ | |
| β ββ APPLE/ | |
| β ββ manifest.json | |
| ββ frontend/ | |
| β ββ src/ | |
| β β ββ api/client.js | |
| β β ββ main.jsx | |
| β β ββ style.css | |
| β ββ static/ | |
| β β ββ css/style.css | |
| β β ββ images/placeholder.jpg | |
| β ββ index.html | |
| β ββ package.json | |
| β ββ package-lock.json | |
| β ββ vite.config.js | |
| ββ Dockerfile | |
| ββ requirements.txt | |
| ββ README.md | |
| ``` | |
| ## λ°°ν¬ | |
| μ΄ νλ‘μ νΈλ Hugging Face Spacesμ Docker νκ²½μ λ°°ν¬νμ΅λλ€. Docker λΉλλ React μ±μ λ¨Όμ λΉλν λ€, FastAPIκ° λΉλλ μ μ νμΌκ³Ό APIλ₯Ό νλμ μλ²μμ μ 곡ν©λλ€. | |
| https://huggingface.co/spaces/eunzzang/Deeplearning_Board | |
| μ£Όμ: | |
| - λ¬΄λ£ Spaceλ μ¬μμ μ SQLite λ°μ΄ν°κ° μ΄κΈ°νλ μ μμ΅λλ€. | |
| - μ₯κΈ° μ μ₯μ΄ νμνλ©΄ λ³λ λ°μ΄ν°λ² μ΄μ€λ persistent storageκ° νμν©λλ€. | |
| - 첫 λΉλλ TensorFlow μ€μΉ λλ¬Έμ μκ°μ΄ 걸릴 μ μμ΅λλ€. | |
| ## νμ¬ νκ³μ ν₯ν κ°μ | |
| - νμ¬ λ¨μ΄ νμ΅ μνμ ν μ€νΈμ© μ΄λ―Έμ§λΌ λ°κΈ°μ λ°°κ²½ νμ§μ μΆκ°λ‘ 보μ ν μ μμ΅λλ€. | |
| - μ΄λ―Έμ§ λΆλ₯ λͺ¨λΈμ μ‘°λͺ , λ°°κ²½, μ μμΉ, μΉ΄λ©λΌ κ°λμ μν₯μ λ°μ μ μμ΅λλ€. | |
| - λ¨μ΄ νμ΅ νλ©΄μ μΉμΊ μ νμ¬ μλ μ±μ μ΄ μλ κ±°μΈ λΉκ΅ μ©λμ λλ€. | |
| - λͺ¨λΈ μ νλκ° μΆ©λΆν κ°μ λλ©΄ κΈμλ³ μλ νμΈ κΈ°λ₯μ μΆκ°ν μ μμ΅λλ€. | |
| - μλμ²΄ν¬ λͺ¨λλ μμ μ μΈ μμΈ‘ μ±λ₯κ³Ό νΈμΆ μ ν μ μ± μ΄ μ€λΉλ λ€ λ§μ§λ§ λ¨κ³μμ λμ νλ κ²μ΄ μ μ ν©λλ€. | |
| ## μ°Έκ³ μ¬ν | |
| - κ²μκΈ λ°μ΄ν°λ `data/app.db`μ μ μ₯λ©λλ€. | |
| - `data/app.db`λ μ€ν μ€ μλ μμ±λ©λλ€. | |
| - μΉμΊ μ `http://127.0.0.1` λλ HTTPS νκ²½μμ μμ μ μΌλ‘ λμν©λλ€. | |
| - Teachable Machine λͺ¨λΈ νΈνμ μν΄ `tf-keras`λ₯Ό μ¬μ©ν©λλ€. | |
| - `__pycache__`μ μ€ν μ€ μμ± νμΌμ μ»€λ° λμμμ μ μΈνλ κ²μ κΆμ₯ν©λλ€. | |