Я разрабатываю приложение Python, которое использует колбу, работающую в контейнере Docker на сервере Linux с Nginx. Приложение отлично работает на моей локальной машине, но когда я развертываю его на сервере, я сталкиваюсь с следующей ошибкой: < /p>
Ошибка: Приложение: Исключение: Traceback ( Последний звонок в последний раз): файл
"/app/app.py ", Line 32, in analyze_face
analyzer = facefeatureanalyzer () # Создание экземпляра здесь" /app/face_feature_analyzer/main_analyzer.py " , строка 43, в
init
self.face_app = faceanalysis (name = 'antelopev2', root = self.model_root) файл
"/usr/loc lib/python3.9/site-packages/insightface/app/face_analysis.py ",
line 43, в init
assert 'обнаружение' в Self.Models AssertionError
< /blockquote>
Вот код < /p>
class FaceFeatureAnalyzer:
def __init__(self):
self.model_root = "/root/.insightface"
self.model_path = os.path.join(self.model_root, "models/antelopev2")
self.zip_path = os.path.join(self.model_root, "models/antelopev2.zip")
self.model_url = "https://github.com/deepinsight/insightf ... lopev2.zip"
# Initialize FaceAnalysis
self.face_app = FaceAnalysis(name='antelopev2', root=self.model_root)
self.face_app.prepare(ctx_id=0, det_size=(640, 640))
< /code>
Я также пытался загрузить его в том же каталоге, но эта попытка также приводит к той же ошибке. Вот что я дополнительно попробовал < /p>
class FaceFeatureAnalyzer:
def __init__(self):
# Initialize the InsightFace model
self.face_app = FaceAnalysis(name='antelopev2')
self.face_app.prepare(ctx_id=0, det_size=(640, 640))
logger.info("Initialized FaceAnalysis with model 'antelopev2'.")
< /code>
то, что я наблюдал и пытался: < /strong>
журналы загрузки и извлечения модели:
• Во время запуска модель Antelopev2 загружается и загружается и Извлечено в/root/.insightface/models/antelopev2. Журналы подтверждают это: < /p>
Download completed.
Extracting /root/.insightface/models/antelopev2.zip to /root/.insightface/models/antelopev2...
Extraction completed.
Однако при проверке каталога он кажется пустым или программа не может обнаружить модели.
вручную добавление моделей
ранее, вручную загружать модель Antelopev2 и размещение ее в/root/.insightface/models/antelopev2, решило проблему. Я также устанавливаю соответствующие разрешения с помощью: < /p>
chmod -R 755 /root/.insightface/models/antelopev2
После внесения обновлений в кодовой базе и восстановления контейнера Docker, проблема вновь появилась. /> Существуют следующие файлы в/root/.insightface/models/antelopev2:#
1k3d68.onnx
2d106det.onnx
genderage.onnx
glintr100.onnx
scrfd_10g_bnkps.onnx
< /code>
Это ожидаемые файлы .onnx для antelopev2. < /p>
Приложение работает локально без каких -либо ошибок. Проблема возникает только в контейнере Docker на сервере Linux. Как я могу отладить или решить эту проблему? < /P>
dockerfile < /p>
FROM python:3.9-slim
# Set environment variables
ENV PYTHONDONTWRITEBYTECODE=1
ENV PYTHONUNBUFFERED=1
# Set the working directory in the container
WORKDIR /app
# Install system dependencies including libgl1-mesa-glx and others
RUN apt-get update && apt-get install -y --no-install-recommends \
libgl1-mesa-glx \
libglib2.0-0 \
g++ \
build-essential \
&& apt-get clean && rm -rf /var/lib/apt/lists/*
# Copy the requirements file into the container
COPY requirements.txt /app/
# Install Python dependencies
RUN pip install --upgrade pip
RUN pip install --no-cache-dir -r requirements.txt
# Copy the rest of the application code into the container
COPY . /app
EXPOSE 7002
# Run the Flask application
CMD ["python", "app.py"]
< /code>
docker-compose.yml
version: '3.8'
services:
flask-app:
build:
context: ./backend
container_name: flask-app
ports:
- "7000:7000"
environment:
- FLASK_RUN_HOST=0.0.0.0
- FLASK_RUN_PORT=7000
volumes:
- ./backend:/app
depends_on:
- nginx
nginx:
image: nginx:latest
container_name: nginx
ports:
- "80:80"
- "443:443"
volumes:
- ./nginx:/etc/nginx/sites-enabled
- ./nginx-certificates:/etc/letsencrypt
Подробнее здесь: https://stackoverflow.com/questions/793 ... docker-con