Как заставить Open CV работать в развернутом веб-приложении - PullRequest
0 голосов
/ 04 ноября 2019

У меня есть приложение, которое я могу запустить локально, и оно открывает мою веб-камеру, а затем обнаруживает код qr. Это работает хорошо, когда я запускаю приложение локально, но затем я использовал приложение на своем веб-сервере, и оно получает ошибку сервера (500).

Приложение было создано на Django, затем для развертывания я использовал цифровой океан (ubuntu) и я также использую nginx и gunicorn.

html

<li style= "margin: auto; width:auto"><a style="color:white" href="{% url 'attendees:qrscanner' %}" target="_blank"><button style="margin:15px; width:200px" class="btn btn-outline-primary">Check QR Scanner</button></a></li>

views.py

from django.shortcuts import get_object_or_404, render, redirect
from django.utils import timezone
from django.db.models import Sum
from .models import Attendee, ActivityLog

import re, qrcode, cv2, csv, io, os
import numpy as np
import pyzbar.pyzbar as pyzbar

def qrscanner(request):
    cap = cv2.VideoCapture(0)
    font = cv2.FONT_HERSHEY_PLAIN

    frame_width = int(cap.get(3))
    frame_height = int(cap.get(4))

    aid = None

    while aid is None:
        _, frame = cap.read()

        decodedObjects = pyzbar.decode(frame)

        for obj in decodedObjects:
            aid = re.findall('/attendees/confirmation/([0-9]+)', str(obj.data))
            try:
                attendee = Attendee.objects.get(pk=str(aid[0]))
                attendee.present = True
                attendee.timestamp = timezone.now()
                attendee.activity.update_or_create(time_log=attendee.timestamp)
                attendee.save()
                context = {
                    'scan': 'QR Successfully Scanned',
                    'attendee': attendee,
                }
            except:
                context = {
                    'noscan': 'QR Scan Unsuccessful'
                }


        cv2.imshow("QR Reader", frame)

        if aid is not None:
            cv2.destroyAllWindows()
            break

        key = cv2.waitKey(1) & 0xFF
        if key == 27:
            context = {
                'noscan': 'No QR Scanned',
            }
            cv2.destroyAllWindows()
            break

    return render(request, 'attendees/qrscanner.html', context)

Ожидаемые результаты: -Как когда мое приложение запускается локально, я захожу на свой сайт, где я включил приложение, я нажимаю кнопку сканера qr и "cap = cv2.VideoCapture (0)" открывает фрейм, используякамера моего компьютера для обнаружения qr.

Фактические результаты: - локально все в порядке, я нажимаю кнопку сканера qr, и "cap = cv2.VideoCapture (0)" открывает рамкус помощью камеры моего компьютера, чтобы обнаружить Qr. НО на моем веб-сайте, как только я получаю доступ к этой части приложения, я получаю сообщение об ошибке сервера (500).

Примечание: - Мне пришлось установить через pip someдополнительные файлы для онлайн-приложения, чтобы приложение показывало некоторые HTML, и у меня есть другие приложения на сайте. БИБЛИОТЕКИ, УСТАНОВЛЕННЫЕ НА МЕСТЕ (замораживание в пунктах):

colorama==0.4.1
dj-database-url==0.5.0
Django==2.2.3
django-qr-code==1.0.0
django-widget-tweaks==1.4.5
docutils==0.15.2
mysqlclient==1.4.2
numpy==1.17.0
opencv-python==4.1.0.25
pathlib==1.0.1
Pillow==6.0.0
python-decouple==3.1
pytz==2019.1
pyzbar==0.1.8
qrcode==6.1
six==1.12.0
sqlparse==0.3.0

БИБЛИОТЕКИ, УСТАНОВЛЕННЫЕ на сайте (замораживание в пунктах):

beautifulsoup4==4.8.0
certifi==2019.9.11
chardet==3.0.4
cycler==0.10.0
demjson==2.2.4
Django==2.2.6
django-authentication==3.2
django-qr==2.0
django-realestate==4.0
django-widget-tweaks==1.4.5
gunicorn==19.9.0
idna==2.8
jtutils==0.0.6
kiwisolver==1.1.0
leven==1.0.4
matplotlib==3.1.1
nose==1.3.7
numpy==1.17.2
opencv-python==4.1.1.26
opencv-python-headless==4.1.1.26
pandas==0.25.1
Pillow==6.2.0
pkg-resources==0.0.0
psycopg2==2.8.3
psycopg2-binary==2.8.3
pyparsing==2.4.2
python-csv==0.0.11
python-dateutil==2.8.0
pytz==2019.2
pyzbar==0.1.8
qrcode==6.1
requests==2.22.0
six==1.12.0
soupsieve==1.9.4
sqlparse==0.3.0
urllib3==1.25.6
xlrd==1.2.0
xmltodict==0.12.0

1 Ответ

1 голос
/ 04 ноября 2019

Проблема в том, что cap = cv2.VideoCapture (0) фактически пытается открыть веб-камеру на сервере, на котором вы развернули приложение, а не на веб-камеру на вашем компьютере.

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