Ios 裁剪采样缓冲区
我正在使用Firebase ML工具包识别在一个小窗口中可见的文本。但我想让它更有效率,帮助它不分析不必要的数据。因此,我想裁剪发送到模型的图像 Firebase ML使用的是Ios 裁剪采样缓冲区,ios,swift,avcapturesession,core-image,firebase-mlkit,Ios,Swift,Avcapturesession,Core Image,Firebase Mlkit,我正在使用Firebase ML工具包识别在一个小窗口中可见的文本。但我想让它更有效率,帮助它不分析不必要的数据。因此,我想裁剪发送到模型的图像 Firebase ML使用的是VisionImage,它使用的是CMSampleBuffer。 我需要的图像的唯一部分是相同的宽度,但只有大约100px高,就像这里的蓝色部分: 我还没有找到一个很好的方法来实现这一点,或者从显示给用户的预览中获取图像,然后再将其转换回来更好吗 我认为这应该在AVCaptureVideoDataOutputSample
VisionImage
,它使用的是CMSampleBuffer
。
我需要的图像的唯一部分是相同的宽度,但只有大约100px高,就像这里的蓝色部分:
我还没有找到一个很好的方法来实现这一点,或者从显示给用户的预览中获取图像,然后再将其转换回来更好吗
我认为这应该在AVCaptureVideoDataOutputSampleBufferDelegate
的captureOutput
函数中完成。今天我的函数如下所示:
func captureOutput(
_ output: AVCaptureOutput,
didOutput sampleBuffer: CMSampleBuffer,
from connection: AVCaptureConnection
) {
DispatchQueue.main.async {
self.updatePreviewOverlayView()
}
guard let imageBuffer = CMSampleBufferGetImageBuffer(sampleBuffer) else { return }
self.lastFrame = sampleBuffer
let visionImage = VisionImage(buffer: sampleBuffer)
let metadata = VisionImageMetadata()
let visionOrientation = VisionDetectorImageOrientation.rightTop
metadata.orientation = visionOrientation
visionImage.metadata = metadata
let imageWidth = CGFloat(CVPixelBufferGetWidth(imageBuffer))
let imageHeight = CGFloat(CVPixelBufferGetHeight(imageBuffer))
self.recognizeTextOnDevice(in: visionImage, width: imageWidth, height: imageHeight)
}
我一直在想同样的事情。我希望你能把rect传递给Firebase ML工具包。到目前为止,我们似乎必须转换成CGImage并调整大小。让我知道你们是否找到了解决方案你们找到了解决方案吗?不幸的是。。。不