Недавно я заменил тяжелый OpenCV на собственный ARKit для обнаружения и отслеживания изображений. Изображения, которые я хочу отслеживать, загружаются из веб-службы и хранятся локально. Я создаю из них объекты 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 пикселей каждое, но напечатанные могут быть больше.
Сеанс настроен в зависимости от текущей версии iOS, поскольку ARImageTrackingConfiguration
недоступен для iOS 11:
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, даже если я использую ARWorldTrackingConfiguration
. Изображения правильно обнаруживаются ARKit. Но когда я пытаюсь запустить его на iOS 11.3.1, приложение сразу вылетает со следующей ошибкой:
Assert: /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_))
Возможно ли, что создание динамических c маркеров программно недоступно для версии iOS ниже 12.0, или я что-то делаю не так? К сожалению, мне не удалось найти никакой информации о конкретных версиях c. Любая обратная связь приветствуется. Спасибо.