如何解决Android应用程序以低fps停止的问题?

时间:2019-12-09 08:11:09

标签: android android-studio opencv

我有一个Android Studio项目,该项目工作非常艰苦,实时图像处理。但是当应用程序正在努力工作且fps较低时,我的应用程序已被Android操作系统停止。我该怎么解决?

当我仅使用一个层叠分类器时,fps并不是很快,但是应用程序正常工作;当我添加另一个分类器时,fps比以前差了,但是当我添加第三个分类器时,应用程序无法启动,操作系统给出了我停止反复弹出。

这是我的LogCat行,而应用程序开始结束

https://drive.google.com/open?id=1DoIIdKC4wUnYiMMJKlMMU-IDWIJJOP1i

这是我的project的模板。我更改了它的cpp文件,它的工作原理就像我不想要的那样。

更改了最新的cpp文件

#include <jni.h>
#include "opencv2/objdetect.hpp"
#include "opencv2/highgui.hpp"
#include <android/log.h>
#include <opencv2/core/core.hpp>
#include <opencv2/imgproc/imgproc.hpp>



using namespace std;
using namespace cv;

extern "C" {
void detect(Mat &input);
void JNICALL
Java_com_example_nativeopencvandroidtemplate_MainActivity_adaptiveThresholdFromJNI(JNIEnv *env, jobject instance,
                                                                                   jlong matAddr) {

    Mat &input = *(Mat *) matAddr;
    detect(input);
}
void detect(Mat &input) {
    String face_cascade_name = "/storage/emulated/0/ony.xml";
    String eyes_cascade_name = "/storage/emulated/0/moe.xml";
    String bos_cascade_name= "/storage/emulated/0/bos.xml";
    CascadeClassifier bos_cascade;
    CascadeClassifier face_cascade;
    CascadeClassifier eyes_cascade;


    if (!face_cascade.load(face_cascade_name)) {
        printf("--(!)Error loading\n");
        return;
    };
    if (!eyes_cascade.load(eyes_cascade_name)) {
        printf("--(!)Error loading\n");
        return;
    };


    std::vector<Rect> faces;
    Mat frame_gray;
    //frame_gray=input;


    cvtColor( input, frame_gray, COLOR_RGB2GRAY );
    equalizeHist(frame_gray, frame_gray);

    face_cascade.detectMultiScale(frame_gray, faces, 1.1, 2, 0 | CASCADE_SCALE_IMAGE, Size(30, 30));

    for (size_t i = 0; i < faces.size(); i++) {
        Point center(faces[i].x + faces[i].width * 0.5, faces[i].y + faces[i].height * 0.5);
        ellipse(input, center, Size(faces[i].width * 0.5, faces[i].height * 0.5), 0, 0, 360, Scalar(255, 0, 255), 4, 8,
                0);
    }
    std::vector<Rect> eyes;

    eyes_cascade.detectMultiScale(frame_gray, eyes, 1.1, 2, 0 | CASCADE_SCALE_IMAGE, Size(30, 30));

    for (size_t i = 0; i < eyes.size(); i++) {
        Point center(eyes[i].x + eyes[i].width * 0.5, eyes[i].y + eyes[i].height * 0.5);
        ellipse(input, center, Size(eyes[i].width * 0.5, eyes[i].height * 0.5), 0, 0, 360, Scalar(255, 0, 255), 4, 8,
                0);
    }
    std::vector<Rect> bos;

    bos_cascade.detectMultiScale(frame_gray, bos, 1.1, 2, 0 | CASCADE_SCALE_IMAGE, Size(30, 30));

    for (size_t i = 0; i < eyes.size(); i++) {
        Point center(bos[i].x + bos[i].width * 0.5, bos[i].y + bos[i].height * 0.5);
        ellipse(input, center, Size(bos[i].width * 0.5, bos[i].height * 0.5), 0, 0, 360, Scalar(255, 0, 255), 4, 8,
                0);
    }


}
}

0 个答案:

没有答案