使用ARSKView和Vision检测文本

时间:2017-08-15 17:36:00

标签: ios sprite-kit avfoundation arkit apple-vision

我有一个ARSKView的视图控制器,其ARSession我这样配置:

let configuration = ARWorldTrackingSessionConfiguration()
arskView.session.run(configuration)

在其关联的SKScene我有这个方法实现:

override func update(_ currentTime: TimeInterval) {
    guard let arskView = self.view as? ARSKView else {
        return
    }

    if let currentFrame = arskView.session.currentFrame {
       let capturedImage = currentFrame.capturedImage
       var requestOptions: [VNImageOption : Any] = [:]

       if let cameraData = CMGetAttachment(capturedImage, kCMSampleBufferAttachmentKey_CameraIntrinsicMatrix, nil) {
          requestOptions = [.cameraIntrinsics : cameraData]
       }

       let request = VNDetectTextRectanglesRequest { [weak self] (request, error) in
          self?.detectTextHandler(request: request, error: error)
       }
       request.reportCharacterBoxes = true

       let imageRequestHandler = VNImageRequestHandler(cvPixelBuffer: capturedImage, orientation: 6, options: requestOptions)

       do {
          try imageRequestHandler.perform([request])
       } catch {
          print(error)
       }
    }
}

然后,绘制包裹检测到的文本的矩形的一些逻辑。我在this article中找到了这样的逻辑,其中ARKit因此不使用ARSKView,而是使用AVCaptureSessionAVCaptureVideoPreviewLayer。当您运行该示例时,相机具有更好的质量,并且比使用ARKitARSKView运行项目时更准确地绘制文本框。

我需要将ARKitSpriteKit一起使用,但是当我将相机移近文本时,它们会显示为模糊,而且一般情况下,包装文字的方框会被错误地放置。

有什么方法可以改善这个吗?

0 个答案:

没有答案