如何将图像帧相机传递给 wasm (C++) 中的函数?

2024-02-17

我正在尝试构建一个 C++ 函数并使用 Emscripten 将其编译为 Wasm。
该函数的作用是接收图像并对其进行一些处理并返回结果。
我的第一个 POC 成功了,用户使用上传图像file输入,我使用传递图像的数据FileReader API:

const fileReader = new FileReader();
fileReader.onload = (event) => {
   const uint8Arr = new Uint8Array(event.target.result);
   passToWasm(event.target.result);
};

fileReader.readAsArrayBuffer(file); // I got this `file` from `change` event of the file input.

但是当我实现相机源并开始获取帧并将其传递给 Wasm 时,我开始在 C++ 端遇到异常,这是 JS 实现:

let imageData = canvasCtx.getImageData(0, 0, videoWidth, videoHeight);
var data=imageData.data.buffer;
var uint8Arr = new Uint8Array(data);
passToWasm(uint8Arr);

这会在 C++ 端引发异常。

Now passToWasm实施是:

function passToWasm(uint8ArrData) {
   // copying the uint8ArrData to the heap
   const numBytes = uint8ArrData.length * uint8ArrData.BYTES_PER_ELEMENT;
   const dataPtr = Module._malloc(numBytes);
   const dataOnHeap = new Uint8Array(Module.HEAPU8.buffer, dataPtr, numBytes);
   dataOnHeap.set(uint8ArrData);

   // calling the Wasm function
   const res = Module._myWasmFunc(dataOnHeap.byteOffset, uint8ArrData.length);
}

虽然 C++ 的实现是这样的:

void EMSCRIPTEN_KEEPALIVE checkImageQuality(uint8_t* buffer, size_t size) {
   // I'm using OpenCV in C++ to process the image data
   // So I read the data of the image
   cv::Mat raw_data = cv::Mat(1, size, CV_8UC1, buffer);

   // Then I convert it
   cv::Mat img_data = cv::imdecode(raw_data, cv::IMREAD_COLOR | cv::IMREAD_IGNORE_ORIENTATION);

   // in one of the following steps I'm using cvtColor function which causes the issue for some reason
}

由于相机实现而出现的异常如下:

OpenCV(4.1.0-dev) ../modules/imgproc/src/color.cpp:182: 错误: (-215:断言失败) !_src.empty() 在函数“cvtColor”中

使用有什么区别file输入并获取数据以传递给它,并从 a 获取数据canvas只要它们都将其转换为Uint8Array


我找到了一个解决方案(也许只适合我的情况)。
当您尝试从中获取图像数据时canvas你得到它作为 4 个通道(RGBA 就像 PNG 一样),并且根据你需要处理它的图像处理代码。
我的代码考虑到图像应该是 3 个通道(像 jpeg 中的 RGB),所以我必须使用以下代码对其进行转换:

canvasBuffer.toBlob(function (blob) {
  passToWASM(blob);
},'image/jpeg');
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何将图像帧相机传递给 wasm (C++) 中的函数? 的相关文章

  • 在 React Navigation 中将 props 传递给自定义抽屉导航器

    在反应导航抽屉菜单中 我想显示用户名 John Doe 它处于我的主要组件的状态 Router 我怎样才能将自定义抽屉内容组件传递给它 额外信息 我从 AsyncStorage 中获取此名称 组件已挂载 这是我的代码 export defa
  • 如何在 VS 中键入时显示方法的完整文档?

    标题非常具有描述性 是否有任何扩展可以让我看到我正在输入的方法的完整文档 我想查看文档 因为我可以在对象浏览器中看到它 其中包含参数的描述和所有内容 而不仅仅是一些 摘要 当然可以选择查看所有覆盖 它可能是智能感知的一部分 或者我不知道它并
  • 计算文本选择的 xy 位置

    我正在尝试使用 DOM 元素创建自己的文本选择 是的 我的意思是当您在此元素中选择文本时 您会在文本后面看到蓝色背景 这个想法是停止默认行为 蓝色 并使用我自己的元素来完成工作 方法是找到选择的 xy 位置 然后放置绝对定位的元素 我希望能
  • C# 创建数组的数组

    我正在尝试创建一个将使用重复数据的数组数组 如下所示 int list1 new int 4 1 2 3 4 int list2 new int 4 5 6 7 8 int list3 new int 4 1 3 2 1 int list4
  • 用于从字符串安全转换的辅助函数

    回到 VB6 我编写了一些函数 让我在编码时无需关心字符串的 null 和 数字的 null 和 0 等之间的区别 编码时 没有什么比添加特殊情况更能降低我的工作效率了用于处理可能导致一些不相关错误的数据的代码 9999 10000 如果我
  • “MyClass”的类型初始值设定项引发异常

    以下是我的Windows服务代码 当我调试代码时 我收到错误 异常 CSMessageUtility CSDetails 的类型初始值设定项引发异常 using System using System Collections Generic
  • C# using 语句、SQL 和 SqlConnection

    使用 using 语句 C SQL 可以吗 private static void CreateCommand string queryString string connectionString using SqlConnection c
  • 在 C 中复制两个相邻字节的最快方法是什么?

    好吧 让我们从最明显的解决方案开始 memcpy Ptr const char a b 2 调用库函数的开销相当大 编译器有时不会优化它 我不会依赖编译器优化 但即使 GCC 很聪明 如果我将程序移植到带有垃圾编译器的更奇特的平台上 我也不
  • Qt - 设置不可编辑的QComboBox的显示文本

    我想将 QComboBox 的文本设置为某些自定义文本 不在 QComboBox 的列表中 而不将此文本添加为 QComboBox 的项目 此行为可以在可编辑的 QComboBox 上实现QComboBox setEditText cons
  • Silverlight Datagrid:在对列进行排序时突出显示整个列

    我的 Silverlight 应用程序中有一个 DataGrid 我想在对该列进行排序时突出显示整个列 它在概念上与上一个问题类似 Silverlight DataGrid 突出显示整列 https stackoverflow com qu
  • mozilla pdf.js 没有全视图

    我喜欢这个 pdf 查看器https github com mozilla pdf js https github com mozilla pdf js Demo http mozilla github com pdf js web vie
  • gdb查找行号的内存地址

    假设我已将 gdb 附加到一个进程 并且在其内存布局中有一个文件和行号 我想要其内存地址 如何获取文件x中第n行的内存地址 这是在 Linux x86 上 gdb info line test c 56 Line 56 of test c
  • 为什么我使用google'smtp'无法发送电子邮件?

    我有以下程序使用 smtp gmail com 587 发送电子邮件 namespace TestMailServer class Program static void Main string args MailMessage mail
  • 运行代码首先迁移更新数据库时出错

    我在迁移到数据库时遇到问题 并且似乎找不到我遇到的错误的答案 System MissingMethodException Method not found System Data Entity Migrations Builders Tab
  • 如何查明CONFIG_FANOTIFY_ACCESS_PERMISSIONS是否启用?

    我想利用fanotify 7 http man7 org linux man pages man7 fanotify 7 html我遇到的问题是在某些内核上CONFIG FANOTIFY ACCESS PERMISSIONS不起作用 虽然C
  • 将 RequireJS 与遗留代码结合使用

    我正在处理一个非常大的项目 该项目使用 包含带有脚本标记的 javascript 文件的旧版 JSP 页面 使用其他 javascript 模块而不使用 RequireJS 的骨干模型和视图 现在 我们希望开始将 RequireJS 与 j
  • Internet Explorer 9 是否会因数组和对象文字末尾的额外逗号而卡住?

    现代浏览器和 Node js 等环境允许您说 a 1 b 2 或 1 2 3 这在历史上一直是 Internet Explorer 的问题 Internet Explorer 9 中修复了此问题吗 对此有两种不同的答案 一种是对象初始值设定
  • Azure函数版本2.0-应用程序blobTrigger不工作

    我有一个工作功能应用程序 它有一个 blob 输入和一个事件中心输出 在测试版中工作 随着最新的更改 我的功能不再起作用 我尝试根据发行说明更新 host json 文件 但它没有引用 blob 触发器 version 2 0 extens
  • 无法使用 HTML 设置未定义 jQuery UI 自动完成的属性“_renderItem”

    我使用以下代码将 jQuery UI 自动完成项呈现为 HTML 这些项目在自动完成控件中正确呈现 但我不断收到此 JavaScript 错误并且无法移动过去 Firefox 无法转换 JavaScript 参数 Chrome 无法设置未定
  • 如何创建向后兼容 Windows 7 的缩放和尺寸更改每显示器 DPI 感知应用程序?

    我是 WPF 和 DPI 感知 API 的新手 正在编写一个在 Windows 7 8 1 和 10 中运行的应用程序 我使用具有不同每个显示器 DPI 设置的多个显示器 并且有兴趣将我的应用程序制作为跨桌面配置尽可能兼容 我已经知道可以将

随机推荐

  • 为什么在目录上调用 File.listFiles 时可以返回 null?

    我正在创建一个 Android 应用程序 我想列出目录中的文件 我通过调用来做到这一点 File files path listFiles new CustomFileFilter path is a File对象 通过调用创建 File
  • 在三星设备上继续运行时异常:android.view.DisplayListCanvas.throwIfCannotDraw

    我在 Play 商店控制台上发生多次崩溃 我已经检查了可绘制文件夹中的所有图像 这对我来说似乎没问题 因为我怀疑这可能会导致问题 据报道 它主要在三星设备上崩溃 请指出发生了什么错误 对于背景图像 我也使用这个尺寸 高清 480 800 x
  • ngAnimate CSS 动画不适用于 ng-show 和 ng-hide

    DEMO http plnkr co edit cPDUWO p preview http plnkr co edit cPDUWO p preview 我在页面上显示了 2 个选中的复选框和 2 个小部件 单击复选框将使用ng show
  • 签署 F# 程序集(强名称组件)

    我在 CodeProject 上找到了这篇文章 http www codeproject com Articles 512956 NET Shell Extensions Shell Context Menus http www codep
  • python 中的“is”是如何工作的?

    请有人解释一下如何在 if 条件下使用 is 我正在使用分数模块 但遇到了一些麻烦 gt gt gt Fraction 0 1 is 0 False gt gt gt float Fraction 0 1 0 0 gt gt gt floa
  • 如何使用 IDisposable 修复内存泄漏

    我有一个 net 应用程序似乎存在内存泄漏问题 net 服务启动时大约需要 100MB 内存 但在负载下它会达到大约 400 500MB 我的大多数类都没有非托管资源 并且那些已经实现了 IDisposable 的类 所以我的问题是在我的课
  • 延迟加载加载图像后如何触发事件?

    我有需要绝对定位的图像 以便图像的中心位于其父 div 的中心 我已经有执行此操作的代码 我最近添加了延迟加载插件 它按预期工作 但我需要一种触发图像居中代码的方法after延迟加载已加载and图像淡入 我当前的代码基本上是这样的 jQue
  • 更改现有应用程序的证书指纹

    我有一个已发布到 Google Play 的现有应用程序 一切都很好 直到我换了一台电脑并且我的 sha1 指纹发生了变化 有没有可能的方法来更改 google play 开发者控制台中现有应用程序的 sha1 如果没有 我该如何处理 谢谢
  • 在 numpy 中乘以对数概率矩阵的数值稳定方法

    我需要获取包含对数概率的两个 NumPy 矩阵 或其他二维数组 的矩阵乘积 天真的方式np log np dot np exp a np exp b 由于明显的原因而不是首选 Using from scipy misc import log
  • 调用虚拟成员类的方法

    我知道该怎样virtual在成员函数的上下文中工作 但我在网上看到一篇关于虚拟成员类的文章 这让我感到困惑 我找到的例子是这样的 class Machine void run virtual class Parts The inner cl
  • GIT 无法从远程存储库读取

    我克隆了一个私人存储库 将其分叉 并对功能分支进行了一些更改 当我尝试将这些更改推送到存储库时 我收到以下消息 Permission denied publickey fatal Could not read from remote rep
  • Three.js 立方体每面都有不同的纹理

    我正在尝试创建一个 Three js 立方体 每个面上都有不同的纹理 基本上是一个骰子 这是在我的沙盒环境中 因此应该只生成一个旋转立方体 每侧都有骰子图像 1 6 完成后 我打算将其用于浏览器基础游戏 这个例子我只在 Chrome 中进行
  • IIS 的 ProxyPassReverseCookieDomain 等效项

    我使用 IIS 和 URL 重写作为反向代理 我的实际 Web 应用程序托管在无法直接访问互联网的服务器上 在重写规则中 我将反向代理的主机名替换为本地 IP 地址 这很好用 不过 我使用的应用程序提供下载 一旦客户端发出下载请求 服务器端
  • 禁用 jqgrid 的编辑(添加、编辑和删除)按钮而不是隐藏(默认行为)

    默认情况下 Jqgrid 使用值为 false 的适当属性隐藏添加 编辑和删除按钮 例如 导航网格中的 add false edit false del false 或其他方式 在这里 我想禁用这些按钮而不是隐藏 任何人都可以帮忙解决这个问
  • 获取给定进程的 STARTUPINFO

    是否可以获取另一个正在运行的进程的启动信息 我想找出命令行参数 是否应该最小化 最大化运行 在目录中启动 以管理员身份运行等 您需要从远程进程读取 RTL USER PROCESS PARAMETERS 这可以这样做 NTSTATUS Ge
  • 在调试时在注册类中调用 qmlRegisterType() 会导致应用程序崩溃

    我想用qmlRegiterType 在注册类本身中 我尝试使用此方法topic https stackoverflow com questions 37622694 call qmlregistertype in the registere
  • 在 ASP.NET Core 中获取控制器详细信息

    在 ASP NET 4 x 中 有一个ReflectedControllerDescriptor所在的类System Web Mvc 此类提供控制器的描述符 在我之前的应用程序中 我曾经这样做过 var controllerDescript
  • Codeigniter 的 Google 双因素身份验证教程

    有谁知道 Codeigniter 的 Google 双因素身份验证教程吗 这里 tutsplus 将双因素身份验证与 CodeIgniter 集成 http net tutsplus com tutorials php integratin
  • 使用分离器调整控件的大小超出父级的客户区

    我正在尝试使用拆分器复制大小调整 如 MS SQL Management Studio 中所述这个问题 https stackoverflow com questions 13909756 how to resize controls be
  • 如何将图像帧相机传递给 wasm (C++) 中的函数?

    我正在尝试构建一个 C 函数并使用 Emscripten 将其编译为 Wasm 该函数的作用是接收图像并对其进行一些处理并返回结果 我的第一个 POC 成功了 用户使用上传图像file输入 我使用传递图像的数据FileReader API