Qt Android Opencv qmake configuration file

Android geliştirme için gerçek zamanlı hele tamamen native geliştirmek isteyenler için fazla seçeneğimiz yok. C/C++ için NDK(AndroidNativeActivity(uğraşılmaz)), UnrealEngine, Marmalade QT ve Rad studio var ve Basic için B4x(B4a,B4j,B4i,B4r) Rad araçlarını kullanıyor.

Rad studio borland derleyicinin idesi. Tüm platformlara native uygulama geliştirme. Objectif Pascal ve Delphinin sanırım kalan tek destekçisi. Rad studio qt gibi açık kaynak ve ücretsiz değil. Ayrıca araçları genel geçer gcc ile tam uyumlu değil yani komutları öğrenmek zaman alacak yani deneme süresinde bitiremezsiniz. Yeteri kadar kaynak görmedim. yeni derleyici ekleme seçeneği yok.

Ndk ya java için jni arayüzü yazacaksınız yada Android Native Activity kullanacaksınız ama hemen öğrenilecek gibi değil.

UnrealEngine gayet güzel ama ücretsiz değil. Ayrıca çizimle işi olmayanlar için gereksiz işler çıkartıyor. Editörü çok güzel ama çoğu bilgisayar için ağır. Derleme süresi çok uzun. Zaten yapım amacı oyun yani bu sırada hlsl ve glsl gibi basit bir uygulamada gerekmeyen verileri de derliyor.

B4x(basic) ilk olarak rad studio araçlarını kullanıyor. Hiç kullanmadım ama denemek isteyene lafım yok. Yeteri kadar kaynak görmedim.

QT c++ var olduğundan beri var. nokia ile geldi. Tüm platformlara native uygulama geliştirme. çok insan pyqt olarak tanıyor artık(maalesef). Hemen hemen tüm derleyicilerle çalışıyor. c++ standardı derleyiciye bağlı kalıyor böylece. Android için apkbuilder ile dex kodunu derliyor yani gizli jni var yani java kodu derlemiyor. Uygulamalar cmake ve qmake ile derlenebiliyor. qmake cmake bilenlere göre yabancı gelebilir ama öğrenmesi çok kolay. QNX, embedded linux desteği olması çok iyi. Write once compile everywhere(WOCE) ile javaya benziyor ama her platforma native kod üretiyor. 5.10 ile Vulkan desteği geliyor. Şimdiden beta versiyonu yayınlandı. 5.9 versiyonu için uzun dönem desteği verdi.
En büyük sorunu her platform için kendi ui görünümünü vermeyebiliyor. Tabi bu size bağlı.

Qt ile Android programını opencv3 ile yapmak isterseniz. Projem için bir setup dosyası yazdım.
Not: android{...} yüzünden windows modunda windows için derlemez. çünkü include ve lib sadece android için yazılmıştır. Opencv içinde olan tüm lib dosyaları eklenmiştir. O yüzden bu kadar uzundur.
Tavsiye: Ndk paketini güncel tutun. Sdk, ant, ndk yüklemeyi unutmayın.

not: Qt ile kameradan resim çektiğimde başarılı olamamıştım. Resim düzgün çıkmıyordu. Sanırım sorunu buldum. Image Codec kullanmadığım için resimler ve videolar çözülemiyordu. Benim hatam. Linkte çözümü var.
https://www.youtube.com/watch?v=9oQZPqi47Y8

Qmake dosyası:

QT       += core gui

greaterThan(QT_MAJOR_VERSION, 4): QT += widgets

TARGET = android_deploy
TEMPLATE = app
DEFINES += QT_DEPRECATED_WARNINGS

SOURCES += \
        main.cpp \
        mainwindow.cpp

HEADERS += \
        mainwindow.h

FORMS += \
        mainwindow.ui

CONFIG += mobility
MOBILITY = 
# android için android{...} win32 için win32{...} unix için unix{...}
android{
ANDROID_EXTRA_LIBS =

ANDROID_OPENCV = D:/opencv/OpenCV33-android-sdk/sdk/native
LIBS +=
ANDROID_OPENCV_LIBS = $$ANDROID_OPENCV/libs
ANDROID_OPENCV_LIBS_x86 = $$ANDROID_OPENCV_LIBS/x86
ANDROID_OPENCV_LIBS_armeabi_v7a = $$ANDROID_OPENCV_LIBS/armeabi-v7a
ANDROID_OPENCV_LIBS_x86_64 = $$ANDROID_OPENCV_LIBS/x86_64
ANDROID_OPENCV_LIBS_armeabi_v7a_arm64-v8a = $$ANDROID_OPENCV_LIBS/arm64-v8a
ANDROID_OPENCV_LIBS_armeabi = $$ANDROID_OPENCV_LIBS/armeabi
ANDROID_OPENCV_LIBS_mips = $$ANDROID_OPENCV_LIBS/mips
ANDROID_OPENCV_LIBS_mips64 = $$ANDROID_OPENCV_LIBS/mips64

ANDROID_OPENCV_3RDPARTY_LIBS = $$ANDROID_OPENCV/3rdparty/libs
ANDROID_OPENCV_3RDPARTY_LIBS_x86 = $$ANDROID_OPENCV_3RDPARTY_LIBS/x86
ANDROID_OPENCV_3RDPARTY_LIBS_armeabi_v7a = $$ANDROID_OPENCV_3RDPARTY_LIBS/armeabi-v7a
ANDROID_OPENCV_3RDPARTY_LIBS_x86_64 = $$ANDROID_OPENCV_3RDPARTY_LIBS/x86_64
ANDROID_OPENCV_3RDPARTY_LIBS_arm64-v8a = $$ANDROID_OPENCV_3RDPARTY_LIBS/arm64-v8a
ANDROID_OPENCV_3RDPARTY_LIBS_armeabi = $$ANDROID_OPENCV_3RDPARTY_LIBS/armeabi
ANDROID_OPENCV_3RDPARTY_LIBS_mips = $$ANDROID_OPENCV_3RDPARTY_LIBS/mips
ANDROID_OPENCV_3RDPARTY_LIBS_mips64 = $$ANDROID_OPENCV_3RDPARTY_LIBS/mips64
    equals(ANDROID_TARGET_ARCH, x86) {
    LIBS+= \
            -L$$ANDROID_OPENCV_LIBS_x86
                -llibopencv_calib3d.a
                -llibopencv_flann.a
                -llibopencv_objdetect.a
                -llibopencv_contrib.a
                -llibopencv_video.a
                -llibopencv_ml.a
                -llibopencv_legacy.a
                -llibopencv_highgui.a
                -llibopencv_ts.a
                -llibopencv_imgproc.a
                -llibopencv_core.a
                -llibopencv_androidcamera.a
                -llibopencv_features2d.a

            -L$$ANDROID_OPENCV_3RDPARTY_LIBS_x86
                -lliblibjpeg.a
                -lliblibpng.a
                -lliblibtiff.a
                -lliblibjasper.a
                -llibtbb.a
        }
    equals(ANDROID_TARGET_ARCH, armeabi-v7a) {
    LIBS+= \
            -L$$ANDROID_OPENCV_LIBS_armeabi_v7a
                -llibopencv_calib3d.a
                -llibopencv_flann.a
                -llibopencv_objdetect.a
                -llibopencv_contrib.a
                -llibopencv_video.a
                -llibopencv_ml.a
                -llibopencv_legacy.a
                -llibopencv_highgui.a
                -llibopencv_ts.a
                -llibopencv_imgproc.a
                -llibopencv_core.a
                -llibopencv_androidcamera.a
                -llibopencv_features2d.a

            -L$$ANDROID_OPENCV_3RDPARTY_LIBS_armeabi_v7a
                -lliblibjpeg.a
                -lliblibpng.a
                -lliblibtiff.a
                -lliblibjasper.a
                -llibtbb.a
        }
    equals(ANDROID_TARGET_ARCH, mips) {
    LIBS+= \
            $$ANDROID_OPENCV_LIBS_mips
                -llibopencv_calib3d.a
                -llibopencv_flann.a
                -llibopencv_objdetect.a
                -llibopencv_contrib.a
                -llibopencv_video.a
                -llibopencv_ml.a
                -llibopencv_legacy.a
                -llibopencv_highgui.a
                -llibopencv_ts.a
                -llibopencv_imgproc.a
                -llibopencv_core.a
                -llibopencv_androidcamera.a
                -llibopencv_features2d.a

            -L$$ANDROID_OPENCV_3RDPARTY_LIBS_mips
                -lliblibjpeg.a
                -lliblibpng.a
                -lliblibtiff.a
                -lliblibjasper.a
                -llibtbb.a
        }equals(ANDROID_TARGET_ARCH, mips64) {
    LIBS+= \
            -L$$ANDROID_OPENCV_LIBS_mips64
                -llibopencv_calib3d.a
                -llibopencv_flann.a
                -llibopencv_objdetect.a
                -llibopencv_contrib.a
                -llibopencv_video.a
                -llibopencv_ml.a
                -llibopencv_legacy.a
                -llibopencv_highgui.a
                -llibopencv_ts.a
                -llibopencv_imgproc.a
                -llibopencv_core.a
                -llibopencv_androidcamera.a
                -llibopencv_features2d.a

            -L$$ANDROID_OPENCV_3RDPARTY_LIBS_mips64
                -lliblibjpeg.a
                -lliblibpng.a
                -lliblibtiff.a
                -lliblibjasper.a
                -llibtbb.a
        }
    equals(ANDROID_TARGET_ARCH, arm64-v8a) {
    LIBS+= \
            -L$$ANDROID_OPENCV_LIBS_arm64-v8a
                -llibopencv_calib3d.a
                -llibopencv_flann.a
                -llibopencv_objdetect.a
                -llibopencv_contrib.a
                -llibopencv_video.a
                -llibopencv_ml.a
                -llibopencv_legacy.a
                -llibopencv_highgui.a
                -llibopencv_ts.a
                -llibopencv_imgproc.a
                -llibopencv_core.a
                -llibopencv_androidcamera.a
                -llibopencv_features2d.a

            -L$$ANDROID_OPENCV_3RDPARTY_LIBS_arm64-v8a
                -lliblibjpeg.a
                -lliblibpng.a
                -lliblibtiff.a
                -lliblibjasper.a
                -llibtbb.a
        }
    equals(ANDROID_TARGET_ARCH, armeabi) {
    LIBS+= \
            -L$$ANDROID_OPENCV_LIBS_armeabi
                -llibopencv_calib3d.a
                -llibopencv_flann.a
                -llibopencv_objdetect.a
                -llibopencv_contrib.a
                -llibopencv_video.a
                -llibopencv_ml.a
                -llibopencv_legacy.a
                -llibopencv_highgui.a
                -llibopencv_ts.a
                -llibopencv_imgproc.a
                -llibopencv_core.a
                -llibopencv_androidcamera.a
                -llibopencv_features2d.a

            -L$$ANDROID_OPENCV_3RDPARTY_LIBS_armeabi
                -lliblibjpeg.a
                -lliblibpng.a
                -lliblibtiff.a
                -lliblibjasper.a
                -llibtbb.a
        }
    equals(ANDROID_TARGET_ARCH, x86_64) {
    LIBS+= \
            -L$$ANDROID_OPENCV_LIBS_x86_64
                -llibopencv_calib3d.a
                -llibopencv_flann.a
                -llibopencv_objdetect.a
                -llibopencv_contrib.a
                -llibopencv_video.a
                -llibopencv_ml.a
                -llibopencv_legacy.a
                -llibopencv_highgui.a
                -llibopencv_ts.a
                -llibopencv_imgproc.a
                -llibopencv_core.a
                -llibopencv_androidcamera.a
                -llibopencv_features2d.a

            -L$$ANDROID_OPENCV_3RDPARTY_LIBS_x86_64
                -lliblibjpeg.a
                -lliblibpng.a
                -lliblibtiff.a
                -lliblibjasper.a
                -llibtbb.a
        }

INCLUDEPATH += \
$ANDROID_OPENCV/jni/include/opencv/
INCLUDEPATH += \
$ANDROID_OPENCV/jni/include/opencv2/
INCLUDEPATH += \
$$ANDROID_OPENCV/jni/include/
}


Yorumlar

Popüler Yayınlar