是否可以使用通过iOS 11.3.1上的图像以编程方式创建的ARReferenceImage对象

现场表演

我最近用本机ARKit替换了笨重的OpenCV,以进行图像检测和跟踪。我要跟踪的图像从Web服务下载并存储在本地。我正在ARImageReference使用以下代码从它们创建对象:

guard
    let image = UIImage(contentsOfFile: imageLocalPath),
    let cgImage = image.cgImage
else {
    return nil
}

return ARReferenceImage(cgImage, orientation: .up, physicalWidth: 0.12)

宽度很小,因为图像也不太大,每个图像大约为180 x 240像素,但是打印的图像可能更大。

由于ARImageTrackingConfigurationiOS 11不可用,因此根据当前iOS版本配置的会话

private lazy var configuration: ARConfiguration = {
    if #available(iOS 12.0, *),
        ARImageTrackingConfiguration.isSupported {
        return ARImageTrackingConfiguration()
    }

    return ARWorldTrackingConfiguration()
}()

if #available(iOS 12.0, *),
    let imagesTrackingConfig = configuration as? ARImageTrackingConfiguration {
    imagesTrackingConfig.trackingImages = referenceImages
} else if let worldTrackingConfig = configuration as? ARWorldTrackingConfiguration {
    worldTrackingConfig.detectionImages = referenceImages
}

session.run(configuration, options: [.resetTracking, .removeExistingAnchors])

即使我使用,上面的代码也适用于iOS 12和13版本ARWorldTrackingConfigurationARKit正确检测到的图像。但是,当我尝试在iOS 11.3.1上运行它时,该应用程序立即崩溃并出现以下错误:

断言:/BuildRoot/Library/Caches/com.apple.xbs/Sources/AppleCV3D/AppleCV3D-1.13.11/library/VIO/OdometryEngine/src/FrameDownsampleNode/FrameDownsampler.cpp,62:std :: abs(static_cast(aspect_1) -static_cast(src_frame.image.width * output_frame_height_))<max_slack(lldb)

是否可能无法以编程方式创建动态标记,但不适用于低于12.0的iOS版本,或者我做错了什么?不幸的是,我找不到有关特定版本的任何信息。任何反馈表示赞赏。谢谢。

现场表演

因此,经过一段时间后,我终于设法找到了问题的根源,因此将其发布在这里,因为它可能对遇到相同问题的其他人有用。

答案是肯定的,可以以ARReferenceImage编程方式创建对象,然后在iOS 11.3.1上使用它们进行图像检测。

我的问题在于源图像本身,并且看起来像是缩放比例不当CGImage导致崩溃。从API映像下载的是180x240。通过检查CGImage用于创建的的大小,ARReferenceImage我意识到它们的缩放比例不正确,因此其CGImage大小与source相同UIImage

我决定尝试使用以下方法重新绘制图像:

func getRedrawnCgImage(_ originalImage: UIImage) -> CGImage? {
    guard let cgImage = originalImage.cgImage else { return nil }

    let size = CGSize(width: cgImage.width, height: cgImage.height)
    
    UIGraphicsBeginImageContextWithOptions(size, false, 0.0)
    originalImage.draw(in: CGRect(origin: .zero, size: size))
    let redrawnImage = UIGraphicsGetImageFromCurrentImageContext()
    UIGraphicsEndImageContext()

    return redrawnImage?.cgImage
}

结果CGImage的大小为540x720,因此应使用原始大小的x3比例。通过使用这些重绘的图像,我摆脱了崩溃,但这只是一种解决方法,而不是目前的适当解决方案。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

是否可以在虚幻引擎上以编程方式创建简单的3d对象?

来自分类Dev

是否可以使用 DirectX 3D 11 绘制由三角形组成的圆?

来自分类Dev

Swift iOS是否可以使用UIImageView在图像之间滑动

来自分类Dev

是否可以使用Tkinter为Android或iOS创建应用?

来自分类Dev

可以在SUSE 11 SP3上安装Docker吗

来自分类Dev

是否可以使用css3创建像这样的背景?

来自分类Dev

是否可以使用d3并创建类似于vis.js的线/曲线?

来自分类Dev

是否可以使用Python 3创建GTK + 2.x应用程序?

来自分类Dev

D3.js是否可以使用嵌套数据在每个点上绘制圆?

来自分类Dev

是否可以使用glfw3在Macbok Pro 2015 mid上运行OpenGL 3.0?

来自分类Dev

是否可以在Suse Enterprise Linux 11 SP3上安装Open Source Chef Server?

来自分类Dev

是否可以使用Google Maps在Android / iOS上创建转弯GPS导航应用程序?

来自分类Dev

是否可以使用CSS3动画上下左右无限滚动地上下移动图像?

来自分类Dev

是否可以使用Visual Studio 2013创建ASP.NET MVC3项目?

来自分类Dev

D3js是否可以使用自定义节点创建类似于树形结构的视图

来自分类Dev

是否可以使用D3 JS在Hue中创建自定义窗口小部件?

来自分类Dev

是否可以使用 iOS Charts (Daniel Gindi) 在 iOS 上的 pdf 文档中生成图表

来自分类Dev

是否可以使用Node.js和Express通过request.query传递对象数组?

来自分类Dev

是否可以使用params关键字通过ref传递对象?

来自分类Dev

通过NuGet是否可以使用创建Team Explorer扩展所需的控件?

来自分类Dev

是否可以通过其SDK以编程方式获得AWS S3的价格?

来自分类Dev

我可以使用3D Touch在iOS手势上添加反馈(凹口)吗?

来自分类Dev

是否可以使用PySerial以编程方式检查新连接?

来自分类Dev

WSL(Ubuntu)是否与C ++中的X11,glfw(3)编程兼容?

来自分类Dev

是否可以使用NSTextAttachment图像动画?

来自分类Dev

我可以使用pkcs11-tool创建pkcs#7签名吗?

来自分类Dev

可以使用CSS创建3D照明效果?

来自分类Dev

是否可以使用swift 3.0为非iOS 10设备创建应用程序?

来自分类Dev

是否可以使用Windows Cordova创建iOS应用程序?

Related 相关文章

  1. 1

    是否可以在虚幻引擎上以编程方式创建简单的3d对象?

  2. 2

    是否可以使用 DirectX 3D 11 绘制由三角形组成的圆?

  3. 3

    Swift iOS是否可以使用UIImageView在图像之间滑动

  4. 4

    是否可以使用Tkinter为Android或iOS创建应用?

  5. 5

    可以在SUSE 11 SP3上安装Docker吗

  6. 6

    是否可以使用css3创建像这样的背景?

  7. 7

    是否可以使用d3并创建类似于vis.js的线/曲线?

  8. 8

    是否可以使用Python 3创建GTK + 2.x应用程序?

  9. 9

    D3.js是否可以使用嵌套数据在每个点上绘制圆?

  10. 10

    是否可以使用glfw3在Macbok Pro 2015 mid上运行OpenGL 3.0?

  11. 11

    是否可以在Suse Enterprise Linux 11 SP3上安装Open Source Chef Server?

  12. 12

    是否可以使用Google Maps在Android / iOS上创建转弯GPS导航应用程序?

  13. 13

    是否可以使用CSS3动画上下左右无限滚动地上下移动图像?

  14. 14

    是否可以使用Visual Studio 2013创建ASP.NET MVC3项目?

  15. 15

    D3js是否可以使用自定义节点创建类似于树形结构的视图

  16. 16

    是否可以使用D3 JS在Hue中创建自定义窗口小部件?

  17. 17

    是否可以使用 iOS Charts (Daniel Gindi) 在 iOS 上的 pdf 文档中生成图表

  18. 18

    是否可以使用Node.js和Express通过request.query传递对象数组?

  19. 19

    是否可以使用params关键字通过ref传递对象?

  20. 20

    通过NuGet是否可以使用创建Team Explorer扩展所需的控件?

  21. 21

    是否可以通过其SDK以编程方式获得AWS S3的价格?

  22. 22

    我可以使用3D Touch在iOS手势上添加反馈(凹口)吗?

  23. 23

    是否可以使用PySerial以编程方式检查新连接?

  24. 24

    WSL(Ubuntu)是否与C ++中的X11,glfw(3)编程兼容?

  25. 25

    是否可以使用NSTextAttachment图像动画?

  26. 26

    我可以使用pkcs11-tool创建pkcs#7签名吗?

  27. 27

    可以使用CSS创建3D照明效果?

  28. 28

    是否可以使用swift 3.0为非iOS 10设备创建应用程序?

  29. 29

    是否可以使用Windows Cordova创建iOS应用程序?

热门标签

归档