
72
|
第
4
章
请注意检测器模式设置的差异,尽管
ObjectDetectorOptions.STREAM_MODE
现在使用
流模式,因为我们将向其传输图像。这会打开我们在图 4-6 中看到的物体跟踪功能,它
“记住”不同帧中的同一物体,即使由于相机放置而看起来不同。
当你创建像这样的分析器类时,你需要覆盖函数
analyze
,该函数接受一个表示图像的
ImageProxy
对象。要将 CameraX 图像与图像代理一起使用,你需要进行一些处理来管
理旋转等。我不会在此处详细介绍,但要管理的重要事项是:如果相机以横向或纵向模
式提供帧,那么我们需要通知叠加层有关图像的适当高度和宽度,并在必要时翻转它
们
—
以便 ML Kit API 始终接收相同方向的图像:
if (rotationDegrees == 0 || rotationDegrees == 180) {
overlay.setImageSourceInfo(
imageProxy.width, imageProxy.height, isImageFlipped
)
} else {
overlay.setImageSourceInfo(
imageProxy.height, imageProxy.width, isImageFlipped
)
}
然后,我们可以将帧传递给物体检测器,如果成功,回调函数将像以前一样检测到物
体。此时我们应该清除叠加层,然后为每个检测到的物体向叠加层添加新的图形对象。
这些图形对象是此应用程序中的自定义类。你很快就会看到它们 ...