Как обрезать изображение с помощью tenorflow lite после обнаружения объекта в Android - PullRequest
0 голосов
/ 06 ноября 2019

Невозможно обрезать изображение объекта, которое обнаружено тензорным потоком lite.

Я использую библиотеку ar.sceneform для обновления фрейма следующим образом.

 private void onUpdateFrame(FrameTime frameTime) {
try {

            Frame frame = fragment.getArSceneView().getArFrame();
            cameraImage = frame.acquireCameraImage();

//The camera image received is in YUV YCbCr Format. Get buffers for each of the planes and use them to create a new bytearray defined by the size of all three buffers combined
            ByteBuffer cameraPlaneY = cameraImage.getPlanes()[0].getBuffer();
            ByteBuffer cameraPlaneU = cameraImage.getPlanes()[1].getBuffer();
            ByteBuffer cameraPlaneV = cameraImage.getPlanes()[2].getBuffer();

//Use the buffers to create a new byteArray that
            byte[] compositeByteArray = new byte[(cameraPlaneY.capacity() + cameraPlaneU.capacity() + cameraPlaneV.capacity())];

            cameraPlaneY.get(compositeByteArray, 0, cameraPlaneY.capacity());
            cameraPlaneU.get(compositeByteArray, cameraPlaneY.capacity(), cameraPlaneU.capacity());
            cameraPlaneV.get(compositeByteArray, cameraPlaneY.capacity() + cameraPlaneU.capacity(), cameraPlaneV.capacity());

            ByteArrayOutputStream baOutputStream = new ByteArrayOutputStream();
            YuvImage yuvImage = new YuvImage(compositeByteArray, ImageFormat.NV21, cameraImage.getWidth(), cameraImage.getHeight(), null);
            yuvImage.compressToJpeg(new Rect(0, 0, cameraImage.getWidth(), cameraImage.getHeight()), 75, baOutputStream);
            byte[] byteForBitmap = baOutputStream.toByteArray();
            Bitmap bitmap = BitmapFactory.decodeByteArray(byteForBitmap, 0, byteForBitmap.length);
            imageViewResult.setImageBitmap(bitmap);
            cameraImage.close();


                bitmap = Bitmap.createScaledBitmap(bitmap, INPUT_SIZE, INPUT_SIZE, false);

                imageViewResult.setImageBitmap(bitmap);

                final List<Classifier.Recognition> results = classifier.recognizeImage(bitmap);
                Log.d("resultsize", String.valueOf(results.size()));

            textViewResult.setText(String.valueOf(results));


        }catch (NotYetAvailableException e) {
            Log.e("erroroccur",e.toString());
        };
}

Как получить изображение после получения результата List и сравнить вероятность объекта, если оно больше 80%, затем вернуть обрезанное изображение объекта.

...