我正在尝试使用VNDetectRectangleRequest苹果的 Vision 框架来自动抓取卡片的图片。然而,当我转换点来绘制矩形时,它是畸形的并且不遵循矩形。我一直在密切关注这篇文章
一个主要区别是我将 CameraCaptureVC 嵌入到另一个 ViewController 中,以便仅当卡位于这个较小的窗口中时才会扫描该卡。
下面是我如何在父 vc 中设置相机 vc(从 viewDidLoad 调用)。
func configureSubviews() {
clearView.addSubview(cameraVC.view)
cameraVC.view.autoPinEdgesToSuperviewEdges()
self.addChild(cameraVC)
cameraVC.didMove(toParent: self)
}
Run Code Online (Sandbox Code Playgroud)
下面是绘制矩形的代码
func createLayer(in rect: CGRect) {
let maskLayer = CAShapeLayer()
maskLayer.frame = rect
maskLayer.cornerRadius = 10
maskLayer.opacity = 0.75
maskLayer.borderColor = UIColor.red.cgColor
maskLayer.borderWidth = 5.0
previewLayer.insertSublayer(maskLayer, at: 1)
}
func removeMask() {
if let sublayer = previewLayer.sublayers?.first(where: { $0 as? CAShapeLayer != nil }) {
sublayer.removeFromSuperlayer()
}
}
func drawBoundingBox(rect : VNRectangleObservation) {
let …Run Code Online (Sandbox Code Playgroud) 现在我AVDepthPhotoFilter从iPhone7Plus的立体相机中运行Rendering Depth Deta.
所以,我想访问每像素深度数据,但是,我不知道该怎么做.请指教.
根据Apple文档,它是存储在主存储器中的图像,但这些图像如何用于制作电影?
尝试在SCNRender对象的每个调用渲染中从MTLTexture创建CVPixelBufferRef:
CVPixelBufferLockBaseAddress(pixelBuffer!, CVPixelBufferLockFlags(rawValue: 0))
let bytesPerRow = 4 * Int(textureSizeX)
let region = MTLRegionMake2D(0, 0, Int(textureSizeX), Int(textureSizeY))
var tmpBuffer = CVPixelBufferGetBaseAddress(pixelBuffer!);
offscreenTexture.getBytes(tmpBuffer!, bytesPerRow: bytesPerRow, from: region, mipmapLevel: 0)
CVPixelBufferUnlockBaseAddress(pixelBuffer!, CVPixelBufferLockFlags(rawValue: 0))
Run Code Online (Sandbox Code Playgroud)
然后转换为UIImage以显示在屏幕上
let ciImage = CIImage.init(cvPixelBuffer: pixelBuffer!)
let temporaryContext = CIContext(options: nil)
let tempImage = temporaryContext.createCGImage(ciImage, from: CGRect(x: 0, y: 0, width: textureSizeX, height: textureSizeY))
let uiImage = UIImage.init(cgImage: tempImage!)
Run Code Online (Sandbox Code Playgroud)
但是不显示图像
我发现下面的 git 使用func capturer(_ capturer: RTCVideoCapturer, didCapture frame: RTCVideoFrame)of既简单又高效RTCVideoCapturerDelegate。你得到RTCVideoFrame然后转换CVPixelBuffer为修改。
https://gist.github.com/lyokato/d041f16b94c84753b5e877211874c6fc
但是,我发现 Chronium 说获得 PixelBuffer 的 nativeHandle 不再可用(链接如下)。我尝试了 frame.buffer.pixelbuffer...,但是,查看框架 > 标题 > RTCVideoFrameBuffer.h,我发现 CVPixelBuffer 也从这里消失了!
https://codereview.webrtc.org/2990253002
有什么好的方法可以转换RTCVideoFrame为CVPixelBuffer?或者我们有更好的方法来修改从 RTCCameraVideoCapturer 捕获的视频吗?
下面的链接建议直接修改 sdk,但希望我们可以在 Xcode 上实现这一点。
ios ×4
swift ×2
apple-vision ×1
core-video ×1
ios11 ×1
iphone7plus ×1
metal ×1
rectangles ×1
webrtc ×1