processing:catalinaでvideoライブラリ

macOS Catalina以降のvideoライブラリ利用

macOSはCatalina(10.15)以降は32bit動作のアプリケーション及びライブラリが動作しなくなりました。手元の環境(MacOS 10.15.3)では映像ファイルの再生はできるが,カメラを開くことができない症状でした.特に以下のエラーの場合は64bit動作との兼ね合いの可能性が高いです.

libc++abi.dylib: terminating with uncaught exception of type NSException Could not run the sketch (Target VM failed to initialize). Make sure that you haven't set the maximum available memory too high. For more information, read revisions.txt and Help → Troubleshooting.

それに伴いProcessingのvideoライブラリを動作させるためには、少し工夫が必要になりました。Processingのjavaモードでどうしてもvideoライブラリでカメラを動作させないと行けないんだという方に向けた内容です。このような状況では授業でvideoライブラリを使うのは割けた方がいいです。どうしても使いたいのなら p5js で授業をしたほうがよいです。以下、動作までのまとめ情報。

同様の問題はすでにgithub上で議論されています。以下がそのissueスレッドです。

いろいろ議論されているので、どこを同対応すればよいか基本的には全部読んだ方がよいです。私の環境(macOS 10.15, Processing 3.5.4)では下記の対応をすることで、動作を確認しました。

ポイントとしては

  • video ライブラリを64bit 対応のbeta版に入れ替える
  • macOS側のセキュリティ設定を行う(←これが厄介でした)

の2つをそれぞれ対応する。というだけなのですが、少しトリッキーですね。以下に解決法を日本語で手短にまとめておきます。

まずは、書類/Processing/Libraries/video のフォルダを [[https://github.com/processing/processing-video/releases/tag/r6-v2.0-beta4]]のベータ最新版と入れ替える。

ちなみにmacOSでは日本語環境だと、書類というフォルダ名ですが、実体はDocumentsというフォルダ名であることを注意してください。terminalで利用するときは Documentsとなります。

次にターミナルで~/Documents/processing/libraries/video/library/macosx に行き、次のコマンドを実行します。

$ xattr -p com.apple.quarantine libavcodec.58.35.100.dylib

すると 00c1;5dc1bfaa;Chrome;78F18F7D-3F71-4E55-8D58-BAB946AB4707 という文字列が帰ってきます。これは実行環境によって微妙に変わるようですが、最初の4文字が00c1でない場合は、そこだけ00c1に変更してください。その後下記をターミナルで実行しますが、その際 STRING 部分は上記の文字列で読み替えてください。

$ xattr -w com.apple.quarantine "STRING" *.dylib
$ cd gstreamer-1.0
$ xattr -w com.apple.quarantine "STRING" *.dylib

ここまででライブラリの準備は終わりです。では次にmacOS側のセキュリティ設定を修正します。ひょっとすると現状までの準備で動作する人がいるかも知れません。その人はすでに過去Processingを利用していて、カメラのセキュリティ設定が適切になされている場合になります。私の環境もそうでしたが、ここまでの修正だけでは実行時にエラーがでてしまいました。それはmacOS側でProcessingがカメラを利用することを許可していないのが原因です。そこであとは「設定」→「セキュリティとプライバシー」→「プライバシー」→「カメラ」をクリックすると出てくるカメラ利用許可一覧にProcessingが入ればよいです。ただし3.5.4を利用してカメラ動作のサンプルを実行しても、「カメラの使用を許可しますか?」ダイアログがでることなく、そのままプログラムが終了してしまいます。通常はこのダイアログボックスにユーザが許可をだすことで、macOSのプライバシー設定に自動で反映されるのですが、そこがProcessingとmacOS側で連携が取れていません。

ただしこれはProcessingをGUI操作で実行した場合に起こるようで、terminalから直接Processingを起動すると、ちゃんとダイアログボックスが表示されます。つまり手順としては、

  1. Processingを一旦終了
  2. terminal で Processing/Contents/MacOS に移動して、次のようにProcessingを実行する。
    1. $ ./Processing
  3. 新規スケッチファイルの中に下記のプログラムをコピーして実行する
import processing.video.*;

Capture cam;

void setup() {
 size(640, 480);

 String[] cameras = Capture.list();
 
 if (cameras.length == 0) {
   println("There are no cameras available for capture.");
   exit();
 } else {
   println("Available cameras:");
   for (int i = 0; i < cameras.length; i++) {
     println(cameras[i]);
   }
   
   // The camera can be initialized directly using an 
   // element from the array returned by list():
   cam = new Capture(this, 320,240, cameras[0] );
   cam.start();     
 }      
}

void draw() {
 if (cam.available() == true) {
   cam.read();
 }
 image(cam, 0, 0);
 // The following does the same, and is faster when just drawing the image
 // without any additional resizing, transformations, or tint.
 //set(0, 0, cam);
}

以上で、カメラの許可ダイアログが表示されると思います。これを許可してあげると自動でセキュリティ設定にもProcessingが追加されるのを確認してください。以降は通常のGUI操作でProcessingを起動しても問題はありません。

以上。

  • processing/catalinaでvideoライブラリ.txt
  • 最終更新: 2020/06/05 11:06
  • by baba