Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/383.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在android studio中使用java或C++;_Java_Android_C++_Opencv_Deep Learning - Fatal编程技术网

如何在android studio中使用java或C++;

如何在android studio中使用java或C++;,java,android,c++,opencv,deep-learning,Java,Android,C++,Opencv,Deep Learning,我正在尝试在android中使用Mask\u RCNN。因此,编写了它的代码。但是Dnn.readNetFromTensorflow(模型权重,文本图)函数无法打开模型权重和文本图文件。似乎他们的应用程序无法找到存储的文件路径。 我已经将这些文件(文本图和模型权重)插入到存在mainactivity.java文件的java文件夹中。但它显示的错误与下面提到的相同。 我还尝试将这些文件添加到res文件夹和assets文件夹,但无法解析函数Dnn.readNetFromTensorflow(mode

我正在尝试在android中使用Mask\u RCNN。因此,编写了它的代码。但是Dnn.readNetFromTensorflow(模型权重,文本图)函数无法打开模型权重和文本图文件。似乎他们的应用程序无法找到存储的文件路径。 我已经将这些文件(文本图和模型权重)插入到存在mainactivity.java文件的java文件夹中。但它显示的错误与下面提到的相同。 我还尝试将这些文件添加到res文件夹和assets文件夹,但无法解析函数Dnn.readNetFromTensorflow(model\u WEIGHTS,TEXT\u GRAPH)的模型权重路径,因为其参数为字符串类型。但是assetmanager返回输入流。 我正在使用opencv 3.4.10和android studio 4.0

还请帮助我用java在图像上绘制轮廓。如果有人知道如何在Android中使用C++中的模型运行,那么请建议。< /强>,因为我已经尝试过,但它的生成错误没有定义为引用<强> cv:: 任何帮助都将不胜感激。提前谢谢

运行应用程序时,会出现以下异常情况:****

原因:CvException[org.opencv.core.CvException:cv::Exception: OpenCV(3.4.10) /build/3_4_pack-android/opencv/modules/dnn/src/caffe/caffe_io.cpp:1132: 错误:(-2:未指定的错误)失败:fs.is_open()。无法打开 函数“bool”中的“/freezed\u expression\u graph.pb” cv::dnn::ReadProtoFromBinaryFile(常量字符*, google::protobuf::Message*)' ]


位于org.opencv.dnn.dnn.readNetFromTensorflow_0(本机方法) 位于org.opencv.dnn.dnn.readNetFromTensorflow(dnn.java:659) 在com.example.imagecompressor.MainActivity.onActivityResult(MainActivity.java:189)上(错误 在这一行:Net Net=Dnn.readNetFromTensorflow(模型重量, 文本(图形);) 位于android.app.Activity.dispatchActivityResult(Activity.java:7454) 位于android.app.ActivityThread.deliverResults(ActivityThread.java:4353)

源代码如下:

Mainactivity.java

final String TEXT_GRAPH=“/mask_rcnn_inception_v2_coco_2018_01_28.pbtxt”;
最终字符串模型_权重=“./freezed_expression_graph.pb”;
最终字符串类\u文件=“./mscoco\u标签”;
Mat tmp=新的Mat(bitmap.getWidth()、bitmap.getHeight()、CV_8UC1);
位图编辑器(位图,tmp);
Mat image=Imgcodecs.imread(img_路径);
图像=tmp;
Size=image.Size();
int cols=image.cols();
int rows=image.rows();
双h=尺寸。高度;
双w=尺寸。宽度;
int hh=(int)size.height;
int ww=(int)size.width;
如果(!image.empty()){
Mat blob=Dnn.blobFromImage(图像,1.0,新大小(w,h),新标量(0),真,假);
//加载网络
Net=Dnn.readNetFromTensorflow(模型权重、文本图);
net.setPreferableBackend(Dnn.Dnn_BACKEND_OPENCV);
net.setPreferableTarget(Dnn.Dnn\u TARGET\u CPU);
net.setInput(blob);
ArrayList outputlayers=新的ArrayList();
ArrayList outputMats=新的ArrayList();
添加(“检测输出最终”);
添加(“检测屏蔽”);
net.forward(outputMats、outputlayers);
Mat numclass=outputMats.get(0);
Mat numMasks=outputMats.get(1);
numClasses=numClasses.reformate(1,(int)numClasses.total()/7);
对于(int i=0;i0.5){
int classId=(int)numclass.get(i,1)[0];
字符串标签=classes.get(classId)+“:”+置信度;
系统输出打印项次(标签);
int left=(int)(numclass.get(i,3)[0]*cols);
inttop=(int)(numclass.get(i,4)[0]*行);
int-right=(int)(numclass.get(i,5)[0]*cols);
intbottom=(int)(numclass.get(i,6)[0]*行);
System.out.println(左+右+上+右+下);
左=最大值(0,最小值(左,cols-1));
顶部=最大值(0,最小值(顶部,行-1));
右=最大值(0,最小值(右,cols-1));
底部=最大值(0,最小值(底部,行-1));
最终矩形框=新矩形(左、上、右-左+1、下-上+1);
//Mat objectMask(numMasks.rows(),numMasks.size[3],CV_32F,numMasks.ptr(i,classId));
//Mat obj();
Mat objectMask=new Mat(numMasks.rows(),numMasks.cols(),CV_32F);
矩形(图像,新点(box.x,box.y),新点(box.x+box.width,box.y+box.height),新标量(255,178,50),3);
/*字符串lab=格式(“%.2f”,置信度);
如果(!classes.isEmpty()){
//CV_断言(classId<(int)classes.size());
if(classId maskThreshold);
Mat ili=新Mat();
乘法(图像,新标量(0.7),ili);
Mat coloredRoi=新Mat();
添加(ili,新标量(0.3).mul(颜色),coloredRoi);
coloredRoi.convertTo(coloredRoi,CV_8UC3);
列表等高线=空;
Mat-hierarchy=null;
objectMask.convertTo(objectMask,CV_8U);
findContours(对象掩码、轮廓、层次结构、网格、链近似、简单);
绘制等高线(coloredRoi,等高线,-1,颜色,5,线8,层次,100);
coloredRoi.copyTo(图像、对象掩码);
}
Mat detectedFrame=新Mat();
图像转换到(检测帧,CV_8U);
Imgcodecs.imwrite(“outputFile.jpg”,detectedFrame);
}
}