#java #android-studio #opencv #tensorflow-lite
#java #android-studio #opencv #tensorflow-lite
Вопрос:
Я пытаюсь преобразовать объект Mat в float32 [1,200,66,3] в Android studio, чтобы передать мою модель tflite.
@Override
public Mat onCameraFrame(CameraBridgeViewBase.CvCameraViewFrame inputFrame) {
Mat frame = inputFrame.rgba();
Imgproc.cvtColor(frame, frame, Imgproc.COLOR_RGBA2RGB);
Imgproc.cvtColor(frame, frame, Imgproc.COLOR_RGB2YUV);
Imgproc.GaussianBlur(frame, frame, new Size(3, 3), 0, 0);
Imgproc.resize(frame, frame, new Size(200, 66));
frame.convertTo(frame, CV_32F);
float[][] outputs = new float[1][1];
float[][][][] inputs = new float[1][200][66][3]; //desired form to model
//
interperter.run(inputs ,outputs);
System.out.println("output: " outputs[0][0]);
return frame;
}
как правильно преобразовать фрейм Mat?
Спасибо
Редактировать: работает как шарм:
float[][][][] inputs = new float[1][200][66][3];
float fs[] = new float[3];
for( int r=0 ; r<f.rows() ; r ) {
for( int c=0 ; c<f.cols() ; c ) {
f.get(r, c, fs);
inputs[0][c][r][0]=fs[0]/255;
inputs[0][c][r][1]=fs[1]/255;
inputs[0][c][r][2]=fs[2]/255;
}
}
Комментарии:
1. Я в замешательстве, вы решили проблему?
2. Чтобы ускорить процесс, вы можете создать метод jni, который копирует изображение из объекта Mat в объект ByteBuffer.