javascript - 在 Electron 中使用来自 tensorflow.js 的posenet

标签 javascript electron tensorflow.js pose-estimation

我正在尝试在 Electron 应用程序中使用posenet MobileNetV1 网络。我希望能够从文件系统中读取图像(它是 png 还是 jpg 都没有关系),并通过网络运行它。

到目前为止我做了什么:

我正在使用以下模块:

import * as posenet from '@tensorflow-models/posenet';
var imageToBase64 = require('image-to-base64');
var toUint8Array = require('base64-to-uint8array')

并使用以下命令初始化网络:
var net = posenet.load();

为了读取图像,我将其转换为 base64 而不是 Uint8Array,而不是使用它们来创建对象 {data: bytes, width: width, height: height} ,该对象符合 ImageData 的定义。

一切都在运行,但百分比结果非常低:
{
  score: 0.002851587634615819,
  keypoints: [
    { score: 0.0007664567674510181, part: 'nose', position: [Object] },
    {
      score: 0.0010295170359313488,
      part: 'leftEye',
      position: [Object]
    },
    {
      score: 0.0006740405224263668,
      part: 'rightEye',
      position: [Object]
    },

请注意,将来我打算构建这个应用程序,因此像 Canvas 这样的模块并不好,因为它构建得不好。

如果有人能给我一个工作 poc 那就太好了,因为我已经为此工作了很长时间。

最佳答案

Electron 有两个独立的上下文;可以将其视为服务器端上下文,称为主上下文和调用浏览器及其脚本的渲染器上下文。虽然这个问题不够精确,但它试图在 Electron 的主要上下文中执行posenet,可以将其进行比较,就好像一个人试图在nodejs中运行这段代码一样

主渲染器中的posenet

const data = Buffer.from(base64str, 'base64')
const t = tf.node.decodeImage(data)
const net = await posenet.load()
const poses = net.estimateMultiplePoses(t, {
      flipHorizontal: false,
      maxDetections: 2,
      scoreThreshold: 0.6,
      nmsRadius: 20})
  })
  // do whatever with the poses

来自浏览器执行的脚本的posenet
const im = new Image()
im.src = base64str
const net = await posenet.load()
im.onload = async() => {
 const poses = await net.estimateMultiplePoses(im, {
      flipHorizontal: false,
      maxDetections: 2,
      scoreThreshold: 0.6,
      nmsRadius: 20})
  })
  // do whatever with the poses
}

关于javascript - 在 Electron 中使用来自 tensorflow.js 的posenet,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61923552/

相关文章:

typescript - 如何调试 Electron-Forge React-TypeScript 的渲染器进程?

javascript - 预测位于何处?

tensorflow.js - 如何从图像中获取张量

javascript - Breeze 的 WebApi Controller 如何与 UTC 日期时间一起工作?

javascript - 如果键值匹配,则合并并减少。重构 JSON 数据响应

javascript - 查找 svg 路径元素的中心

javascript - 如何在生产和阶段之间更改 Electron 中的环境变量

javascript - 从已经运行的 Electron 应用程序获取命令行参数?

javascript - 网页中的经典富文本格式

node.js - Tensorflow Node-js,类型错误 : Only HTTP(S) protocols are supported