I need to implement text recognition using MLKit on Android and I have decided to use the new CameraX api as the camera lib. I am struggling with the correct "pipeline" of classes or data flow of the image because CameraX is quite new and not many resources is out there. The use case is that I take the picture, crop it in the middle by some bounds that are visible in the UI and then pass this cropped image to the MLKit that will process the image.
Given that, is there some place for ImageAnalysis.Analyzer api? From my understanding this analyzer is used only for previews and not the captured image.
My first idea was to use takePicture method that accepts OnImageCapturedCallback
but when I've tried access eg. ImageProxy.height
the app crashed with an exception java.lang.IllegalStateException: Image is already closed
and I could not find any fix for that.
Then I've decided to use another overload of takePicture method and now I save image to the file, then read it to Bitmap, crop this image and now I have an image that can be passed to MLKit. But when I take a look at FirebaseVisionImage
that is passed to FirebaseVisionTextRecognizer
it has a factory method to which I can pass the Image that I get from OnImageCapturedCallback
which seems that I am doing some unnecessary steps.
So my questions are:
- Is there some class (CaptureProcessor?) that will take care of the cropping of taken image? I suppose that then I could use
OnImageCapturedCallback
where I would receive already cropped image. - Should I even use
ImageAnalysis.Analyzer
if I am not doing realtime processing and I am doing post processing?
I suppose that I can achieve what I want with my current approach but I am feeling that I could use much more of CameraX than I currently am.
Thanks!