Я использую Firebase ML Kit для распознавания текста, который виден в небольшом окне.Но я хочу сделать его более эффективным, чтобы он не анализировал ненужные данные.Поэтому я хотел бы обрезать изображение, отправляемое в модель.
Firebase ML берет VisionImage
, что занимает CMSampleBuffer
.Единственная часть изображения, которая мне нужна, это та же ширина, но высотой всего около 100 пикселей, как здесь синяя часть:
У меня есть убежищепока не нашли хороший способ сделать это, или лучше взять изображение из предварительного просмотра, которое показывается пользователю, а затем преобразовать его обратно?
Я думаю, что это должно быть сделано внутри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)
}