# syntax = docker/dockerfile:1.2 FROM continuumio/miniconda3:24.1.2-0 # install os dependencies including xauth for xvfb RUN mkdir -p /usr/share/man/man1 RUN apt-get update && \ DEBIAN_FRONTEND=noninteractive apt-get install --no-install-recommends -y \ ca-certificates \ curl \ vim \ sudo \ default-jre \ git \ gcc \ build-essential \ wget \ xvfb \ xauth \ && rm -rf /var/lib/apt/lists/* RUN conda install python=3.8.13 -y # Install Python and model dependencies RUN pip install openmim RUN pip install torch==2.0.0 RUN mim install mmcv-full==1.7.0 RUN pip install mmdet==2.27.0 RUN pip install torchserve RUN pip install mmpose==0.29.0 RUN pip install torchvision==0.15.1 RUN pip install numpy==1.24.4 scikit-image scipy opencv-python requests pyyaml flask glfw PyOpenGL Pillow shapely tqdm gradio # bugfix for xtcocoapi, a dependency of mmpose RUN git clone https://github.com/jin-s13/xtcocoapi.git WORKDIR xtcocoapi RUN pip install -r requirements.txt RUN python setup.py install WORKDIR / # prep torchserve RUN mkdir -p /home/torchserve/model-store RUN wget https://github.com/facebookresearch/AnimatedDrawings/releases/download/v0.0.1/drawn_humanoid_detector.mar -P /home/torchserve/model-store/ RUN wget https://github.com/facebookresearch/AnimatedDrawings/releases/download/v0.0.1/drawn_humanoid_pose_estimator.mar -P /home/torchserve/model-store/ COPY config.properties /home/torchserve/config.properties # Create a non-root user with UID 1000 RUN adduser --disabled-password --gecos '' --uid 1000 appuser WORKDIR /app COPY setup.py /app/setup.py COPY animated_drawings /app/animated_drawings COPY app.py /app/app.py COPY examples /app/examples RUN pip install -e . # Pre-create directories and set permissions RUN mkdir -p uploads_gradio outputs_gradio flagged && \ chown -R appuser:appuser /app USER appuser EXPOSE 7860 # Start TorchServe, warm-up models, then run the app. # Using xvfb-run for headless rendering. CMD sh -c "\ torchserve --start --ncs --ts-config /home/torchserve/config.properties && \ sleep 15 && \ # Warm-up requests with a small test image to load models into memory. curl -X POST http://localhost:8080/predictions/drawn_humanoid_detector -F image=@/app/examples/test.png && \ curl -X POST http://localhost:8080/predictions/drawn_humanoid_pose_estimator -F image=@/app/examples/test.png && \ xvfb-run -a python app.py \ "