Próbuję uruchomić niestandardowe wykrywanie obiektu Tensorflow.js model w przeglądarce. Mogłem konwertować model Tensorflow do modelu Tensorflow.js (w Google Colab) za pomocą następującego polecenia:

!tensorflowjs_converter \
--input_format=tf_frozen_model \
--output_node_names='detection_boxes,detection_scores,detection_classes,num_detections' \
/content/frozen_inference_graph.pb \
/content/web_model

Udostępniam fragment kodu inference.html plik:

<html>
<head>
<script src="https://cdn.jsdelivr.net/npm/@tensorflow/tfjs@latest"> </script>
<script src="webcam.js"></script>
</head>
<body>
    <div>
        <div>
            <video autoplay playsinline muted id="wc" width="224" height="224"></video>
        </div>
    </div>
    <button type="button" id="startPredicting" onclick="startPredicting()" >Start Predicting</button>
    <button type="button" id="stopPredicting" onclick="stopPredicting()" >Stop Predicting</button>
    <div id="prediction"></div>
</body>

<script src="index.js"></script>
</html>

Fragment kodu index.js Plik jest następujący:

let model;
const webcam = new Webcam(document.getElementById('wc'));
let isPredicting = false;


async function init(){
        try {
            await webcam.setup();
            model = await tf.loadGraphModel('http://127.0.0.1:8887/model/model.json');
        } catch (err) {
            console.log(err);
        }
}

async function predict() {
    const img = webcam.capture();
    console.log("executing model");
    const cat = document.getElementById('image');
    output = await model.executeAsync(img);
    output.forEach(t => t.print) // log out the data of all tensors
    const data = []
    for (let i = 0; i < output.length; i++){
        data.push(output.dataSync())
    }
    console.log(data);
}

init()


function startPredicting(){
    isPredicting = true;
    predict();
}

function stopPredicting(){
    isPredicting = false;
    predict();
}

Kiedy biegam powyżej inference.html Plik za pomocą serwera WWW, zwraca następujące wyjście:

(4) [t, t, t, t]
0: t {kept: false, isDisposedInternal: false, shape: Array(3), dtype: "float32", size: 400, …}
1: t {kept: false, isDisposedInternal: false, shape: Array(2), dtype: "float32", size: 100, …}
2: t {kept: false, isDisposedInternal: false, shape: Array(2), dtype: "float32", size: 100, …}
3: t {kept: false, isDisposedInternal: false, shape: Array(1), dtype: "float32", size: 1, …}
length: 4
__proto__: Array(0)

Problemem jest, wydaje się być nieistotne lub nie mogę tego zrozumieć. Brakowam czegoś? Podaj mi swoje sugestie. Przepraszam za długi post, ale jestem początkujący w tensorflow.js .

0
Saurabh Chauhan 3 styczeń 2020, 12:13

1 odpowiedź

Najlepsza odpowiedź

output jest tf.tensor. Kiedy nazywałeś console.log(output), stara się sinkować obiekt i wydrukować jego properties.

Tensor ma również metodę, print, aby wylogować swoje dane.

Aby uzyskać dane z Tensora jako tablicę JavaScript, metoda, taka jak data (odpowiednio dataSync) i dataArray (odpowiednio dataArraySync) można wywołać w celu pobrania danych Aynchronicznie (odpowiednio synchronicznie). Dane są pobierane jako typedArray.

output = await model.executeAsync(img);
// output is an array of tf.tensor.
output.forEach(t => t.print()) // log out the data of all tensors
const data = []
for (let i = 0; i < output.length; i++)
  data.push(output[i].dataSync())  // get the data
2
edkeveked 3 styczeń 2020, 11:45