【URI to Path】VideoCaptureで動画を読み込む。【Android】【Java】

この記事では、Android(Java開発)にてOpenCVのVideoCaptureを使い、デバイスのストレージから動画を読み込む手順をメモしました。自分でつまづいたところを中心に、方法をまとめました。

OpenCVやAndroidStudioの環境設定については、今回は完了してる前提で説明します。

要点

  • UriからFilePathへの変換(ここがむずかった)
  • OpenCV 3.4.16ではVideoCaptureできなかった(4.5.4を使用したらできた)
  • パーミッションの設定

URIからFilePathへの変換

これについては、細かいことはわかりませんが試行錯誤していたらできたので
ソースコードを載せておきます。あくまでも、動画ファイルを読み込む場合です。
主にここを参考にしました:https://stackoverflow.com/questions/3401579/get-filename-and-path-from-uri-from-mediastore

private String getPictPath(Uri uri) {
        String wholeId = DocumentsContract.getDocumentId(uri);
        String id = wholeId.split(":")[1];
        Log.d("id",id);
        ContentResolver cr = getContentResolver();
        String[] columns = {
                MediaStore.Images.Media.DATA
        };
        String selection = null;
        String[] selectionArgs = null;
        selection = "_id=?";
        Cursor cursor = cr.query(
                MediaStore.Video.Media.EXTERNAL_CONTENT_URI,
                columns, selection, new String[]{id}, null);
        cursor.moveToFirst();
        String path = cursor.getString(
                cursor.getColumnIndexOrThrow(columns[0]));
        cursor.close();
        return path;
    }

OpenCVのバージョン

Pathが手に入っても、なぜかVideoCaptureが動作しませんでした。
OpenCVのバージョンを”3.4.16″から”4.5.4“に変更したら動きました。

Permissionの設定

Permissionの設定もしなければいけません。

AndroidManifest.xmlに以下のコードを追加。

 <uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />

さらに、MainActivity.javaのonCreate関数内で以下のコードを追加

        ActivityCompat.requestPermissions(MainActivity.this,
                new String[]{Manifest.permission.READ_EXTERNAL_STORAGE},1);

以上

あとは、
VideoCapture videoCapture = new VideoCapture(path);
で読み込みできます。

自分はこれで動きました。自分でもなぜそうするのかがわかっていない部分もあるので
詳しいことはわかりません。

上記内容は色々調べてもパッとわかるような資料がなかったので、今回記事にしました。

この記事が誰かの役に立つことを祈っております。

タイトルとURLをコピーしました