Я использую Django и пытаюсь отправить данные веб-камеры с помощью XMLHttpRequest в фоновый режим (view.py) для обработки каждого кадра. Я перехожу по этой ссылке, и большинство людей предлагает аналогичный метод решения моей проблемы.

$(document).ready(function(){
  $('#trigger_button').click(function(){
    navigator.mediaDevices.getUserMedia(constraints)
    .then(stream => {
      document.getElementById("myVideo").srcObject = stream;
    })
    .catch(err => {
      alert('navigator.getUserMedia error: ', err)
    });
    drawCanvas.width = v.videoWidth;
    drawCanvas.height = v.videoHeight;
    imageCanvas.width = uploadWidth;
    imageCanvas.height = uploadWidth * (v.videoHeight / v.videoWidth);
    drawCtx.lineWidth = 4;
    drawCtx.strokeStyle = "cyan";
    drawCtx.font = "20px Verdana";
    drawCtx.fillStyle = "cyan";
    imageCanvas.getContext("2d").drawImage(v, 0, 0, v.videoWidth, v.videoHeight, 0, 0, uploadWidth, uploadWidth * (v.videoHeight / v.videoWidth));

    imageCanvas.toBlob(postFile, 'image/jpeg');
  });
});
function postFile(file) {
  var formdata = new FormData();
  formdata.append("image", file);
  formdata.append("threshold", scoreThreshold);
  var xhr = new XMLHttpRequest();
  xhr.open('POST', apiServer, true);

  xhr.onload = function () {
    if (this.status === 200) {
      var objects = JSON.parse(this.response);
      drawBoxes(objects);
      imageCtx.drawImage(v, 0, 0, v.videoWidth, v.videoHeight, 0, 0, uploadWidth, uploadWidth * (v.videoHeight / v.videoWidth));
      imageCanvas.toBlob(postFile, 'image/jpeg');
    }
    else {
      alert(this.status);
    }
  };
  xhr.send(formdata);
}

Затем я пытаюсь получить доступ к данным в запросе в view.py следующим образом:

def control4(request):
    print(request.POST.get('image'))
    print(request.POST.get('threshold'))
    return render(request, 'local.html')

Однако, хотя request.Post.get ('threshold') возвращает значение, request.POST.get ('image') возвращает None. Кроме того, этот метод повторяется трижды, а затем прекращается отправка обратной связи. То есть функция control4 печатает 3 раза (думаю, должно работать до закрытия камеры).

Может ли кто-нибудь понять, в чем проблема?

Спасибо и всего наилучшего.

2
Can 9 Окт 2020 в 04:15

1 ответ

Лучший ответ

Вы должны искать изображение в request.FILES

def control4(request):
    print(request.FILES['image'])
    print(request.POST.get('threshold'))
    return render(request, 'local.html')
3
Musa 9 Окт 2020 в 19:51