C++ собственный порт OpenCV для opencv4android слишком медленный?

Я переношу код рабочего стола C++ OpenCV на Android и использую opencv4android. Со временем я планирую перейти на NTK, но пока, поскольку я новичок в разработке для Android, я подумал, что так будет проще.

Функция OpenCV занимает 37 мс на моем рабочем столе i7-4790 (один поток и без графического процессора). Функция на Android Nexus 4 занимает 10 557 мс. Я знал, что могу ожидать некоторого замедления из-за накладных расходов на java-нативные вызовы, но эту огромную разницу трудно объяснить. Я выполняю много операций с пикселями с помощью get/put, но на относительно небольших изображениях (около 500x500px).

Я помещаю свою функцию opencv в следующий метод:

private BaseLoaderCallback mLoaderCallback = new BaseLoaderCallback(this) {

    @Override
    public void onManagerConnected(int status) {

        switch (status) {
            case LoaderCallbackInterface.SUCCESS:
            {
                 // opencv4android code
                 ...
            }
        }
    }
}

Что-то не так (возможно, связанное с многопоточностью) или производительность нормальная? Какого замедления следует ожидать? А как быть с НТК?

Большое спасибо,

Гийом


person Guillaume    schedule 02.02.2016    source источник
comment
Я переключил код доступа к пикселям, чтобы скопировать все данные в массивы Java, когда это возможно, и скопировать обратно в мат сразу после вычисления, когда это возможно, как в ссылка. Я также переместил некоторые операции файлового ввода-вывода за рамки расчетов по времени, и теперь я сократил примерно до 4000 мс, что примерно в 100 раз медленнее...   -  person Guillaume    schedule 02.02.2016


Ответы (1)


Для тех, кому интересно, я только что закончил версию NTK. Это занимает около 125 мс, так что ускорение действительно значительное.

person Guillaume    schedule 05.02.2016
comment
У вас есть код ntk (вы имеете в виду ndk), который мы могли бы увидеть? - person callyalater; 10.02.2016