借助 MediaPipe Image Classifier 任务,您可以对图片进行分类。您可以使用 此任务以确定图片所代表的一组类别, 学习到的知识。这些说明介绍了如何使用图像分类器 适用于 Node 和 Web 应用。
要了解此任务的实际运行情况,请查看 演示。 如需详细了解功能、模型和配置选项 部分,请参阅概览。
代码示例
图像分类器的示例代码提供了该分类器的完整实现, 供您参考。此代码可帮助您测试此任务 开始构建您自己的图像分类应用。您可以查看、运行 修改 图片分类器示例代码 只需使用网络浏览器即可。
设置
本部分介绍了设置开发环境和 专门用于使用图像分类器的代码项目。有关 设置开发环境以使用 MediaPipe 任务,包括 平台版本要求,请参阅 适用于网站的设置指南。
JavaScript 软件包
图像分类器代码可通过 MediaPipe @mediapipe/tasks-vision
获取
NPM 软件包。您可以
通过平台中提供的链接查找并下载这些库
设置指南。
您可以使用以下代码安装本地暂存所需的软件包 创建 Deployment
npm install @mediapipe/tasks-vision
如果您想通过内容分发网络 (CDN) 导入任务代码 服务,请在 HTML 文件的 标记中添加以下代码:
<!-- You can replace JSDeliver with another CDN if you prefer to -->
<head>
<script src="https://cdn.jsdelivr.net/npm/@mediapipe/tasks-vision/vision_bundle.js"
crossorigin="anonymous"></script>
</head>
型号
MediaPipe 图像分类器任务需要一个与此分类兼容的经过训练的模型 任务。如需详细了解适用于图片分类器的经过训练的模型,请参阅 任务概览的“模型”部分。
选择并下载模型,然后将其存储在项目目录中:
<dev-project-root>/app/shared/models/
创建任务
使用其中一个图片分类器 createFrom...()
函数
为运行推理准备任务。使用 createFromModelPath()
函数。
如果模型已加载到内存中,您可以使用
createFromModelBuffer()
方法结合使用。
以下代码示例演示了如何使用 createFromOptions()
函数来
设置任务。借助 createFromOptions
函数,您可以自定义
具有配置选项的图片分类器。如需详细了解配置
选项,请参阅配置选项。
以下代码演示了如何使用自定义的 选项:
async function createImageClassifier {
const vision = await FilesetResolver.forVisionTasks(
"https://cdn.jsdelivr.net/npm/@mediapipe/tasks-vision@0.10.0/wasm"
);
imageClassifier = await ImageClassifier.createFromOptions(vision, {
baseOptions: {
modelAssetPath: `https://storage.googleapis.com/mediapipe-models/image_classifier/efficientnet_lite0/float32/1/efficientnet_lite0.tflite`
},
});
}
配置选项
此任务具有以下适用于 Web 应用的配置选项:
选项名称 | 说明 | 值范围 | 默认值 |
---|---|---|---|
runningMode |
设置任务的运行模式。有两个
模式: IMAGE:单图输入的模式。 视频:已解码的帧的模式。 视频或对输入数据(例如来自摄像头的直播数据)进行直播。 |
{IMAGE, VIDEO } |
IMAGE |
displayNamesLocale |
设置要用于
任务模型的元数据(如果有)。默认值为 en ,
英语。您可以向自定义模型的元数据中添加本地化标签
使用 TensorFlow Lite Metadata Writer API |
语言区域代码 | en |
maxResults |
将评分最高的分类结果的可选数量上限设置为 return。如果 <0,则返回所有可用的结果。 | 任何正数 | -1 |
scoreThreshold |
设置预测分数阈值,以替换 模型元数据(如果有)。低于此值的结果将被拒绝。 | 任意浮点数 | 未设置 |
categoryAllowlist |
设置允许的类别名称的可选列表。如果不为空,
类别名称未包含在此集合中的分类结果
已滤除。重复或未知的类别名称会被忽略。
此选项与 categoryDenylist 互斥,使用
都会导致错误。 |
任何字符串 | 未设置 |
categoryDenylist |
设置不允许使用的类别名称的可选列表。如果
非空,类别名称在此集中的分类结果将被滤除
。重复或未知的类别名称会被忽略。这个选项
categoryAllowlist 不包含,同时使用这两个元素会导致错误。 |
任何字符串 | 未设置 |
resultListener |
设置结果监听器以接收分类结果
当图像分类器在直播中时异步执行
模式。仅在跑步模式设为“LIVE_STREAM ”时才能使用 |
不适用 | 未设置 |
准备数据
图片分类器可以采用 托管浏览器该任务还会处理数据输入预处理,包括 调整大小、旋转和值归一化。
运行对图片分类器的 classify()
和 classifyForVideo()
方法的调用
同时阻塞界面线程。如果将对象分类为
视频帧,每个分类都会屏蔽主视频
线程。为防止这种情况发生,您可以设置 Web Worker
另一个线程上的 classify()
和 classifyForVideo()
。
运行任务
图片分类器将 classify()
方法与图片模式和
以 video
模式触发的 classifyForVideo()
方法
推理。Image Classifier API 将返回可能的类别
输入图片中的对象。
以下代码演示了如何使用任务模型执行处理:
映像
const image = document.getElementById("image") as HTMLImageElement; const imageClassifierResult = imageClassifier.classify(image);
视频
const video = document.getElementById("video"); await imageClassifier.setOptions({ runningMode: "VIDEO" }); const timestamp = performance.now(); const classificationResult = await imageClassifier.classifyForVideo( video, timestamp );
有关运行图像分类器任务的更完整实现,请参阅 代码示例)。
处理和显示结果
运行推理时,图像分类器任务会返回
ImageClassifierResult
对象,该对象包含可能的类别列表
输入图片或帧中的对象。
以下示例展示了此任务的输出数据:
ImageClassifierResult:
Classifications #0 (single classification head):
head index: 0
category #0:
category name: "/m/01bwb9"
display name: "Passer domesticus"
score: 0.91406
index: 671
category #1:
category name: "/m/01bwbt"
display name: "Passer montanus"
score: 0.00391
index: 670
此结果是通过运行 Bird Classifier 获得的 日期:
图像分类器示例代码演示了如何显示分类 结果,请参阅 代码示例 了解详情。