Как считать штрих-код с помощью веб-камеры в django?

Я делаю проект, в котором пытаюсь открыть веб-камеру в django как устройство для чтения кодов. Я следовал этому руководству: "https://www.youtube.com/watch?v=xz9MvyKGYio&list=WL&index=24&t=12s", где описано, как открыть камеру в django. Я бы хотел, чтобы веб-камера считывала штрих-код и перенаправляла этот код в другую функцию. Но я не знаю, как сломать веб-камеру и перенаправить, когда код существует. Итак, это мой views.py:

from django.shortcuts import render
import cv2
import threading
from django.http import StreamingHttpResponse, HttpResponse
from django.views.decorators import gzip
from pyzbar.pyzbar import decode
import time
from django.shortcuts import redirect

def index(request):
    return render(request, 'webcam/home.html')

# Create your views here.
@gzip.gzip_page
def home(request):
    #https://www.youtube.com/watch?v=xz9MvyKGYio&list=WL&index=23&t=12s
    try:
        cam = VideoCamera()
        return StreamingHttpResponse(gen(cam), content_type="multipart/x-mixed-replace;boundary=frame")
    except:
        pass
    return render(request, 'app1.html')

def helloView(request, code):
    http = f"Hello {code}"
    return HttpResponse(http)

#to capture video class
class VideoCamera(object):
    def __init__(self):

        self.video = cv2.VideoCapture(0)
        (self.grabbed, self.frame ) = self.video.read()
        threading.Thread(target=self.update, args=()).start()

    def __del__(self):
        self.video.release()
    def get_frame(self):
        image = self.frame
        _, jpeg = cv2.imencode('.jpg', image)
        ################################
        # capture code /simple example / 
        n_1 = '9788366384088'
        for code in decode(image):
            n = str(code.data.decode('utf-8'))
            if n_1 == n:
                print(n)
                time.sleep(5)
                # how to redirect to helloView?
        ###########################
        return jpeg.tobytes()

    def update(self):
        while True:
            (self.grabbed, self.frame) = self.video.read()

def gen(camera):
    while True:
        frame = camera.get_frame()
        yield (b'--frame\r\n'
               b'Content-Type: image/jpeg\r\n\r\n' + frame + b'\r\n\r\n')

В VideoCamera.get_frame я добавил простой пример, где я пытаюсь захватить код n_1, но я не могу перенаправить этот код в helloView. Короче говоря: Я открываю браузер, где находится живая веб-камера -> Я сканирую ean код -> Если ean код правильный, перенаправляю на helloView(). Возможно ли это сделать? И где я должен захватить ean код ?

Вы не можете запустить код python во фронтенде. Вам нужно использовать Javascript для загрузки камеры и передачи изображения в бэкенд. Затем вы можете использовать openCV для извлечения кода.

Прочитайте о webrtc (https://webrtc.org/) для доступа к камере во фронтенде.

Вернуться на верх