在某些企业用例中,服务器托管模型可能并不适用。例如,如果用户带宽受限或需要比使用远程API更低的延迟,那么传统的服务器托管模型将无法满足需求。在这种情况下,使用JavaScript进行实时推理的inferencejs库就显得尤为重要。inferencejs是建立在TensorFlow.js之上的自定义层,它允许使用Roboflow训练的模型进行实时推理。
学习资源
一旦拥有一个训练好的模型,就可以使用“试用摄像头”按钮轻松地通过摄像头进行测试。摄像头演示是一个示例应用程序,可以通过“获取代码”链接下载并进行修改。可以在这里尝试一个手部检测模型的摄像头演示(该模型是在公开的EgoHands数据集上训练的)。
交互式Replit环境
在Replit上发布了一个“入门”项目,并附有教程,展示了如何使用Replit模板部署YOLOv8模型。Roboflow首页使用inferencejs来驱动COCO推理小部件。README包含了如何使用仓库模板将模型部署到使用GitHub Pages的网页上的说明。
文档
如果想要了解更多关于inferencejs中特定函数的详细信息,请查看,或者点击指南中任何提及inferencejs方法的地方,以跳转到相应的文档。
安装
要将inference添加到项目中,只需使用npm安装或将脚本标签引用添加到页面的
标签中。以下是安装命令和脚本标签的示例:
npm install inferencejs
<script src="https://cdn.jsdelivr.net/npm/inferencejs"></script>
初始化
可以从Roboflow API设置页面获得publishable_key。可以通过进入工作区,进入设置,在Roboflow API页面中获取发布API密钥。请注意,publishable_key是与inferencejs一起使用的,而不是API密钥(应该保持秘密)。inferencejs使用webworkers,以便在不阻塞主UI线程的情况下使用多个模型。每个模型都通过webworker管理器InferenceEngine加载,它为抽象了必要的线程管理。首先,导入InferenceEngine并创建一个新的推理引擎对象:
import { InferenceEngine } from "inferencejs";
const inferEngine = new InferenceEngine();
加载模型
现在可以使用publishable_key和模型元数据(模型名称和版本)以及配置参数(如置信度阈值和重叠阈值)从roboflow加载模型。以下是启动工作器并获取工作器ID的示例代码:
const workerId = await inferEngine.startWorker("[model name]", "[version]", "[publishable key]");
inferencejs现在将启动一个运行所选模型的工作器。返回的工作器ID对应于InferenceEngine中的工作器ID,将用于推理。要对模型进行推理,可以在InferenceEngine上调用infer方法。但首先,需要一个输入图像。提供了CVImage包装类,它可以接收多种图像格式(HTMLImageElement、HTMLVideoElement、ImageBitmap或TFJS Tensor)。让加载一个图像并在工作器上进行推理:
const image = document.getElementById("image");
// 获取id为'image'的图像元素
const predictions = await inferEngine.infer(workerId, image);
// 对图像进行推理
这将返回一个预测数组,在这种情况下是RFObjectDetectionPrediction。
配置
如果想要自定义和配置inferencejs过滤其预测的方式,可以在创建工作器时将参数传递给工作器。以下是配置示例代码:
const configuration = {
scoreThreshold: 0.5,
iouThreshold: 0.5,
maxNumBoxes: 20
};
const workerId = await inferEngine.startWorker("[model name]", "[version]", "[publishable key]", [configuration]);