Node.js 将base64图像转换为张量

Node.js 将base64图像转换为张量,node.js,tensorflow,image-processing,object-detection,tensorflow.js,Node.js,Tensorflow,Image Processing,Object Detection,Tensorflow.js,我将图像作为base64字符串发送到node express服务器,以使用tensorflow分析对象检测。如何使用节点js中的cocossd模型将base64图像更改为目标检测的张量。服务器端节点js base64字符串可以转换为二进制,然后使用tf.node const b = Buffer.from(base64str, 'base64') // get the tensor const t = tf.node.decodeImage(b) 如果其他属性/值没有随请求一起发送

我将图像作为base64字符串发送到node express服务器,以使用tensorflow分析对象检测。如何使用节点js中的cocossd模型将base64图像更改为目标检测的张量。

服务器端节点js

base64字符串可以转换为二进制,然后使用
tf.node

 const b = Buffer.from(base64str, 'base64')
    // get the tensor
 const t = tf.node.decodeImage(b)
如果其他属性/值没有随请求一起发送,最好在post请求或websocket中直接以二进制形式发送图像。在这种情况下,不需要从base64服务器端重新进行转换

浏览器端

const b = atob(base64str)
let byteNumbers = new Array(b.length);
for (let i = 0; i < b.length; i++) {
    byteNumbers[i] = b.charCodeAt(i);
}
let tensor = tf.tensor(byteNumbers)

服务器端节点

base64字符串可以转换为二进制,然后使用
tf.node

 const b = Buffer.from(base64str, 'base64')
    // get the tensor
 const t = tf.node.decodeImage(b)
如果其他属性/值没有随请求一起发送,最好在post请求或websocket中直接以二进制形式发送图像。在这种情况下,不需要从base64服务器端重新进行转换

浏览器端

const b = atob(base64str)
let byteNumbers = new Array(b.length);
for (let i = 0; i < b.length; i++) {
    byteNumbers[i] = b.charCodeAt(i);
}
let tensor = tf.tensor(byteNumbers)

在服务器端node.js tf.tensor(b,shape)上,值shape应该有什么?第二个解决方案我得到的错误是模型中提供的dict['image\u tensor']的形状。execute(dict)必须是[-1,-1,3],但它是[1629051]@Edkevek问我应该如何给张量赋形。形状应该是
[高度、宽度、通道]
。您需要知道图像的宽度和高度。您可以添加批次尺寸(最左边的位置),这将使形状成为
[b、高度、宽度、通道]
。当您使用tf.fromPixels时,它直接返回3d或4d张量{base64:'/9j/4AAQSKZJRGABAAQAASABIAA……。',宽度:722,图片方向:1,设备方向:1,高度:1280}其my base64图像分辨率。我在服务器中使用的代码是
let buff=Buffer.from(data.photo.base64,'base64')let tensor=tf.tensor(buff[data.photo.height,data.photo.width,3])
,但我在根据提供的形状获取张量时出错,[1280722,3],张量应具有2772480个值,但具有610963@Jayaprakash您找到解决方案了吗?在服务器端node.js tf.tensor(b,shape)上,值shape应该有什么?第二个解决方案我得到的错误是模型中提供的dict['image_tensor']的形状。execute(dict)必须是[-1,-1,-1,3],但它是[1629051]@Edkevek问我应该如何给张量赋形。形状应该是
[高度、宽度、通道]
。您需要知道图像的宽度和高度。您可以添加批次尺寸(最左边的位置),这将使形状成为
[b、高度、宽度、通道]
。当您使用tf.fromPixels时,它直接返回3d或4d张量{base64:'/9j/4AAQSKZJRGABAAQAASABIAA……。',宽度:722,图片方向:1,设备方向:1,高度:1280}其my base64图像分辨率。我在服务器中使用的代码是
let buff=Buffer.from(data.photo.base64,'base64')let tensor=tf.tensor(buff[data.photo.height,data.photo.width,3])
,但我在根据提供的形状获取张量时出错,[1280722,3],张量应具有2772480个值,但具有610963@Jayaprakash你找到解决办法了吗?