Ios 裁剪采样缓冲区

Ios 裁剪采样缓冲区,ios,swift,avcapturesession,core-image,firebase-mlkit,Ios,Swift,Avcapturesession,Core Image,Firebase Mlkit,我正在使用Firebase ML工具包识别在一个小窗口中可见的文本。但我想让它更有效率,帮助它不分析不必要的数据。因此,我想裁剪发送到模型的图像 Firebase ML使用的是VisionImage,它使用的是CMSampleBuffer。 我需要的图像的唯一部分是相同的宽度,但只有大约100px高,就像这里的蓝色部分: 我还没有找到一个很好的方法来实现这一点,或者从显示给用户的预览中获取图像,然后再将其转换回来更好吗 我认为这应该在AVCaptureVideoDataOutputSample

我正在使用Firebase ML工具包识别在一个小窗口中可见的文本。但我想让它更有效率,帮助它不分析不必要的数据。因此,我想裁剪发送到模型的图像

Firebase ML使用的是
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并调整大小。让我知道你们是否找到了解决方案你们找到了解决方案吗?不幸的是。。。不