#python #django #xmlhttprequest #webrtc #blob
#python #django #xmlhttprequest #webrtc #большой двоичный объект
Вопрос:
Я использую 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 раза (я думаю, она должна работать до тех пор, пока камера не будет закрыта).
Может ли кто-нибудь иметь представление о том, в чем проблема?
Спасибо и всего наилучшего.
Ответ №1:
Вы должны request.FILES
искать изображение
def control4(request):
print(request.FILES['image'])
print(request.POST.get('threshold'))
return render(request, 'local.html')
Комментарии:
1. Спасибо за ваш ответ. На самом деле, я делал это раньше. Однако, хотя я использовал ключевое слово «image» в файле .html, я получил ошибку «MultiValueDictKeyError image», когда я использовал код, как вы предложили. Поскольку в первом сообщении он не может добавить изображение, ключи кажутся пустыми. Однако во второй раз он отправляет изображение. Я думаю, что проблема находится на переднем плане. Большое вам спасибо. У вас также есть какие-либо идеи о том, почему он отправляет три раза и почему он пуст в первый раз?
2. Не из опубликованного вами кода, он ничего не показывает для запуска загрузки, кроме нажатия кнопки