Spaces:
Sleeping
Sleeping
Shouvik599 commited on
Commit ·
14cd71d
1
Parent(s): 17cd011
path fix for models
Browse files- Dockerfile +3 -3
- backend/app/voice_analysis.py +4 -2
- backend/uv.lock +33 -0
- models/train_cnn.py +2 -2
Dockerfile
CHANGED
|
@@ -10,7 +10,7 @@ RUN corepack enable && pnpm install --frozen-lockfile
|
|
| 10 |
COPY frontend/ .
|
| 11 |
RUN pnpm build
|
| 12 |
|
| 13 |
-
# Stage 2: Python backend
|
| 14 |
FROM python:3.11-slim
|
| 15 |
|
| 16 |
WORKDIR /app
|
|
@@ -26,7 +26,7 @@ COPY backend/pyproject.toml backend/uv.lock* ./
|
|
| 26 |
# Grab the uv binary from the official image
|
| 27 |
COPY --from=ghcr.io/astral-sh/uv:latest /uv /uvx /bin/
|
| 28 |
|
| 29 |
-
# Install Python dependencies (
|
| 30 |
RUN uv sync --frozen --no-dev
|
| 31 |
|
| 32 |
# Create necessary directories
|
|
@@ -45,5 +45,5 @@ ENV PORT=7860
|
|
| 45 |
EXPOSE 7860
|
| 46 |
|
| 47 |
# Use PORT environment variable (defaults to 7860 for Hugging Face Space compatibility)
|
| 48 |
-
#
|
| 49 |
CMD ["sh", "-c", "uv run uvicorn app.main:app --host 0.0.0.0 --port ${PORT}"]
|
|
|
|
| 10 |
COPY frontend/ .
|
| 11 |
RUN pnpm build
|
| 12 |
|
| 13 |
+
# Stage 2: Python backend with model training at runtime
|
| 14 |
FROM python:3.11-slim
|
| 15 |
|
| 16 |
WORKDIR /app
|
|
|
|
| 26 |
# Grab the uv binary from the official image
|
| 27 |
COPY --from=ghcr.io/astral-sh/uv:latest /uv /uvx /bin/
|
| 28 |
|
| 29 |
+
# Install Python dependencies (includes tensorflow and kagglehub for model training)
|
| 30 |
RUN uv sync --frozen --no-dev
|
| 31 |
|
| 32 |
# Create necessary directories
|
|
|
|
| 45 |
EXPOSE 7860
|
| 46 |
|
| 47 |
# Use PORT environment variable (defaults to 7860 for Hugging Face Space compatibility)
|
| 48 |
+
# Model training happens at first startup if models don't exist (see app/main.py)
|
| 49 |
CMD ["sh", "-c", "uv run uvicorn app.main:app --host 0.0.0.0 --port ${PORT}"]
|
backend/app/voice_analysis.py
CHANGED
|
@@ -24,9 +24,11 @@ N_MFCC = 40
|
|
| 24 |
EMOTION_LABELS = ['neutral', 'calm', 'happy', 'sad', 'angry', 'fearful', 'disgust', 'surprised']
|
| 25 |
|
| 26 |
# Paths to models
|
|
|
|
|
|
|
|
|
|
| 27 |
BACKEND_DIR = os.path.dirname(os.path.dirname(os.path.abspath(__file__)))
|
| 28 |
-
|
| 29 |
-
MODEL_DIR = os.path.join(PROJECT_ROOT, "models")
|
| 30 |
|
| 31 |
# CNN model paths
|
| 32 |
CNN_MODEL_PATH = os.path.join(MODEL_DIR, "ravdess_cnn_model.h5")
|
|
|
|
| 24 |
EMOTION_LABELS = ['neutral', 'calm', 'happy', 'sad', 'angry', 'fearful', 'disgust', 'surprised']
|
| 25 |
|
| 26 |
# Paths to models
|
| 27 |
+
# __file__ is /app/app/voice_analysis.py in Docker, so:
|
| 28 |
+
# - os.path.dirname(__file__) = /app/app
|
| 29 |
+
# - os.path.dirname(os.path.dirname(__file__)) = /app (project root)
|
| 30 |
BACKEND_DIR = os.path.dirname(os.path.dirname(os.path.abspath(__file__)))
|
| 31 |
+
MODEL_DIR = os.path.join(BACKEND_DIR, "models")
|
|
|
|
| 32 |
|
| 33 |
# CNN model paths
|
| 34 |
CNN_MODEL_PATH = os.path.join(MODEL_DIR, "ravdess_cnn_model.h5")
|
backend/uv.lock
CHANGED
|
@@ -1053,6 +1053,35 @@ wheels = [
|
|
| 1053 |
{ url = "https://files.pythonhosted.org/packages/9e/6a/a83720e953b1682d2d109d3c2dbb0bc9bf28cc1cbc205be4ef4be5da709d/jsonpointer-3.1.1-py3-none-any.whl", hash = "sha256:8ff8b95779d071ba472cf5bc913028df06031797532f08a7d5b602d8b2a488ca", size = 7659, upload-time = "2026-03-23T22:32:31.568Z" },
|
| 1054 |
]
|
| 1055 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1056 |
[[package]]
|
| 1057 |
name = "keras"
|
| 1058 |
version = "3.12.1"
|
|
@@ -3325,6 +3354,7 @@ dependencies = [
|
|
| 3325 |
{ name = "fastapi" },
|
| 3326 |
{ name = "httpx" },
|
| 3327 |
{ name = "joblib" },
|
|
|
|
| 3328 |
{ name = "langchain-core" },
|
| 3329 |
{ name = "langchain-nvidia-ai-endpoints" },
|
| 3330 |
{ name = "langgraph" },
|
|
@@ -3339,6 +3369,7 @@ dependencies = [
|
|
| 3339 |
{ name = "scikit-learn", version = "1.7.2", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version < '3.11'" },
|
| 3340 |
{ name = "scikit-learn", version = "1.8.0", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version >= '3.11'" },
|
| 3341 |
{ name = "soundfile" },
|
|
|
|
| 3342 |
{ name = "tf-keras" },
|
| 3343 |
{ name = "uvicorn" },
|
| 3344 |
]
|
|
@@ -3357,6 +3388,7 @@ requires-dist = [
|
|
| 3357 |
{ name = "fastapi", specifier = ">=0.115.0" },
|
| 3358 |
{ name = "httpx", specifier = ">=0.27.0" },
|
| 3359 |
{ name = "joblib", specifier = ">=1.4.0" },
|
|
|
|
| 3360 |
{ name = "langchain-core", specifier = ">=0.3.0" },
|
| 3361 |
{ name = "langchain-nvidia-ai-endpoints", specifier = ">=0.3.0" },
|
| 3362 |
{ name = "langgraph", specifier = ">=0.2.0" },
|
|
@@ -3369,6 +3401,7 @@ requires-dist = [
|
|
| 3369 |
{ name = "python-multipart", specifier = ">=0.0.12" },
|
| 3370 |
{ name = "scikit-learn", specifier = ">=1.5.0" },
|
| 3371 |
{ name = "soundfile", specifier = ">=0.12.0" },
|
|
|
|
| 3372 |
{ name = "tf-keras", specifier = ">=2.18.0" },
|
| 3373 |
{ name = "uvicorn", specifier = ">=0.32.0" },
|
| 3374 |
]
|
|
|
|
| 1053 |
{ url = "https://files.pythonhosted.org/packages/9e/6a/a83720e953b1682d2d109d3c2dbb0bc9bf28cc1cbc205be4ef4be5da709d/jsonpointer-3.1.1-py3-none-any.whl", hash = "sha256:8ff8b95779d071ba472cf5bc913028df06031797532f08a7d5b602d8b2a488ca", size = 7659, upload-time = "2026-03-23T22:32:31.568Z" },
|
| 1054 |
]
|
| 1055 |
|
| 1056 |
+
[[package]]
|
| 1057 |
+
name = "kagglehub"
|
| 1058 |
+
version = "1.0.0"
|
| 1059 |
+
source = { registry = "https://pypi.org/simple" }
|
| 1060 |
+
dependencies = [
|
| 1061 |
+
{ name = "kagglesdk" },
|
| 1062 |
+
{ name = "packaging" },
|
| 1063 |
+
{ name = "pyyaml" },
|
| 1064 |
+
{ name = "requests" },
|
| 1065 |
+
{ name = "tqdm" },
|
| 1066 |
+
]
|
| 1067 |
+
sdist = { url = "https://files.pythonhosted.org/packages/98/b2/a542a926e47f0f6947d9fa7117b3a730edbf2a76fffc71e19b8755a58f33/kagglehub-1.0.0.tar.gz", hash = "sha256:21dc25d0279e2071f8b97cd9e1393d003ea5e054ea48f1e8139a39e4771e9a8d", size = 117315, upload-time = "2026-02-11T19:45:36.227Z" }
|
| 1068 |
+
wheels = [
|
| 1069 |
+
{ url = "https://files.pythonhosted.org/packages/18/78/08cec00ea05fd2469f9395da0306bb368c4ed275693be8d31473eafaf90c/kagglehub-1.0.0-py3-none-any.whl", hash = "sha256:9397f0c6af04cdefa6fa8734c31b42863e8741aad5832c6f3af52f1ecf8fe509", size = 70632, upload-time = "2026-02-11T19:45:34.626Z" },
|
| 1070 |
+
]
|
| 1071 |
+
|
| 1072 |
+
[[package]]
|
| 1073 |
+
name = "kagglesdk"
|
| 1074 |
+
version = "0.1.16"
|
| 1075 |
+
source = { registry = "https://pypi.org/simple" }
|
| 1076 |
+
dependencies = [
|
| 1077 |
+
{ name = "protobuf" },
|
| 1078 |
+
{ name = "requests" },
|
| 1079 |
+
]
|
| 1080 |
+
sdist = { url = "https://files.pythonhosted.org/packages/23/0e/51bf72a462e1e72fe3427b7c52b11c9c52cbcc63d7ce90f81a8f56d5a71b/kagglesdk-0.1.16.tar.gz", hash = "sha256:4a20da4ac6f4085e64b976a313ee136d4698737dc5be7c0f13009fadd41d5540", size = 121064, upload-time = "2026-02-27T19:32:34.019Z" }
|
| 1081 |
+
wheels = [
|
| 1082 |
+
{ url = "https://files.pythonhosted.org/packages/69/6b/db30f17ad132391ac37a751fa45b32fd954a7ffa484fa3550eee9678334d/kagglesdk-0.1.16-py3-none-any.whl", hash = "sha256:a26ba7a754866f8eef1e327e78101f2960b6fe9b1b323183f2f61170abdb11ff", size = 160520, upload-time = "2026-02-27T19:32:32.721Z" },
|
| 1083 |
+
]
|
| 1084 |
+
|
| 1085 |
[[package]]
|
| 1086 |
name = "keras"
|
| 1087 |
version = "3.12.1"
|
|
|
|
| 3354 |
{ name = "fastapi" },
|
| 3355 |
{ name = "httpx" },
|
| 3356 |
{ name = "joblib" },
|
| 3357 |
+
{ name = "kagglehub" },
|
| 3358 |
{ name = "langchain-core" },
|
| 3359 |
{ name = "langchain-nvidia-ai-endpoints" },
|
| 3360 |
{ name = "langgraph" },
|
|
|
|
| 3369 |
{ name = "scikit-learn", version = "1.7.2", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version < '3.11'" },
|
| 3370 |
{ name = "scikit-learn", version = "1.8.0", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version >= '3.11'" },
|
| 3371 |
{ name = "soundfile" },
|
| 3372 |
+
{ name = "tensorflow" },
|
| 3373 |
{ name = "tf-keras" },
|
| 3374 |
{ name = "uvicorn" },
|
| 3375 |
]
|
|
|
|
| 3388 |
{ name = "fastapi", specifier = ">=0.115.0" },
|
| 3389 |
{ name = "httpx", specifier = ">=0.27.0" },
|
| 3390 |
{ name = "joblib", specifier = ">=1.4.0" },
|
| 3391 |
+
{ name = "kagglehub", specifier = ">=0.3.0" },
|
| 3392 |
{ name = "langchain-core", specifier = ">=0.3.0" },
|
| 3393 |
{ name = "langchain-nvidia-ai-endpoints", specifier = ">=0.3.0" },
|
| 3394 |
{ name = "langgraph", specifier = ">=0.2.0" },
|
|
|
|
| 3401 |
{ name = "python-multipart", specifier = ">=0.0.12" },
|
| 3402 |
{ name = "scikit-learn", specifier = ">=1.5.0" },
|
| 3403 |
{ name = "soundfile", specifier = ">=0.12.0" },
|
| 3404 |
+
{ name = "tensorflow", specifier = ">=2.15.0" },
|
| 3405 |
{ name = "tf-keras", specifier = ">=2.18.0" },
|
| 3406 |
{ name = "uvicorn", specifier = ">=0.32.0" },
|
| 3407 |
]
|
models/train_cnn.py
CHANGED
|
@@ -1,3 +1,3 @@
|
|
| 1 |
version https://git-lfs.github.com/spec/v1
|
| 2 |
-
oid sha256:
|
| 3 |
-
size
|
|
|
|
| 1 |
version https://git-lfs.github.com/spec/v1
|
| 2 |
+
oid sha256:615316b4c5ea006dcf082eb520c35275fcb6fdc48eb686110d8d66baf50d8495
|
| 3 |
+
size 6752
|