flutter 接入OpenCV遇到的問題

官方給的openCv工程需要自身下載,簡單處理後,我建議是以module的形式import進Android工程,下面說說遇到的問題。
另外,若調用Android 底層的東西時,最後在這裏建議選擇Open for Editing in Android Studio

  1. 一直提示需要安裝openCv Manager
    切換到Android studio運行試下,先運行起來是沒問題的。
  2. couldn’t find libflutter.so
    在加入jniLibs 時,總是報
  Process: com.smart.flutteracesmart, PID: 31882
    java.lang.UnsatisfiedLinkError: dalvik.system.PathClassLoader[DexPathList[[zip file "/data/app/com.smart.flutteracesmart-1/base.apk"],nativeLibraryDirectories=[/data/app/com.smart.flutteracesmart-1/lib/arm64, /data/app/com.smart.flutteracesmart-1/base.apk!/lib/arm64-v8a, /system/lib64, /vendor/lib64]]] couldn't find "libflutter.so"

首先,在該文件夾下只留armeabi-v7a
然後,按圖片裏進行配置
在這裏插入圖片描述
但是有個問題,就是現在armeab64成爲了手機的主流,所以這是需要解決的矛盾…

  1. OpenCV error: Cannot load info library for OpenCV
    看下這個log日誌打印的位置是:
   try
        {
            System.loadLibrary("opencv_info");
            libs = getLibraryList();
        }
        catch(UnsatisfiedLinkError e)
        {
            Log.e(TAG, "OpenCV error: Cannot load info library for OpenCV");
        }

如果你的jni包已經準備完備,沒有的話可以到這裏下載;不要相信別人說的是沒有opencv_info;已經把資源放到工程裏了,只是說沒有被調用;建議,以module或者jar包的形式導入工程裏,那樣工程運行時會一併進行初始化。

  1. 打不開相機
    提示不支持相機或者沒有相機,是因爲沒有給相關權限,打開手機:設置=》權限管理=》自己的app,手動給予權限,查看效果;另外,可以主動添加權限管理插件:simple_permissions
  2. 相機打開後,畫面旋轉九十度
    有的說是AndroidManifest.xml文件中,爲相機activity添加屏幕屬性
    android:screenOrientation=" portrait"
    對於我來說,是沒卵用,所以選擇了下面這個方法,實現全屏相機:
找到deliverAndDrawFrame方法,並作修改
 protected void deliverAndDrawFrame(CvCameraViewFrame frame) {
        Mat modified;
        if (mListener != null) {
            modified = mListener.onCameraFrame(frame);
        } else {
            modified = frame.rgba();
        }
        boolean bmpValid = true;
        if (modified != null) {
            try {
                Utils.matToBitmap(modified, mCacheBitmap);
            } catch (Exception e) {
                Log.e(TAG, "Mat type: " + modified);
                Log.e(TAG, "Bitmap type: " + mCacheBitmap.getWidth() + "*" + mCacheBitmap.getHeight());
                Log.e(TAG, "Utils.matToBitmap() throws an exception: " + e.getMessage());
                bmpValid = false;
            }
        }
        if (bmpValid && mCacheBitmap != null) {
            Canvas canvas = getHolder().lockCanvas();
            if (canvas != null) {
                canvas.drawColor(0, android.graphics.PorterDuff.Mode.CLEAR);
                if (BuildConfig.DEBUG)
                    Log.d(TAG, "mStretch value: " + mScale);           
                    // ===修改這裏解決預覽旋轉90度問題
                canvas.rotate(90, 0, 0);
                float scale = canvas.getWidth() / (float) mCacheBitmap.getHeight();
                float scale2 = canvas.getHeight() / (float) mCacheBitmap.getWidth();
                if (scale2 > scale) {
                    scale = scale2;
                }
                if (scale != 0) {
                    canvas.scale(scale, scale, 0, 0);
                }
                canvas.drawBitmap(mCacheBitmap, 0, -mCacheBitmap.getHeight(), null);            
                // ===結束這裏解決預覽旋轉90度問題end

                if (mFpsMeter != null) {
                    mFpsMeter.measure();
                    mFpsMeter.draw(canvas, 20, 30);
                }
                getHolder().unlockCanvasAndPost(canvas);
            }

        }
    }
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章