错误:传递给tf.browser.fromPixels的像素不能为null

问题描述

我正在与TensorflowJS一起识别鸟类。我已经将keras .h5模型转换为TensorflowJS。以下是我的全部predict.js代码:

$(document).on('change','#image-selector',function() {
    let reader = new FileReader();
    reader.onload = function() {
        let dataURL = reader.result;
        $('#selected-image').attr("src",dataURL);
        $('#prediction-list').empty();
    }
    let file = $("#image-selector").prop('files')[0];
    reader.readAsDataURL(file);
});

let model;
(async function() {
    model = await tf.loadLayersModel('http://localhost:81/tfjs-models/model.json');
    $('.progress-bar').hide();
})();

$(document).on('click','#predict-button',async function() {   
    let image = $('#selected-image').get(0);
    let tensor = tf.browser.fromPixels()(image)
    .resizeNearestNeighbor([224,224])
    .toFloat()
    .expandDims();

    let predictions = await model.predict(tensor).data();
    let bird = Array.from(predictions)
    .map(function (p,i){
        return {
            probability: p,className: IMAGENET_CLASSES[i]
        };
    }).sort(function (a,b) {
        return b.probability - a.probability;
    }).slice(0,1);
    $("#prediction-list").empty();
    bird.forEach(function (p) {
        $('#prediction-list').append(`<li>${p.className}: ${p.probability.toFixed(2)}</li>`)
    });
});

运行服务器时,出现以下错误:

Error: pixels passed to tf.browser.fromPixels() can not be null
    at fromPixels_ (browser.js:66)
    at Object.fromPixels (operation.js:45)
    at HTMLButtonElement.<anonymous> (predict.js:20)
    at HTMLDocument.dispatch (jquery-3.3.1.min.js:2)
    at HTMLDocument.y.handle (jquery-3.3.1.min.js:2)

以下是我链接到HTML的脚本:

<script src="https://code.jquery.com/jquery-3.3.1.min.js"></script>
        <script src="https://cdn.jsdelivr.net/npm/@tensorflow/tfjs/dist/tf.min.js"> </script> 
        <script src="imagenet_classes.js"></script>
        <script src="predict.js"></script>

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)