2
6

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

Processingで外付けWebカメラを認識する(macOS)

Last updated at Posted at 2019-11-03

#概要
Processingで外付けのWebカメラから映像を取得するのに手こずった時のメモです。
macbookの内臓カメラではなく、どうしても外付けを使わなくてはならなかったのですが、macと外付けのWebカメラはどうやら相性がよろしくないようです。案の定カメラをUSBポートにそのまま差し込んでも認識しませんでした。今のところ最善と思われる解決方法として、CamTwistを使う方法を解説します。

#開発環境
macOS
Processing3
logicool C270n
CamTwist 3.4.3

#Cam Twistをダウンロードする
CamTwistのサイトからソフトをダウンロードします。インストーラーの指示通りインストールしてください。
http://camtwiststudio.com/

インストールできたら、Video SourcesでWebcamを選択します。するとSettingsでCameraが選択できます。ここに接続したWebカメラが表示されるはずです。接続しているカメラを選択してください。
#スクリーンショット 2019-11-03 17.15.18.png

これでCam Twistでの設定は終わりです。(これでmacは接続したWebカメラを認識したので、FaceTimeやQuickTime Playerでも外付けWebカメラを使用できるようになっています。)

この時Cam Twistを終了しないでください。Processingを実行している間中ずっと立ち上げたままにしておきます。

#Processingで外付けWebカメラの映像を読み込んでみる
Processingのサンプルを使ってみます。[ファイル]->[サンプル] ライブラリ/Video/Capture/GettingStartedCaptureでサンプルコードを開きます。
一度これを実行してください。
しばらくするとコンソールに

[0] "name=FaceTime HD Camera,size=1280x720,fps=30"
(略)
[24] "name=USB Camera,size=1280x960,fps=30"
[25] "name=USB Camera,size=1280x960,fps=15"
[26] "name=USB Camera,size=1280x960,fps=1"
(略)
[47] "name=CamTwist,size=80x60,fps=1"

というような感じで、ずら〜っと認識したカメラのリストが出力されます。
これはString[] cameras = Capture.list();の部分で取得しています。

今回の場合でいうとUSBカメラの[24]とか[25]、[26]を使えば良いので、

cam = new Capture(this, cameras[0]);

cam = new Capture(this, cameras[24]);

に書き換えます。この数字はコンソールを読んで、接続しているカメラに適宜合わせてください。

/**
 * Getting Started with Capture.
 * 
 * Reading and displaying an image from an attached Capture device. 
 */

import processing.video.*;

Capture cam;

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

  String[] cameras = Capture.list();

  if (cameras == null) {
    println("Failed to retrieve the list of available cameras, will try the default...");
    cam = new Capture(this, 640, 480);
  } if (cameras.length == 0) {
    println("There are no cameras available for capture.");
    exit();
  } else {
    println("Available cameras:");
    printArray(cameras);

    // The camera can be initialized directly using an element
    // from the array returned by list():
    cam = new Capture(this, cameras[24]); //書き換え部分
    // Or, the settings can be defined based on the text in the list
    //cam = new Capture(this, 640, 480, "Built-in iSight", 30);
    
    // Start capturing the images from the camera
    cam.start();
  }
}

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

これを実行すると、外付けしたWebカメラを認識して映像が表示されるのではないでしょうか。

何かありましたらコメントいただけると幸いです。

#参考
https://dandashokai.com/7588
http://kovayashi.blog120.fc2.com/blog-entry-320.html

2
6
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
6

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?