Распознавание лиц на веб-камере реализация: не удается прочитать свойство "дескриптор" undefined
Столкнувшись с этой проблемой при реализации распознавания лиц на веб-камере камеры для браузера с помощью узла js для веб-приложения. Эта ошибка возникает только тогда, когда я добавляю более 1 имени в свои метки в функции loadLabeledImages (). Если у меня есть одно имя, оно прекрасно работает. Новичок здесь, и я уже несколько дней получаю одну и ту же ошибку :c
Любая помощь приветствуется, это часть проекта, который должен быть завершен в течение недели!
Большое вам спасибо!
Ошибка Geeting:
Цитата:"Uncaught (в обещании) TypeError: не удается прочитать свойство "дескриптор" undefined"
1 const video = document.getElementById('video') 2 3 Promise.all([ 4 faceapi.nets.tinyFaceDetector.loadFromUri('/models'), 5 faceapi.nets.faceLandmark68Net.loadFromUri('/models'), 6 faceapi.nets.faceRecognitionNet.loadFromUri('/models'), 7 faceapi.nets.ssdMobilenetv1.loadFromUri('/models'), 8 ]).then(startVideo) 9 10 function startVideo() { 11 navigator.getUserMedia( 12 { video: {} }, 13 stream => video.srcObject = stream, 14 err => console.error(err) 15 ) 16 } 17 18 this.video.addEventListener('play',() => { 19 const canvas = faceapi.createCanvasFromMedia(video) 20 document.body.append(canvas) 21 const displaySize = { width: video.width, height: video.height } 22 faceapi.matchDimensions(canvas, displaySize) 23 setInterval(async () => { 24 const detections = await faceapi.detectAllFaces(video).withFaceLandmarks().withFaceDescriptors() 25 const resizedDetections = faceapi.resizeResults(detections, displaySize) 26 canvas.getContext('2d').clearRect(0, 0, canvas.width, canvas.height) 27 faceapi.draw.drawFaceLandmarks(canvas, resizedDetections) 28 this.labeledFaceDescriptors = await this.loadLabeledImages() const faceMatcher = new faceapi.FaceMatcher(labeledFaceDescriptors, 0.6) 29 const results = resizedDetections.map(d => faceMatcher.findBestMatch(d.descriptor)) 30 results.forEach((result, i) => { 31 const box = resizedDetections[i].detection.box 32 const drawBox = new faceapi.draw.DrawBox(box, {label: result.toString()}) 33 drawBox.draw(canvas) 34 }) 35 36 }, 100) 37 }) 38 39 function loadLabeledImages() { 40 41 try{ 42 const labels = ['Jane', 'Alex'] 43 44 return Promise.all( 45 labels.map(async label => { 46 const descriptions = [] 47 for (let i = 1; i <= 3; i++) { 48 const img = await faceapi.fetchImage(`public/img/${label}/${i}.jpg`) 49 const detections = await faceapi.detectSingleFace(img).withFaceLandmarks().withFaceDescriptor() 50 descriptions.push(detections.descriptor) 51 } 52 53 return new faceapi.LabeledFaceDescriptors(label, this.descriptions) }) 54 ) 55 56 } 57 catch(err){ 58 console.log(err) 59 } 60 61 }
Что я уже пробовал:
Я пробовал искать решения в google, но ничего не помогало.
Richard MacCutchan
Сообщение означает, что вы пытаетесь использовать переменную, которая не существует. Но поскольку вы не сказали нам, на какой линии это происходит, мы не можем догадаться, почему. Кроме того, Пожалуйста, не говорите, что ваш вопрос срочный. Здесь каждый вопрос имеет равный приоритет.
idk_Idk
Мне так жаль! Новое здесь, но я уважаю и признаю, что не должен был говорить, что это срочно. Я удалил эту часть. Я не знал, как выделить номер строки, поэтому подчеркнул строки, где появляется "дескриптор"- то есть проблема. Спасибо!
Richard Deeming
Я добавил номера строк в ваш кодовый блок. Из какой строки выбрасывается ошибка?
Richard MacCutchan
Спасибо, Ричард, 29 или 50.
Richard MacCutchan
Это не может быть та строка, так как она не содержит ссылки на descriptor
Это должна быть либо строка 29, либо строка 50. Вам нужно выяснить, почему ссылка на любую из этих строк равна нулю.
idk_Idk
Спасибо тебе, Ричард и Ричард!
Да, ошибка относится к строке 51. И ошибка также относится к строке 28, так как функция loadLabledImages() вызывается на 28. Я подчеркнул другие строки, поскольку дескриптор упоминается во всех этих строках.
Я понимаю, что это происходит потому, что в дескрипторе нет никакой ценности. Я много читал о неопределенной ошибке, чтобы понять ее. Но я не могу понять, почему он равен нулю. Он прекрасно работает, когда его использует только один человек. Но как только добавляется еще один человек, он становится неопределенным. Я так сожалею о путанице, я просто очень Отчаянно ищу решение. Спасибо Вам за вашу помощь!