node获取图片路径_在Node.js上接入Paddle Lite,让你的网站具备AI推理能力

news/2024/5/9 19:34:48/文章来源:https://blog.csdn.net/weixin_39532421/article/details/110360093

c3c75cb8141f78a6791f502388991424.gif

【飞桨开发者说】李睿,北京邮电大学学生,人工智能和移动开发爱好者。

882c81fb44b31a58d9b0dd5df6b4c38a.png

随着桌面端Electron技术逐步崛起,基于Electron开发的代码编辑器、聊天软件、游戏等层出不穷。

对于习惯使用Node.js进行后端开发的朋友来说,开发一套漂亮的桌面UI客户端还是有一定难度的;而Electron开发不要太简单,只要会写HTML,就能写客户端,剩下的交给时间慢慢打磨即可。而且,这款开源的技术允许开发者使用JavaScript、HTML 和 CSS 构建跨平台的桌面应用程序。不同平台UI效果和网页显示效果一致,非常易用。

那么在桌面客户端上面,我们能否帮开发者实现本地部署Paddle Lite进行推理呢?答案是肯定的。Paddle Lite提供C++接口,并且在2.6.0版本中支持了Windows开发环境。这为我们将Paddle Lite封装成Node.js的C++插件提供了可能。如果能够成功移植,开发桌面应用的时候就可以实现在客户端上完成图片分类等任务。同时Paddle Lite提供的模型非常轻量化,常规PC机足以跑出不错的性能。

而且,对于其他Node.js场景来说,比如网站后端,也可以直接使用Paddle Lite进行推理。

于是我做了一个Demo,其本质上是将Paddle Lite的C++ API封装为Paddle Lite类,这个类目前提供了两个方法,分别是set_model_file和infer_float。在此之上,我使用N-API来编写Node.js插件,将其组合起来,允许Node.js调用Paddle Lite的C++ API。

项目效果

1. 下载预编译结果:可以直接在Paddle Node的Release界面下载预编译的结果,包括以下三个文件:

  • paddlenode.node :编译后的Node.js模块
  • libiomp5md.dll :OpenMP DLL
  • mklml.dll :MKL数学核心库
2. 下载并转化预训练模型:从官方开放的模型库中下载mobilenet_v1模型,并使用opt工具(Paddle Lite自带此工具)转换:1.安装Paddle Lite :
pip install paddlelite
2. 转化模型:
paddle_lite_opt –model_dir=./mobilenet_v1 –valid_targets=x86 –optimize_out=mobilenetv1_opt
执行上面步骤后我们可以得到转化后的模型文件:mobilenetv1_opt.nb3. 在Node.js中进行推理:
var addon = require('./paddlenode')var arr = new Array(150528)for(var i=0; i1;
addon.set_model_file("./mobilenetv1_opt.nb")
addon.infer_float(arr,[1, 3, 224, 224])
这里我们输入全1的数组进行模拟,set_model_file方法直接对应Paddle Lite中的set_model_from_file,infer_float的第一个参数是我们要传入的数据,第二个是传入数据的尺寸。如果各个元素乘积大小和传入数据的大小不同,将会抛出一个错误。之后我们会得到一个1001维的数组:ff1da9572f47ec297f8af86b4f987ff4.png其中0号元素为结果向量的大小,方便进行遍历,其他元素即为模型本身的输出。

手动编译

如果你决定手动编译,首先需要从Paddle Lite的Release中找到x86的预编译结果,目前最新版本是v2.6.1。下载下来之后定位到binding.gyp,将lite_dir变量设定为预编译库

文件夹的绝对路径,示例如下:

{'variables': {'lite_dir%': 'C:/Users/Li/Desktop/Exp/inference_lite_lib.win.x86.MSVC.C++_static.py37.full_publish',
    },"targets": [
        {'target_name': "paddlenode",'sources': ["paddlelib.h","paddlelib.cc","paddlenode.cc"],'defines': [
            ],'include_dirs': [","
            ],'libraries': ["-l,"-l,"-l,"-lshlwapi.lib"
            ]
        }
    ]
}
之后定位到我们的源码所在目录,确保你已经安装好了node-gyp和windows-build-tools,运行:
node-gyp configure build
即可生成最终结果,但是记得从预编译库中复制两个dll动态链接库到编译结果目录。因为官方发布的为Release版lib文件,这里如果使用debug版会导致不匹配的错误。

原理介绍

这个项目实际上是在Paddle Lite的C++ Demo上套了一层壳,我们最需要关注的是怎么将N-API和C的对象互相转换,在Node.js的官方文档中给出了非常多的函数和解释,在此基础上做转换即可。这里给出一些函数的解释:

  • napidefineproperties - 定义资源
  • napigetcb_info - 获取调用的信息
  • napithrowerror - 抛出错误
  • napitypeo - 获取napivalue的类型
  • napigetvaluestringutf8 - 将napi_value转换为utf8字符串
  • napigetarraylength - 获取napivalue对应的数组长度
  • napigetvaluedouble - 获取napivalue对应的双精度数组元素
  • napigetvalueint32 - 将napivalue转换为32位整型
  • napigetvaluedouble - 将napivalue转换为双精度浮点数
  • napicreatedouble - 将双精度浮点数转换为napi_value
还有一些函数大体作用相同,仅仅作为转换作用。

写在最后

飞桨已经推出的Paddle.js支持直接在浏览器中进行推理。而本文介绍的Paddle Node项目从另一个角度为Node.js提供可能。飞桨的中文生态给国内开发者和入门者提供了非常大的便利,大大降低了大家的学习成本。希望飞桨能够做得越来越好,进一步降低用户使用门槛,非常感谢。

参考链接

本项目代码:

https://github.com/KernelErr/paddlenode

C/C++ Addons with N-API:https://nodejs.org/docs/latest-v12.x/api/n-api.html如在使用过程中有问题,可加入飞桨Paddle Lite官方QQ群进行交流:696965088。如果您想详细了解更多飞桨的相关内容,请参阅以下文档。官网地址:https://www.paddlepaddle.org.cn

如果您想详细了解更多Paddle Lite的相关内容,请参阅以下文档。Paddle Lite:https://github.com/PaddlePaddle/Paddle-LitePaddle.js:https://github.com/PaddlePaddle/Paddle.js飞桨开源框架项目地址:GitHub:https://github.com/PaddlePaddle/PaddleGitee: https://gitee.com/paddlepaddle/Paddle

END

9ea98b0dd09b0d27020b52787d7d243b.png

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.luyixian.cn/news_show_788197.aspx

如若内容造成侵权/违法违规/事实不符,请联系dt猫网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

bootstrap获取下拉框数据_网站SEO优化推广关键词可以通过哪些途径获取,分析百度搜索原理...

一、百度下拉框,从百度下拉框里可以获取用户在搜索引擎搜索过的关键词,这类词符合用户的搜索习惯。二、百度相关搜索,在搜索引擎页面底部,有个百度相关搜索,这些词也可以选择,这是百度算法根据用户浏览过的…

静态网站生成器

静态网站生成器 静态网站相比动态网站具备无需依赖应用服务器,性能优越,部署简单等特点。特别适合生成静态文档,个人博客,饱受开发者的青睐。相比学会使用,掌握工作原理也尤为重要。 一个静态网站生成器的工作流程通…

SEO优化来了

搜索引擎工作原理 当我们在输入框中输入关键词,点击搜索或查询时,然后得到结果。深究其背后的故事,搜索引擎做了很多事情。 在搜索引擎网站,比如百度,在其后台有一个非常庞大的数据库,里面存储了海量的关…

织梦网站地图更新自由列表html,织梦自由列表更新使用教程

当我们用织梦网站建立了一个自由列表后就相当于建立了一个类似其它栏目的一个列表,跟其它栏目建立了一个最终列表页一样,当建立完自由列表后,也需要生成列表html,也就是自由列表的更新,如下图所示:(此图片来…

大型网站架构演变和知识体系(转)

之前也有一些介绍大型网站架构演变的文章,例如LiveJournal的、ebay的,都是非常值得参考的,不过感觉他们讲的更多的是每次演变的结果,而没有很详细的讲为什么需要做这样的演变,再加上近来感觉有不少同学都很难明白为什么…

http 升级 https 影响原来的链接吗_http切换https的SEO完美解决办法

对于网站http协议切换为https协议,这不仅仅能够提升网站的安全度,还可以提升网站在搜索引擎的权重。因为像百度针对https协议的站点有明确的提权政策。百度认为更加安全的站点应该获得更优质的展现,进而给予优先展示。那么针对SEO的工作而言&…

nofollow标签_网站被加上nofollow对SEO有什么危害?网站nofollow标签知多少?

关于以上问题我总结了一下网上比较优秀的关于nofollow的文章,希望能对新手有所帮助nofollow标签的介绍nofollow是一个HTML标签的属性值,nofollow 是一个HTML标签的属性值。它的出现为网站管理员提供了一种方式,即告诉搜索引擎“不要追踪此网页…

php源码仿三一重工,仿三一重工大气企业网站php源码

大小:21.55M编码:GBK简体类别:机械电子★模板介绍★源码名称:仿三一重工大气企业网站php源码仿三一重工大气企业网站php源码,测试完整无错,兼容主流浏览器。模板包含安装说明,并包含测试数据。本…

如何查询一个网站的服务器大小写,网站页面的大小写

网站页面的大小写 内容精选换一换云速建站不支持自适应宽度,推荐使用网站宽度为1200px,设置方法请参考网站基础设置。将空白处下方的模块或页脚整体上移,遮盖住空白处,然后保存修改。云速建站没有固定长度,网页的长度取…

在内网打造可以从外网访问的网站和服务

最近在内网建了一个简单的网站,利用路由器,使网站可以从外网访问。 首先利用appserv套件搭建一个phpmysqlapchephpmyadmin环境,安装十分简单,直接下一步就行了,中途可能要填写网络端口和Mysql数据库密码,网…

iis运行html提示500错误,IIS发布网站出现Http—500错误

IIS服务器可以作为一个Web服务器单独使用,也可以与相兼容的工具一起使用,它可以用来建立Internet商务、访问和操作来自不同数据源的数据以及创建Web应用程序,其中这些应用程序利用服务器脚本和组件代码来完成一些客户-服务器功能。客户端访问…

一键seo提交收录_Api提交百度搜索进行文章收录-网站SEO

网站内容如果想被搜索引擎(百度/google)收录,除了提供robots.txt等着爬虫来爬以外,如果想最快的被百度收录可以在熊掌号平台进行注册,可以通过在平台上进行页面改造、站点同步等方式提高百度收录,但是最有效的方式是使用api主动向…

网站互点排名掉了网站互点排名掉了网站互点_影响网站关键词排名不稳定的6个因素及优化建议...

很多站长朋友消耗大量的时间成本,人力成本做网站关键词排名,并让排名达到理想状况,却发现网站关键词排名不稳定,时上时下,飘忽不定。针对这种情况,建议站长或seo优化人员针对排名不稳定的原因做具体分析&am…

做服务器_美国站群服务器做网站优化效果怎么样

我们接触过不同的服务器,普通的网站服务器,高配的游戏服务器,金融行业的抗攻击服务器,多IP服务器等等。说到多IP服务器,可能第一时间就会想到站群服务器。众所周知,在早些时候,很多企业站长都会…

python爬取新闻网站内容_python快速抓取新闻标题及内容

原博文 2018-10-25 20:17 − from newspaper import Article url 你想要爬取的网站url news Article(url, languagezh) news .download() #先下载 news .parse() #再解析 print(news.text) #新闻正文 ... 相关推荐 2019-09-28 21:13 − Python python是一种跨平台的计算机程序…

网站怎么判断aps还是php,如何判断一个网站是否为wordpress制作的多种方法

教大家如何识别一个网站是否为wordpress程序搭建的。其实大家要知道wordpress程序本身有很多地方都泄露了自己的身份,那么我们只要一个一个去对比即可知道程序是否为wordpress搭建的了。方法一:借助站长平台http状态查询工具来判断网站是否为wordpress搭…

词根词缀词典_12个在线英语词典和工具网站,英语学习必备!

“工欲善其事,必先利其器”,作为英语学习者,手边一定少不了常用学习工具。今天,小编整理了12个在线英语词典和工具网站,推荐给大家,相信一定会帮助提升你的英语水平,给你带来big surprise!几个常…

网站ftp无法连接到服务器地址,ftp命令连接到服务器地址

ftp命令连接到服务器地址 内容精选换一换遇到该问题,参考以下步骤排查解决。如果在,执行2。如果不在,需要重新创建弹性云服务器实例,使之和GaussDB(for MySQL)实例在同一个虚拟私有云下。如果有,检查安全组的配置规则是…

旅游类电子商务网站规划书_旅游管理,一个读书时好玩、就业时抢手的热门专业...

当今时代,旅游已成为人们日常生活的"必需品"。世界那么大,你都去过哪儿?有一个专业,上知天文下知地理;有一个专业,食住行游购娱随心而走;有一个专业,每天工作在世界的不同…

python程序下载网站_python用哪个软件下载

下载python不需要软件,只需登录python官网(www.python.org),下载安装文件即可。 安装方法 Python官方的解释器安装包,可以 登录Python 官方网站 下载。 点击这里下载注意:如果您要在Windows7上运行Python3.…