我有一个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
,而是使用AVCaptureSession
和AVCaptureVideoPreviewLayer
。当您运行该示例时,相机具有更好的质量,并且比使用ARKit
和ARSKView
运行项目时更准确地绘制文本框。
我需要将ARKit
与SpriteKit
一起使用,但是当我将相机移近文本时,它们会显示为模糊,而且一般情况下,包装文字的方框会被错误地放置。
有什么方法可以改善这个吗?