我正在尝试在 android 的实时摄像头提要上使用firebase MLKit检测对象和文本。有特定的识别器(FirebaseVisionTextRecognizer,FirebaseVisionObjectDetector)来处理图像。如果我一一使用这些识别器,它工作得很好,我能够得到期望的响应。
但是,我想使用与 Google Lens 应用程序相同的相机源同时检测对象和文本。为了实现这一点,首先,我尝试同时运行两个识别器,但延迟时间更长(执行特定帧需要时间),因为两者都是按顺序运行的,因此只有文本检测有效,而对象检测无效。这意味着对象检测没有结果。
然后,我尝试并行执行两个识别器,延迟减少但不足以让检测 API 返回响应。当摄像头供稿中没有文本时,对象检测效果很好,但是当摄像头供稿中有文本时,延迟会增加,因此没有跟踪对象。
注意:我检查了检测后函数调用的延迟(检测到对象后执行的代码),它不需要太多时间。在并行执行的情况下,识别器需要更多时间来处理图像。我正在三星 Galaxy S30s 手机上进行测试,我猜它的处理器并没有那么差。
代码中的一些概述:
- 使用FirebaseVisionObjectDetectorOptions.STREAM_MODE、enableMultipleObjects=false和enableClassification=false进行对象检测
FirebaseVisionImageMetadata.IMAGE_FORMAT_NV21
在构建 FirebaseVisionImageMetadata 时使用格式- 根据 Google 定义的最佳实践,如果检测正在进行中,则丢弃最新的帧
- 使用 OnDeviceObjectDetector 进行对象检测
- 对于文本检测,我使用 OnDeviceTextRecognizer
我需要帮助来了解 Google Lens 应用程序如何同时执行多个识别器,但不是在我的应用程序中。我可以做些什么来在同一个相机框架上启用多个识别器?