Это была самая последняя проблема в моей попытке предварительно обработать изображение, которое я извлекаю из DOM после загрузки страницы. Мы добрались до места, где пользователь может загрузить изображение, и когда они нажимают нашу кнопку, чтобы идентифицировать изображение, он проходит процесс предварительной обработки изображения, которое будет принято в нашей модели, распечатывает значения объекта Tensor и затем, когда онпопадает в строку model.predict
, разрывается с ошибкой в заголовке;Uncaught (in promise) TypeError: Cannot read property 'length' of undefined
с этим в самом низу;at HTMLDivElement.<anonymous> (main.js:39)
Тем не менее, HTMLDivElement, о котором он говорит, определяется, когда я консоль регистрирую его для проверки работоспособности каждый раз, когда я нажимаю кнопку идентификации;User Image: <img src="data:image/png;base64,..." class="user_pic">
Это мой Тензорный Объект, который напечатан в подробном формате:
Tensor
dtype: float32
rank: 4
shape: [1,200,200,3]
values:
[[[[56 , 105, 11 ],
[53 , 101, 9 ],
[49 , 97 , 8 ],
...,
[91 , 151, 99 ],
[92 , 152, 101],
[91 , 151, 99 ]],
[[56 , 102, 12 ],
[52 , 98 , 9 ],
[48 , 93 , 8 ],
...,
[94 , 154, 103],
[95 , 155, 104],
[94 , 154, 103]],
[[53 , 99 , 11 ],
[51 , 97 , 11 ],
[44 , 90 , 7 ],
...,
[92 , 151, 103],
[93 , 152, 104],
[94 , 153, 105]],
...
[[21 , 61 , 8 ],
[21 , 61 , 8 ],
[21 , 61 , 8 ],
...,
[28 , 88 , 1 ],
[36 , 93 , 4 ],
[44 , 99 , 9 ]],
[[22 , 62 , 9 ],
[22 , 62 , 9 ],
[22 , 62 , 9 ],
...,
[29 , 92 , 3 ],
[29 , 89 , 1 ],
[40 , 98 , 7 ]],
[[22 , 62 , 10 ],
[22 , 62 , 10 ],
[22 , 62 , 10 ],
...,
[32 , 97 , 7 ],
[30 , 92 , 3 ],
[34 , 94 , 4 ]]]]
Другая странная часть, и это то, что я заметил в других уроках, и это работает,заключается в том, что когда я обрабатываю свое тензорное изображение в приемлемом формате, я присваиваю его переменной, но когда эта переменная вызывается позже, это undefined
Полная ошибка ниже:
Uncaught (in promise) TypeError: Cannot read property 'length' of undefined
at Fm (tfjs@latest:2)
at e.predict (tfjs@latest:2)
at e.predict (tfjs@latest:2)
at HTMLDivElement.<anonymous> (main.js:39)
Мой код ниже
let identify = document.querySelector('.identify')
if (identify) {
identify.addEventListener('click', async function () {
event.preventDefault()
// Just a promise but is the model I need. Checked the layers and it matches up
const model = await tf.loadLayersModel('model_json')
console.log('This is your model: ', model)
let user_pic = document.querySelector('.user_pic')
console.log('User Image: ', user_pic)
// Preprocessing is done here as it wasn't working when I saved it to a variable
prediction = model.predict(
tf.browser.fromPixels(user_pic).cast('float32').expandDims().print(true), { batchSize: 4 })
console.log('This is your model: ', model, 'This is your prediction: ', prediction)
})
Мне любопытно, сталкивались ли другие с этой проблемой и понимали, как ее можно исправить. Я новичок в Tensorflow.js и то, что мне удалось найти, не совсем то, что мне нужно. Если кто-то может помочь, большое спасибо