我想使用 Tensorflow、OpenCV 和 Android 开发一个机器学习程序。我已经训练了我的模型并将其上传到我的手机,但是当我想输入用相机拍摄的图像时遇到了问题。问题是相机正在以 RGBa 格式(有 4 个通道)拍照,而我的 CNN 输入只有 3 个通道(形状看起来像 100、100、3)。此外,我想开发一个应用程序,我将在每一帧上进行推理,而无需按下按钮或类似的东西。我应该说我是 Android 开发的新手,这个应用程序只是为我的学士论文提供演示。
我的网络输入:
X = tf.placeholder(tf.float32, shape=[1, height, width, channels], name="X")
其中高度 = 宽度 = 100 和通道 = 3
我的 android 代码看起来像这样:
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
javaCameraView = (JavaCameraView)findViewById(R.id.java_camera_view);
javaCameraView.setVisibility(SurfaceView.VISIBLE);
javaCameraView.setCvCameraViewListener(this);
inferenceInterface = new TensorFlowInferenceInterface(getAssets(), MODEL_FILE);
}
@Override
public Mat onCameraFrame(Mat inputFrame) {
mRgba = inputFrame;
Mat resizeimage = new Mat(100, 100, CvType.CV_32SC4);
Imgproc.resize( inputFrame.clone(), resizeimage, new Size(100, 100));
MatOfInt rgb = new MatOfInt(100, 100, CvType.CV_32SC3);
resizeimage.convertTo(rgb,CvType.CV_32SC3);
float[] rgbFloat = new float[(int)(rgb.total()*rgb.channels())];
rgb.get(0,0,rgbFloat);
inferenceInterface.feed(INPUT_NODE, rgbFloat, INPUT_SIZE);
inferenceInterface.run(new String[] {OUTPUT_NODE});
int size = classes.length;
float resu[] = new float[size];
for(int i =0;i< size;i++){
resu[i] = 0;
}
inferenceInterface.fetch(OUTPUT_NODE, resu);
Log.d("result", convert(resu));
return mRgba;
}
我应该如何进行?