以前に「ProcessingのvideoライブラリがmacOS Catalinaで使えない問題への対応方法」という投稿を行いました。
その後、macOSの最新版がBig Surになったり、Processingのvideoライブラリのバージョンが1から2になるなどの変化が生じたため対応方法も変化しています。
さらにはWindowsでもカメラ映像が出ない症例が出てきました。
以下、対応方法です。
■Windowsの場合(Processingのバージョンは3.5.4、videoのバージョンは2)
videoライブラリのバージョンが1から2になったことにより問題が生じているようです。
カメラ名を指定するプログラムは動かないようです。カメラリストを取得するプログラムでは動くことがあるようですが、リストの取得に失敗することがあるようで、何回もカメラリストを取得する必要があるようです。以下のプログラムを試してみてください。
import processing.video.*;
Capture capImg;
void setup() {
size(640, 480);
String[] cameras = Capture.list();
// add
while (cameras.length == 0) {
cameras = Capture.list();
}
//
println("Available cameras:");
for (int i = 0; i < cameras.length; i++) {
println(i, cameras[i]);
}
capImg = new Capture(this, width, height, cameras[0]);
//capImg = new Capture(this, width, height);
capImg.start();
frameRate(30);
}
void captureEvent(Capture capImg) {
capImg.read();
}
void draw() {
image(capImg, 0, 0);
}
■Macの場合(Processingのバージョンは3.5.4、videoのバージョンは2)
Processingのvideoライブラリのバージョンが1から2になったことにより、面倒な操作が不要になり基本的にProcessingからライブラリをインストールするだけで良くなったようです。
しかしながら、いざ実行すると
Could not run the sketch.
というエラーが生じるケースがあります。
ProcessingがMacのカメラにアクセスするのを許可されてない場合があり以下の対応が必要です。
以下の2つの方法のいずれかで動いたという生徒からの報告があります。
まずは方法1を試してみると良いかと思います。
●Processingがカメラにアクセスするのを許可する方法1
以下の手順でカメラ映像が出る可能性があります。
1.ブラウザから以下のURLにアクセスしてください。
https://github.com/processing/processing/releases/download/processing-0269-3.5.3/processing-3.5.3-macosx.zip
Processingのバージョン3.5.3のダウンロードが始まります。
ダウンロードが終わったら、ダブルクリックして展開します。
そのままこのProcessingを起動します。
2.カメラ映像のプログラムを読み込んでください。
プログラムを実行します。

このような警告が出た場合は「Don’t Reopen」をクリックします。
しばらく待ちます。

このように
「”Processing”からカメラにアクセスしようとしています。」
というアラートが出たらOKをクリックします。
いったんプログラムを停止します。
3.再度プログラムを実行するとカメラ映像が出るはずです。
Processingのバージョン3.5.4でもカメラ映像が出るようになったはずです。
なお、全画面表示になった場合は、
Processingの環境設定画面を開き、保存ボタンを押すとsize()指定が有効になります。
テストコードは
以下の方法2に記載したコードを使用してみてください。
●Processingがカメラにアクセスするのを許可する方法2
Finderでアプリケーションに行く。
Processing.appを右クリックして、パッケージの内容を表示する。
Contents/MacOSの中にあるProcessingをダブルクリックする。
開いたprocessingに以下のカメラのテストコードをコピーペーストする。
これを実行して、processingにカメラへのアクセスを許可するか聞いてきたら許可する。
アクセスを許可するか聞いてこなければこの方法ではダメです。
なおカメラのテストコードではカメラ名を
“FaceTime HDカメラ(内蔵)”
などのように直接指定しても良いが、機種により微妙にカメラ名が異なるため動かないことがあります。
そのため、以下のようにカメラリストを作成して0番目のカメラを指定するのが良いです。
import processing.video.*;
Capture capImg;
void setup() {
size(640, 360);
String[] cameras = Capture.list();
println("Available cameras:");
for (int i = 0; i < cameras.length; i++) {
println(i, cameras[i]);
}
capImg = new Capture(this, width, height, cameras[0]);
capImg.start();
}
void captureEvent(Capture capImg) {
capImg.read();
}
void draw() {
image(capImg, 0, 0);
}
以下の動画で方法2を「ライブラリをインストールして実行してみたけれど動かない」というところから詳しく説明していますので、参考にしてください。

