youssef
commited on
Commit
Β·
426a08c
1
Parent(s):
f5765c8
change sdk
Browse files- Dockerfile +53 -29
- README.md +1 -2
- app.py +29 -0
- src/video_processor/processor.py +9 -1
Dockerfile
CHANGED
@@ -1,34 +1,58 @@
|
|
1 |
FROM nvidia/cuda:12.3.2-cudnn9-devel-ubuntu22.04
|
2 |
-
|
3 |
-
# Set environment variables
|
4 |
ENV DEBIAN_FRONTEND=noninteractive
|
5 |
-
|
6 |
-
|
7 |
-
|
8 |
-
# Install system dependencies
|
9 |
-
RUN apt-get update && apt-get install -y \
|
10 |
-
python3.10 \
|
11 |
-
python3-pip \
|
12 |
-
python3.10-dev \
|
13 |
-
build-essential \
|
14 |
-
ninja-build \
|
15 |
git \
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
16 |
&& rm -rf /var/lib/apt/lists/*
|
17 |
|
18 |
-
|
19 |
-
|
20 |
-
|
21 |
-
|
22 |
-
|
23 |
-
|
24 |
-
|
25 |
-
|
26 |
-
|
27 |
-
|
28 |
-
|
29 |
-
|
30 |
-
|
31 |
-
|
32 |
-
|
33 |
-
|
34 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
FROM nvidia/cuda:12.3.2-cudnn9-devel-ubuntu22.04
|
|
|
|
|
2 |
ENV DEBIAN_FRONTEND=noninteractive
|
3 |
+
RUN apt-get update && \
|
4 |
+
apt-get upgrade -y && \
|
5 |
+
apt-get install -y --no-install-recommends \
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
6 |
git \
|
7 |
+
git-lfs \
|
8 |
+
wget \
|
9 |
+
curl \
|
10 |
+
# python build dependencies \
|
11 |
+
build-essential \
|
12 |
+
libssl-dev \
|
13 |
+
zlib1g-dev \
|
14 |
+
libbz2-dev \
|
15 |
+
libreadline-dev \
|
16 |
+
libsqlite3-dev \
|
17 |
+
libncursesw5-dev \
|
18 |
+
xz-utils \
|
19 |
+
tk-dev \
|
20 |
+
libxml2-dev \
|
21 |
+
libxmlsec1-dev \
|
22 |
+
libffi-dev \
|
23 |
+
liblzma-dev \
|
24 |
+
# gradio dependencies \
|
25 |
+
ffmpeg \
|
26 |
+
&& apt-get clean \
|
27 |
&& rm -rf /var/lib/apt/lists/*
|
28 |
|
29 |
+
RUN useradd -m -u 1000 user
|
30 |
+
USER user
|
31 |
+
ENV HOME=/home/user \
|
32 |
+
PATH=/home/user/.local/bin:${PATH}
|
33 |
+
WORKDIR ${HOME}/app
|
34 |
+
|
35 |
+
RUN curl https://pyenv.run | bash
|
36 |
+
ENV PATH=${HOME}/.pyenv/shims:${HOME}/.pyenv/bin:${PATH}
|
37 |
+
ARG PYTHON_VERSION=3.10.12
|
38 |
+
RUN pyenv install ${PYTHON_VERSION} && \
|
39 |
+
pyenv global ${PYTHON_VERSION} && \
|
40 |
+
pyenv rehash && \
|
41 |
+
pip install --no-cache-dir -U pip setuptools wheel && \
|
42 |
+
pip install packaging ninja
|
43 |
+
|
44 |
+
COPY --chown=1000 ./requirements.txt /tmp/requirements.txt
|
45 |
+
RUN pip install --no-cache-dir --upgrade -r /tmp/requirements.txt && \
|
46 |
+
pip install flash-attn --no-build-isolation
|
47 |
+
|
48 |
+
COPY --chown=1000 . ${HOME}/app
|
49 |
+
ENV PYTHONPATH=${HOME}/app \
|
50 |
+
PYTHONUNBUFFERED=1 \
|
51 |
+
GRADIO_ALLOW_FLAGGING=never \
|
52 |
+
GRADIO_NUM_PORTS=1 \
|
53 |
+
GRADIO_SERVER_NAME=0.0.0.0 \
|
54 |
+
GRADIO_THEME=huggingface \
|
55 |
+
SYSTEM=spaces \
|
56 |
+
FLASH_ATTENTION_SKIP_CUDA_BUILD=TRUE
|
57 |
+
|
58 |
+
CMD ["python", "app.py"]
|
README.md
CHANGED
@@ -3,8 +3,7 @@ title: Smollvm
|
|
3 |
emoji: π
|
4 |
colorFrom: pink
|
5 |
colorTo: gray
|
6 |
-
sdk:
|
7 |
-
sdk_version: 5.17.1
|
8 |
app_file: src/app.py
|
9 |
pinned: false
|
10 |
short_description: test
|
|
|
3 |
emoji: π
|
4 |
colorFrom: pink
|
5 |
colorTo: gray
|
6 |
+
sdk: docker
|
|
|
7 |
app_file: src/app.py
|
8 |
pinned: false
|
9 |
short_description: test
|
app.py
ADDED
@@ -0,0 +1,29 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
import gradio as gr
|
2 |
+
from src.video_processor.processor import VideoAnalyzer
|
3 |
+
import logging
|
4 |
+
|
5 |
+
logging.basicConfig(level=logging.INFO)
|
6 |
+
logger = logging.getLogger(__name__)
|
7 |
+
|
8 |
+
def process_video(video_path):
|
9 |
+
try:
|
10 |
+
analyzer = VideoAnalyzer()
|
11 |
+
result = analyzer.process_video(video_path)
|
12 |
+
return result[0]["description"]
|
13 |
+
except Exception as e:
|
14 |
+
logger.error(f"Error processing video: {str(e)}", exc_info=True)
|
15 |
+
return f"Error processing video: {str(e)}"
|
16 |
+
|
17 |
+
# Create Gradio interface
|
18 |
+
demo = gr.Interface(
|
19 |
+
fn=process_video,
|
20 |
+
inputs=gr.Video(label="Upload your video"),
|
21 |
+
outputs=gr.Textbox(label="Video Analysis", lines=10),
|
22 |
+
title="Video Analysis with SmolVLM",
|
23 |
+
description="Upload a video to get a detailed analysis of its content, including actions, events, timestamps, and important details.",
|
24 |
+
examples=[], # You can add example videos here
|
25 |
+
cache_examples=False
|
26 |
+
)
|
27 |
+
|
28 |
+
if __name__ == "__main__":
|
29 |
+
demo.launch()
|
src/video_processor/processor.py
CHANGED
@@ -5,7 +5,15 @@ import logging
|
|
5 |
|
6 |
logger = logging.getLogger(__name__)
|
7 |
|
8 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
9 |
logger.info(f"Using device: {DEVICE}")
|
10 |
|
11 |
class VideoAnalyzer:
|
|
|
5 |
|
6 |
logger = logging.getLogger(__name__)
|
7 |
|
8 |
+
def _grab_best_device(use_gpu=True):
|
9 |
+
if torch.cuda.device_count() > 0 and use_gpu:
|
10 |
+
device = "cuda"
|
11 |
+
else:
|
12 |
+
device = "cpu"
|
13 |
+
return device
|
14 |
+
|
15 |
+
DEVICE = _grab_best_device()
|
16 |
+
|
17 |
logger.info(f"Using device: {DEVICE}")
|
18 |
|
19 |
class VideoAnalyzer:
|