AR Kit 2.0 跟踪来自服务器的图像
AR Kit 2.0 tracking images from the server
我最近构建了一个可用的 AR 应用程序,用于处理使用您自己的照片和文本创建您自己的自定义 AR 对象。
现在应用程序生成一个二维码并将该二维码图像存储在服务器上。我想做一些可以检索这些图像并将它们存储到 AR Resource Group 文件夹中的东西。目前我所做的实际上是下载所有图像,将它们转换为 ARReferenceImage 类型,然后 运行 使用这些图像列表的会话。随着我的应用程序获得更多用户和创作,下载需要更长的时间。
检索和转换所有图像类型的代码
func getAllQRCodes(completion: @escaping CompletionHandler) {
var downloaded = 0
let reference = Database.database().reference().child("QR")
reference.observe(DataEventType.value, with: { (snapshot) in
let postDict = snapshot.value as? [String : String] ?? [:]
DispatchQueue.global(qos: .background).async {
for (key, value) in postDict {
print("downloaded: \(downloaded) / total: \(postDict.count)")
let percentage = (Double(downloaded)/Double(postDict.count)) * 100
DispatchQueue.main.async {
self.qrProgressCircle.startProgress(to: CGFloat(percentage), duration: 1)
}
if self.downloadURLs.contains(value) == false {
self.downloadURLs.insert(value)
let qrImage = UIImage(url: URL(string: value))
let qrCiImage = CIImage(image: qrImage!)
let qrCGImage = self.convertCIImageToCGImage(inputImage: qrCiImage!)
let qrARImage = ARReferenceImage(qrCGImage!, orientation: CGImagePropertyOrientation.up, physicalWidth: 0.2)
qrARImage.name = key
self.ARTrackingImages.insert(qrARImage)
downloaded += 1
}
}
completion(true)
}
})
}
我的问题是,有更好的方法吗?也许 运行 它在后台线程上然后不断重新 运行 sceneView 会话? (这真的会导致糟糕的用户体验吗?)
我没有从服务器下载所有图像,而是首先从会话委托函数 didUpdate 帧中检测图像
从我得到的框架中,我然后进行正确的操作以将图像添加到我的 AR 资源组。
我最近构建了一个可用的 AR 应用程序,用于处理使用您自己的照片和文本创建您自己的自定义 AR 对象。
现在应用程序生成一个二维码并将该二维码图像存储在服务器上。我想做一些可以检索这些图像并将它们存储到 AR Resource Group 文件夹中的东西。目前我所做的实际上是下载所有图像,将它们转换为 ARReferenceImage 类型,然后 运行 使用这些图像列表的会话。随着我的应用程序获得更多用户和创作,下载需要更长的时间。
检索和转换所有图像类型的代码
func getAllQRCodes(completion: @escaping CompletionHandler) {
var downloaded = 0
let reference = Database.database().reference().child("QR")
reference.observe(DataEventType.value, with: { (snapshot) in
let postDict = snapshot.value as? [String : String] ?? [:]
DispatchQueue.global(qos: .background).async {
for (key, value) in postDict {
print("downloaded: \(downloaded) / total: \(postDict.count)")
let percentage = (Double(downloaded)/Double(postDict.count)) * 100
DispatchQueue.main.async {
self.qrProgressCircle.startProgress(to: CGFloat(percentage), duration: 1)
}
if self.downloadURLs.contains(value) == false {
self.downloadURLs.insert(value)
let qrImage = UIImage(url: URL(string: value))
let qrCiImage = CIImage(image: qrImage!)
let qrCGImage = self.convertCIImageToCGImage(inputImage: qrCiImage!)
let qrARImage = ARReferenceImage(qrCGImage!, orientation: CGImagePropertyOrientation.up, physicalWidth: 0.2)
qrARImage.name = key
self.ARTrackingImages.insert(qrARImage)
downloaded += 1
}
}
completion(true)
}
})
}
我的问题是,有更好的方法吗?也许 运行 它在后台线程上然后不断重新 运行 sceneView 会话? (这真的会导致糟糕的用户体验吗?)
我没有从服务器下载所有图像,而是首先从会话委托函数 didUpdate 帧中检测图像
从我得到的框架中,我然后进行正确的操作以将图像添加到我的 AR 资源组。