Crop CMSampleBuffer - PullRequest
       14

Crop CMSampleBuffer

0 голосов
/ 04 марта 2019

Я использую Firebase ML Kit для распознавания текста, который виден в небольшом окне.Но я хочу сделать его более эффективным, чтобы он не анализировал ненужные данные.Поэтому я хотел бы обрезать изображение, отправляемое в модель.

Firebase ML берет VisionImage, что занимает CMSampleBuffer.Единственная часть изображения, которая мне нужна, это та же ширина, но высотой всего около 100 пикселей, как здесь синяя часть:

Image showing the used part of the image captured

У меня есть убежищепока не нашли хороший способ сделать это, или лучше взять изображение из предварительного просмотра, которое показывается пользователю, а затем преобразовать его обратно?

Я думаю, что это должно быть сделано внутриcaptureOutput функция от AVCaptureVideoDataOutputSampleBufferDelegate.Моя функция выглядит сегодня так:

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)
}
...