对图片执行对象检测。
API 需要具有 TFLite 模型元数据的 TFLite 模型。
该 API 支持具有一个图像输入张量和四个输出张量的模型。具体要求如下。
- 输入图片张量 (
kTfLiteUInt8/kTfLiteFloat32)- 图片输入,大小为
[batch x height x width x channels]。 - 不支持批量推理(
batch必须为 1)。 - 仅支持 RGB 输入(
channels必须为 3)。 - 如果类型为
kTfLiteFloat32,则 NormalizationOptions 需要附加到元数据才能进行输入归一化。
- 图片输入,大小为
- 输出张量必须是
DetectionPostProcess操作的 4 个输出,即:- Location 张量 (
kTfLiteFloat32):- 大小为
[1 x num_results x 4]的张量,表示内部数组,表示边界框,形式为 [top, left, right, bottom]。 BoundingBoxProperties需要附加到元数据,并且必须指定type=BOUNDARIES和coordinate_type=RATIO。
- 大小为
- 类张量 (
kTfLiteFloat32):- 大小为
[1 x num_results]的张量,每个值表示类的整数索引。 - 如果标签映射作为
TENSOR_VALUE_LABELS关联文件附加到元数据,则它们用于将张量值转换为标签。
- 大小为
- 得分张量 (
kTfLiteFloat32):- 大小为
[1 x num_results]的张量,每个值表示检测到的对象的得分。
- 大小为
- 检测张量 (
kTfLiteFloat32) 的数量:- 作为大小为
[1]的张量的整数 num_results。
- 作为大小为
- Location 张量 (
此类模型的示例可在 TensorFlow Hub 上找到。
嵌套类
| 类别 | ObjectDetector.ObjectDetectorOptions | 用于设置 ObjectDetector 的选项。 |
|
公共方法
| static ObjectDetector |
createFromBuffer(Context context, ByteBuffer modelBuffer)
基于模型缓冲区和默认的
ObjectDetector.ObjectDetectorOptions 创建 ObjectDetector 实例。 |
| static ObjectDetector |
createFromFile(Context context, String modelPath)
基于模型文件和默认的
ObjectDetector.ObjectDetectorOptions 创建 ObjectDetector 实例。 |
| static ObjectDetector |
createFromFile(Context context, File modelFile)
基于模型文件和默认的
ObjectDetector.ObjectDetectorOptions 创建 ObjectDetector 实例。 |
| static ObjectDetector |
createFromOptions(Context context, ObjectDetector.ObjectDetectorOptionsDetectorOptions)
|
| ObjectDetectorResult | |
| ObjectDetectorResult | |
| void |
detectAsync(MPImage 图片、ImageProcessingOptions imageProcessingOptions、long timestampMs)
发送实时图片数据以执行对象检测,结果将通过
ObjectDetector.ObjectDetectorOptions 中提供的 OutputHandler.ResultListener 获取。 |
| void | |
| ObjectDetectorResult |
detectForVideo(MPImage 图片、ImageProcessingOptions imageProcessingOptions、long timestampMs)
对提供的视频帧执行对象检测。
|
| ObjectDetectorResult |
继承的方法
公共方法
public static ObjectDetector createFromBuffer (Context context, ByteBuffer modelBuffer)
基于模型缓冲区和默认的 ObjectDetector.ObjectDetectorOptions 创建 ObjectDetector 实例。
参数
| context | 一个 Android ERROR(/Context)。 |
|---|---|
| modelBuffer | 检测模型的直接 ByteBuffer 或 ERROR(/MappedByteBuffer)。 |
抛出
如果 ObjectDetector 创建过程中出错,则会发生该错误。 |
public static ObjectDetector createFromFile (Context context, String modelPath)
基于模型文件和默认的 ObjectDetector.ObjectDetectorOptions 创建 ObjectDetector 实例。
参数
| context | 一个 Android ERROR(/Context)。 |
|---|---|
| modelPath | 资产中元数据的检测模型路径。 |
抛出
如果 ObjectDetector 创建过程中出错,则会发生该错误。 |
public static ObjectDetector createFromFile (Context context, File modelFile)
基于模型文件和默认的 ObjectDetector.ObjectDetectorOptions 创建 ObjectDetector 实例。
参数
| context | 一个 Android ERROR(/Context)。 |
|---|---|
| modelFile | 检测模型 File 实例。 |
抛出
| IOException | 如果在打开 tflite 模型文件时发生 I/O 错误,则会发生该错误。 |
|---|---|
如果 ObjectDetector 创建过程中出错,则会发生该错误。 |
public static ObjectDetector createFromOptions (Context context, ObjectDetector.ObjectDetectorOptionsDetectorOptions)
参数
| context | 一个 Android ERROR(/Context)。 |
|---|---|
| detectorOptions | 一个 ObjectDetector.ObjectDetectorOptions 实例。 |
抛出
如果 ObjectDetector 创建过程中出错,则会发生该错误。 |
public ObjectDetectorResult detect (MPImage 图片)
使用默认图片处理选项(即未应用任何旋转)对提供的单张图片执行对象检测。仅当使用 ERROR(/RunningMode.IMAGE) 创建 ObjectDetector 时,才使用此方法。
ObjectDetector 支持以下颜色空间类型:
参数
| 图片 | 用于处理的 MediaPipe MPImage 对象。 |
|---|
抛出
| 出现内部错误。 |
public ObjectDetectorResult detect (MPImage image, ImageProcessingOptions imageProcessingOptions)
对提供的单张图片执行对象检测。仅当使用 ERROR(/RunningMode.IMAGE) 创建 ObjectDetector 时,才使用此方法。
ObjectDetector 支持以下颜色空间类型:
参数
| 图片 | 用于处理的 MediaPipe MPImage 对象。 |
|---|---|
| imageProcessingOptions | ImageProcessingOptions,用于指定在运行推断之前如何处理输入图片。请注意,此任务不支持相关区域:指定 ImageProcessingOptions.regionOfInterest() 会导致此方法抛出 IllegalArgumentException。 |
抛出
| IllegalArgumentException | 如果 ImageProcessingOptions 指定了关注区域,则会发生该错误。 |
|---|---|
| 出现内部错误。 |
public void detectAsync (MPImage image, ImageProcessingOptions imageProcessingOptions, long timestampMs)
发送实时图片数据以执行对象检测,结果将通过 ObjectDetector.ObjectDetectorOptions 中提供的 OutputHandler.ResultListener 获取。只有在使用 ERROR(/RunningMode.LIVE_STREAM) 创建 ObjectDetector 时,才应使用此方法。
必须提供时间戳(以毫秒为单位),以指明输入图片何时发送到对象检测器。输入时间戳必须单调递增。
ObjectDetector 支持以下颜色空间类型:
参数
| 图片 | 用于处理的 MediaPipe MPImage 对象。 |
|---|---|
| imageProcessingOptions | ImageProcessingOptions,用于指定在运行推断之前如何处理输入图片。请注意,此任务不支持相关区域:指定 ImageProcessingOptions.regionOfInterest() 会导致此方法抛出 IllegalArgumentException。 |
| timestampMs | 输入时间戳(以毫秒为单位)。 |
抛出
| IllegalArgumentException | 如果 ImageProcessingOptions 指定了关注区域,则会发生该错误。 |
|---|---|
| 出现内部错误。 |
public void detectAsync (MPImage image, long timestampMs)
发送实时图片数据,以使用默认图片处理选项(即不应用任何旋转)执行对象检测,结果将通过 ObjectDetector.ObjectDetectorOptions 中提供的 OutputHandler.ResultListener 获取。仅当使用 ERROR(/RunningMode.LIVE_STREAM) 创建 ObjectDetector 时,才使用此方法。
必须提供时间戳(以毫秒为单位),以指明输入图片何时发送到对象检测器。输入时间戳必须单调递增。
ObjectDetector 支持以下颜色空间类型:
参数
| 图片 | 用于处理的 MediaPipe MPImage 对象。 |
|---|---|
| timestampMs | 输入时间戳(以毫秒为单位)。 |
抛出
| 出现内部错误。 |
public ObjectDetectorResult detectForVideo (MPImage image, ImageProcessingOptions imageProcessingOptions, long timestampMs)
对提供的视频帧执行对象检测。仅当使用 ERROR(/RunningMode.VIDEO) 创建 ObjectDetector 时,才使用此方法。
必须提供视频帧的时间戳(以毫秒为单位)。输入时间戳必须单调递增。
ObjectDetector 支持以下颜色空间类型:
参数
| 图片 | 用于处理的 MediaPipe MPImage 对象。 |
|---|---|
| imageProcessingOptions | ImageProcessingOptions,用于指定在运行推断之前如何处理输入图片。请注意,此任务不支持相关区域:指定 ImageProcessingOptions.regionOfInterest() 会导致此方法抛出 IllegalArgumentException。 |
| timestampMs | 输入时间戳(以毫秒为单位)。 |
抛出
| IllegalArgumentException | 如果 ImageProcessingOptions 指定了关注区域,则会发生该错误。 |
|---|---|
| 出现内部错误。 |
public ObjectDetectorResult detectForVideo (MPImage image, long timestampMs)
使用默认图片处理选项对提供的视频帧执行对象检测,即不应用任何旋转。仅当使用 ERROR(/RunningMode.VIDEO) 创建 ObjectDetector 时,才使用此方法。
必须提供视频帧的时间戳(以毫秒为单位)。输入时间戳必须单调递增。
ObjectDetector 支持以下颜色空间类型:
参数
| 图片 | 用于处理的 MediaPipe MPImage 对象。 |
|---|---|
| timestampMs | 输入时间戳(以毫秒为单位)。 |
抛出
| 出现内部错误。 |