Estoy usando Firebase ML Kit para reconocer el texto que está visible dentro de una ventana pequeña. Pero quiero hacerlo más eficiente, ayudándolo a no analizar datos innecesarios. Así que me gustaría recortar la imagen que se envía al modelo.
Firebase ML está tomando una VisionImage que toma un CMSampleBuffer . La única parte de la imagen que necesitaría es del mismo ancho, pero solo tiene unos 100 px de alto, como la parte azul aquí:
Todavía no he encontrado una buena manera de hacer esto, ¿o es mejor tomar la imagen de la vista previa que se muestra al usuario y luego volver a convertirla?
Estoy pensando que esto debería hacerse dentro de la función captureOutput de AVCaptureVideoDataOutputSampleBufferDelegate . Mi función se ve así hoy:
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) }