项目简介
本项目是一个基于TensorFlow.js的微信小程序插件,将谷歌开发的机器学习开源项目TensorFlow.js库进行封装,让开发者能够在微信小程序里方便地调用机器学习模型的训练和部署功能,实现图像、语音、姿态等识别与处理。
项目的主要特性和功能
- 便捷集成:封装TensorFlow.js库,开发者可在小程序里轻松调用机器学习模型功能。
- 多模型支持:支持TensorFlow.js模型库中的多种预训练模型,涵盖图像识别、语音识别、人体姿态识别等。
- 简单配置与调用:通过简单配置和API调用,就能实现模型的加载、预测等功能。
- 多数据格式处理:支持图像、音频等多种数据格式,便于处理不同类型数据。
- 本地存储与缓存:支持使用本地存储和文件系统缓存小于10MB的模型,提升加载速度和性能。
- 版本兼容:支持不同版本的微信小程序和TensorFlow.js,确保多平台兼容性。
安装使用步骤
假设已下载本项目的源码文件,可按以下步骤操作:
1. 准备工作:从微信小程序开发版Nightly Build更新日志下载版本号 >= v1.02.1907022的微信开发者工具,确保微信基础库版本 >= 2.7.3,tfjs-core >= 1.5.2,若使用localStorage模型缓存,tfjs - converter >= 1.5.2。在微信开发者工具 v1.02.19070300 中,需在通用设置里打开硬件加速以启用WebGL加速。
2. 添加插件:在小程序管理后台的“设置 - 第三方服务 - 插件管理”中,通过 appid [wx6afed118d9e81df9] 查找并添加插件,此插件无需申请,添加后可直接使用。
3. 引入插件代码包:在 app.json 中声明要使用的插件,示例如下:
{
...
"plugins": {
"tfjsPlugin": {
"version": "0.0.6",
"provider": "wx6afed118d9e81df9"
}
}
...
}
4. 引入TensorFlow.js npm:由于小程序有2M的app大小限制,不建议直接使用联合包,而是按需加载分包。若只导入和运行GraphModel模型,建议加入tfjs - core、tfjs - converter、tfjs - backend - webgl 和tfjs - backend - cpu包;若要创建、导入或训练LayersModel模型,还需加入 tfjs - layers包。示例如下:
{
"name": "yourProject",
"version": "0.0.1",
"main": "dist/index.js",
"license": "Apache-2.0",
"dependencies": {
"@tensorflow/tfjs-core": "3.5.0",
"@tensorflow/tfjs-converter": "3.5.0",
"@tensorflow/tfjs-backend-webgl": "3.5.0"
}
}
参考小程序npm工具文档将npm包编译到小程序中。
5. Polyfill fetch 函数:若使用tf.loadGraphModel或tf.loadLayersModel API载入模型,需按以下方式填充fetch函数:
- 使用npm时,载入fetch - wechat npm包,示例:
{
"name": "yourProject",
"version": "0.0.1",
"main": "dist/index.js",
"license": "Apache - 2.0",
"dependencies": {
"@tensorflow/tfjs-core": "3.5.0",
"@tensorflow/tfjs-converter": "3.5.0",
"@tensorflow/tfjs-backend-webgl": "3.5.0",
"fetch-wechat": "0.0.3"
}
}
- 也可直接拷贝文件到javascript源目录:https://cdn.jsdelivr.net/npm/fetch - wechat@0.0.3/dist/fetch_wechat.min.js
6. 调用插件configPlugin函数:由于最新版微信的OffscreenCanvas会随页面跳转失效,建议在使用tfjs的page的onLoad中调用,示例如下:
var fetchWechat = require('fetch-wechat');
var tf = require('@tensorflow/tfjs-core');
var plugin = requirePlugin('tfjsPlugin');
//index.js
Page({
onLoad: function () {
plugin.configPlugin({
// polyfill fetch function
fetchFunc: fetchWechat.fetchFunc(),
// inject tfjs runtime
tf,
// provide webgl canvas
canvas: wx.createOffscreenCanvas(),
backendName: 'wechat-webgl-' + Date.now()
});
...
}
});
7. 使用模型缓存(可选)
- localStorage缓存:适用于小于10MB的模型。在app.js中提供localStorageHandler函数,并在模型加载时加入相应逻辑。
- 文件系统缓存:同样适用于小于10MB的模型。在app.js中提供fileStorageHandler函数,并在模型加载时加入相应逻辑。
8. 使用 WebAssembly backend(可选):若在Android手机上使用,可修改package.json文件引入相关包,并在app.js中设置wasm backend。
import * as posenet from '@tensorflow/models/posenet';
const POSENET_URL =
'https://www.gstaticcnapps.cn/tfjs - models/savedmodel/posenet/mobilenet/float/050/model - stride16.json';
const model = await posenet.load({
architecture: 'MobileNetV1',
outputStride: 16,
inputResolution: 193,
multiplier: 0.5,
modelUrl: POSENET_URL
});
10. 编写小程序代码,调用插件提供的API实现机器学习功能,编译并运行小程序进行测试。
下载地址
点击下载 【提取码: 4003】【解压密码: www.makuang.net】