评论

小程序通过webassembly加载opencv.js

小程序通过webassembly加载opencv.js

测试在安卓下(Mate30 Pro)可以使用webassembly的相关函数,随即测试了opencv.js,通过对胶水代码的魔改(

1.如对无法使用的new Function,用固定的function加动态获取传入参数仿写

2.对某些函数读取外部文件,将FS改造,提前将文件通过小程序的FileSystemManager读入虚拟目录中

),经测试,可以使用opencv.js提供的API,面部、眼睛检测速度大约在15帧/秒。

现提供代码给大家增添思路:

https://github.com/leo9960/opencv.js-wechat

最后一次编辑于  2020-06-12  
点赞 8
收藏
评论

11 个评论

  • 飘尘111
    飘尘111
    2021-01-27

    您好,请问您编译的这个opencv.js使用的编译器的版本是什么呀?我编译之后,wasm默认使用了共享内存,胶水文件中也需要更改WebAssembly.Memory()里面的shared属性才可以在开发者工具运行。但是安卓手机应该是不支持共享内存的,所以您编译的时候是怎么取消共享内存的呀?我现在怀疑是我编译器版本太高了导致的使用了共享内存。我看您编译的这个没有使用ShareArrayBuffer.

    2021-01-27
    赞同
    回复
  • 飘尘111
    飘尘111
    2021-01-27

    您好,请问您编译的这个opencv.js使用的编译器的版本是什么呀?我编译之后,wasm默认使用了共享内存,胶水文件中也需要更改WebAssembly.Memory()里面的shared属性才可以在开发者工具运行。但是安卓手机应该是不支持共享内存的,所以您编译的时候是怎么取消共享内存的呀?我现在怀疑是我编译器版本太高了导致的使用了共享内存。我看您编译的这个没有使用ShareArrayBuffer.

    2021-01-27
    赞同
    回复
  • 🎈 Biang
    🎈 Biang
    2021-01-27

    你好!因为学校毕设入手,请问现在能导入opencv的处理程序在小程序端直接处理吗?可以的话具体步骤和思路可以讲一下吗?

    2021-01-27
    赞同
    回复 1
    • 昱霖君คิดถึงคุณ
      昱霖君คิดถึงคุณ
      2021-01-28
      如果你的程序用opencv.js重写能跑通,小程序上问题就不大,不过iOS上的webassembly还有点问题
      2021-01-28
      回复
  • 楽
    2021-01-04

    厉害,非常感谢

    2021-01-04
    赞同
    回复
  • 飘尘111
    飘尘111
    2020-12-21

    请问大佬,小程序的webassembly可以使用simd的功能吗?我看谷歌浏览器需要设置chrome://flags来开启这个设置。但是小程序不知道在哪里开启,也不知道本身是否已经支持了simd。

    2020-12-21
    赞同
    回复 1
  • 飘尘111
    飘尘111
    2020-12-12

    前辈您好,我也定制化自动生成了一个wasm文件,但是使用您的胶水文件感觉应该是不太适配,想问下,我改胶水文件的话,大概需要改哪些地方呢?是不是很麻烦啊?

    2020-12-12
    赞同
    回复 1
    • 昱霖君คิดถึงคุณ
      昱霖君คิดถึงคุณ
      2020-12-23
      是有点麻烦,要把eval、new function等用到的地方改掉,还有虚拟文件系统的载入本地文件的方式要修改
      2020-12-23
      回复
  • 百川
    百川
    2020-07-15

    你好 请问有方法不使用胶水js吗,感觉太臃肿了

    我看emscripten现在也可以只生成一个.wasm 但有可能需要导入wasi才能用

    (import "wasi_snapshot_preview1" "proc_exit" (func $wasi_snapshot_preview1.proc_exit (type $t1)))

    但感觉目前小程序应该还不支持wasi

    2020-07-15
    赞同
    回复 2
    • 昱霖君คิดถึงคุณ
      昱霖君คิดถึงคุณ
      2020-07-17
      胶水代码主要是用来定义数据类型和函数的构造调用以及文件系统等创建,应该也很难能精简,与其精简胶水代码还不如了解了opencv的算法用js重写一份好
      2020-07-17
      回复
    • 百川
      百川
      2020-07-17回复昱霖君คิดถึงคุณ
      谢啦
      2020-07-17
      回复
  • 懒得起名
    懒得起名
    2020-07-02

    你好,请问一下:

    1. 只能通过 canvas和camera读取图片嘛?imread我好像没办法通过id读取到<image>里面的图片。
    2. 还有imread通过URL读取数据时,是不是先写入canvas再读取的?这个就要求canvas的大小和图片一样?
    3. 我通过wx.request读取到了图片的 array buffer 数据,想用cv.matFromImageData转换,但是参数里的width和height好像又不是图片的长宽?frame.width是“图像数据矩形的宽度”。
    4. 用imshow我没有办法通过id输出到指定的canvas,是我的操作不对嘛。。?


    烦请赐教!谢谢!

    2020-07-02
    赞同
    回复 4
  • 懒得起名
    懒得起名
    2020-07-02

    非常感谢!!!

    2020-07-02
    赞同
    回复
  • WAY
    WAY
    2020-06-24

    多谢🙏, 你的源文件是c++或者c写的, 然后用emscripten转成wasm吗? 我的理解是

    1, 你写的c++,emscripten -> wasm.js

    2, opencv c++, emscripten -> opencv.wasm

    3, wasm.js 调用opencv.wasm

    是这样吗?谢谢


    2020-06-24
    赞同
    回复 3

正在加载...

登录 后发表内容