Не удается подключиться к проблеме X-сервера с docker в ec2 в среде linux - PullRequest
0 голосов
/ 03 февраля 2020

Я сделал модель распознавания эмоций на лице. Я хочу развернуть это на экземпляре ec2, где пользователь может загрузить видео, и мой код будет рисовать ограничивающие рамки на лицах в видеокадрах, и на основе этого будут отображаться видеокадры вместе с ограничивающими прямоугольниками и прогнозируемым выражением лица. В настоящее время у меня есть docker изображение для кода на экземпляре ec2.

Но я получаю сообщение об ошибке: «Не удается подключиться к X-серверу» всякий раз, когда я пытаюсь составить docker с помощью команды sudo docker-compose up.

Я пробовал различные решения, но я не в состоянии правильно понять, что все происходит в решениях. Может кто-нибудь сказать, пожалуйста, самый простой способ сделать это и объяснить это правильно?
Решения пробовали: Можно ли запустить GUI приложений в Docker контейнере?

РЕДАКТИРОВАТЬ:
По сути, я просто хочу веб-приложение, в которое пользователь мог бы загрузить видео и в выходной файл просмотреть видео, в котором в каждом кадре на лицах изображения нарисован ограничивающий прямоугольник, а над ним помечена предсказанная эмоция лица.

Ниже приведен мой код для отображения видеокадров с ограничивающими рамками и прогнозируемым выражением лица:

import numpy as np
import argparse
import cv2
import os
from keras.preprocessing.image import img_to_array, load_img
from keras.models import load_model
import os
import time
os.environ['TF_CPP_MIN_LOG_LEVEL'] = '2'
model_file = "facial_model.h5"
# emotions will be displayed on your face from the webcam feed
model = load_model(model_file, compile=False)

# prevents openCL usage and unnecessary logging messages
cv2.ocl.setUseOpenCL(False)

# dictionary which assigns each label an emotion (alphabetical order)
emotion = ["Angry", "Disgusted", "Fearful",
           "Happy", "Neutral", "Sad", "Surprised"]

facecasc = cv2.CascadeClassifier(
    cv2.data.haarcascades + 'haarcascade_frontalface_default.xml')

# start the webcam feed
cap = cv2.VideoCapture('video.mp4')
img_width = 48
img_height = 48

while True:
    # Find haar cascade to draw bounding box around face
    ret, frame = cap.read()
    # frame = cv2.transpose(frame, 0)
    # frame = cv2.flip(frame, flipCode=0)
    if not ret:
        break
    gray = cv2.cvtColor(frame, cv2.COLOR_BGR2GRAY)
    faces = facecasc.detectMultiScale(
        gray, scaleFactor=1.3, minNeighbors=5)

    for (x, y, w, h) in faces:
        cv2.rectangle(frame, (x, y), (x+w, y+h), (255, 0, 0), 1)
        cropped_img = gray[y:y + h, x:x + w]
        try:
            os.remove("image.jpeg")
        except:
            pass
        cv2.imwrite('image.jpeg', cropped_img)
        path = 'image.jpeg'
        img = load_img(path, target_size=(
            img_width, img_height), color_mode='grayscale')
        img = img_to_array(img)
        img = np.expand_dims(img, axis=0)
        index = model.predict_classes(img)
        val = emotion[index[0]]

        cv2.putText(frame, val, (x+20, y-60),
                    cv2.FONT_HERSHEY_SIMPLEX, 1, (255, 0, 0), 2, cv2.LINE_AA)

    cv2.imshow('Video', cv2.resize(
        frame, (800, 800), interpolation=cv2.INTER_CUBIC))
    if cv2.waitKey(20) & 0xFF == ord('q'):
        break

cap.release()
cv2.destroyAllWindows()

Dockerfile:

# The first instruction is what image we want to base our container on
# We Use an official Python runtime as a parent image
FROM python:3.6

# The enviroment variable ensures that the python output is set straight
# to the terminal with out buffering it first
ENV PYTHONUNBUFFERED 1

# create root directory for our project in the container
RUN mkdir /facial_model

# Set the working directory to /facial_model
WORKDIR /facial_model

# Copy the current directory contents into the container at /facial_model
ADD . /facial_model/

# Install any needed packages specified in requirements.txt
RUN pip install -r requirements.txt

docker -compose.yml

version: "3"

services:
    web:
        build: .
        command: bash -c "python manage.py makemigrations && python manage.py migrate && python manage.py runserver 0.0.0.0:8000"
        container_name:facial_model
        volumes:
            - .:/facial_model
        ports:
            - "8000:8000"

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...