• 设为首页
  • 点击收藏
  • 手机版
    手机扫一扫访问
    迪恩网络手机版
  • 关注官方公众号
    微信扫一扫关注
    迪恩网络公众号

ios - 每帧多个视觉请求

[复制链接]
菜鸟教程小白 发表于 2022-12-11 19:32:05 | 显示全部楼层 |阅读模式 打印 上一主题 下一主题

我正在使用 VisionCoreML 框架。我有一个实时视频源。对于每一帧,我首先使用 VNDetectRectanglesRequest 检测矩形。对于我检测到的每个矩形,我裁剪出图像的那一部分并执行 VNCoreMLRequest 来对图像的那一部分进行分类。对对象进行分类后,如果是我要查找的对象类型,则绘制矩形。这就像我在没有数据来训练实际神经网络进行检测时构建了一个对象检测器。

通常,我检测到大约 1 到 3 个矩形。没有那么多。因此,对于每个 VNDetectRectanglesRequest,我每帧要执行 1 到 3 个额外的 VNCoreMLRequest。但是,执行所有这些请求会使我的视频流非常滞后。当我将相机对准矩形物体时,这一点非常明显。我想我应该补充一点,这段视频片段来自 ARKit,所以无论 ARKit 正在执行什么后台操作,都可能使延迟变得更糟。

我尝试使用 DispatchQueue 优化代码。下面是我的伪代码。我对代码所做的事情感到满意,但我需要摆脱滞后。

 DispatchQueue.global(qos: .background).async {
        let request = VNDetectRectanglesRequest(completionHandler: { (request, error) in
             // ...
             for observation in request.results {
                  let mlRequest = VNCoreMLRequest(model: model){ (request, error) in
                       // classify ... if is object I want then jump back to main queue and draw
                       DispatchQueue.main.async {
                           // draw rectangles
                       }
                   })
              }
         })
 }



Best Answer-推荐答案


我认为您的代码没有任何问题,只是为每一帧发出所有这些请求对于设备来说负载太高而无法处理。

尝试降低请求的频率,并可能在首先发出请求之前添加一些条件来检查。只需添加一个检查以查看您是否已经在等待其他请求完成可能会显着减少负载。您还可以检查用户是否稳定地握住设备、框架是否清晰、照明是否充足等。

关于ios - 每帧多个视觉请求,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48030439/

回复

使用道具 举报

懒得打字嘛,点击右侧快捷回复 【右侧内容,后台自定义】
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

关注0

粉丝2

帖子830918

发布主题
阅读排行 更多
广告位

扫描微信二维码

查看手机版网站

随时了解更新最新资讯

139-2527-9053

在线客服(服务时间 9:00~18:00)

在线QQ客服
地址:深圳市南山区西丽大学城创智工业园
电邮:jeky_zhao#qq.com
移动电话:139-2527-9053

Powered by 互联科技 X3.4© 2001-2213 极客世界.|Sitemap