Cyt*_*ang 9 avfoundation swift ios11 arkit
我看到跑的人ARKit有ARSCNView,而且他们能够获取说,在相机QRCode的矩形,并呈现在某种程度上与QR码在空间居住的地方位置的东西.我认为他们是通过委托来完成的AVCaptureMetadataOutputObjectsDelegate,所以我继续尝试实现以下逻辑:
1-运行ARSCNViewDelegate,ARSessionDelegate并AVCaptureMetadataOutputObjectsDelegate在同一时间.
2-连接ARSCNView,将视图及其会话委派给自己.
3-连接AVCaptureSession,委托自己,并开始会话.
4-开始ARSCNView会话,因为官方的例子就是这样viewWillAppear()做的,我做了同样的事情.
该应用程序并没有任何错误运行,但我只得到了一些回调的AVCaptureMetadataOutputObjectsDelegate,像3到5,然后它永远不会被再次调用像ARSession的代表查获其权威性,是我实施了错误的方法,或者你可以委托ARSession和AVCaptureSession同时?
小智 6
我完全按照您的描述做了并且遇到了同样的问题。ARKit 似乎依赖于AVCapture系统,并且不支持一次使用多个捕获设备。我找到了两个解决方案。
启动ARSession,并实现该功能session(_:didUpdate:)的ARSessionDelegate。每次您ARFrame在框架图像中捕获对 QR 码的搜索。(代码)
func session(_ session: ARSession, didUpdate frame: ARFrame) {
let image = CIImage(cvPixelBuffer: frame.capturedImage)
let detector = CIDetector(ofType: CIDetectorTypeQRCode, context: nil, options: nil)
let features = detector!.features(in: image)
for feature in features as! [CIQRCodeFeature] {
if !discoveredQRCodes.contains(feature.messageString!) {
discoveredQRCodes.append(feature.messageString!)
let url = URL(string: feature.messageString!)
let position = SCNVector3(frame.camera.transform.columns.3.x,
frame.camera.transform.columns.3.y,
frame.camera.transform.columns.3.z)
}
}
}
Run Code Online (Sandbox Code Playgroud)
启动一个AVCaptureSession,当您识别并解码您的二维码时,停止它并启动一个ARSession. (不建议)
| 归档时间: |
|
| 查看次数: |
2065 次 |
| 最近记录: |