3

I am creating a body segmentation app using tensorflow bodypix model. It works fine in the browser. I am using webpack to use its modules(see below)

import * as wasm from "@tensorflow/tfjs-backend-wasm";
import * as tf from "@tensorflow/tfjs-core";
import * as bodyPix from "@tensorflow-models/body-pix";

wasm.setWasmPaths("./wasm/");
tf.setBackend("wasm").then(() => {
  //some simple vanilla js code
});
//some more vanilla js code...

It works exactly fine in chrome and giving output as expected after running npx webpack .

However when irun it with electron simply by creating a main electron file it outputs nothing but a blank white screen with the following error in console-

Uncaught TypeError: this.util.TextEncoder is not a constructor
    at new <anonymous> (main.js:2)

the line where it is pointing is from a minified codew which looks like this-

...SOME_CODE...&&Me().setPlatform("node",new class{
constructor(){this.util=n(758),this.textEncoder=new this.util.TextEncoder}...SOME_MORE_CODE...

i thought that electron is simply chrome without top bars, but this seems wrong. can someone help me here i am using following versions-

"nodejs v12.16.3", "electron11.1.1", "tfjs2.8.2"

see the screen shot of chrome and electron-

IN CHROME(click to enlarge)

chrome working

................................................

IN ELECTRON(click to enlarge)

electron image

hemant kumar
  • 545
  • 6
  • 19

1 Answers1

2

THE SOLUTION

i previously had

wasm.setWasmPaths("./wasm/");
tf.setBackend("wasm").then(() => {
  //some simple vanilla js code
});

in my main code, and i have copied the folder from wasm(dist/) to project's folder.

Deleting the same from my project's folder and changing the code to -

wasm.setWasmPaths("../node_modules/@tensorflow/tfjs-backend-wasm/dist/"); //or start from ./ if your main file is in same folder as node_modules
tf.setBackend("wasm").then(() => {
  //...
});

How i recahed here?

at first thanks to @edkeveked for his effort and pointing me to

Error loading TensorflowJS in Electron App (Nodejs)

i got the solution by creating an electron hello world project and then adding tfjs, then tfjs-backend-wasm. the new project is working correctly but however even moving the node_modules from new project to older one is not working for the older. but as soon i changed the wasm path, it worked giving no error.

Update:

now I have encountered the problem several times and everytime it's solved by creating a new folder, first installing electron and creating a simple electron app first, and then installing other dependencies and copying old code in the new folder.(warning: don't copy the node modules folder)

It seems to be a bug in tfjs or electron

hemant kumar
  • 545
  • 6
  • 19