How to get more control of external cameras?

Hey all!

Ok, my question already was made in the processing forum in 2007 but nobody gave a concrete answer, so I'll repost it here but with some minor changes.

1) Is it possible to trigger a camera's shutter from processing? via USB?

2) Most cameras automatically go into "memory" mode when connected to a computer via USB (i.e. camera's memory mounted as a drive). Is it possible to control the camera mode so that one could switch between "camera" and "memory" modes?

Basically, I'm using a digital SLR camera to take hi-resolution long exposure photographs, and need a way to BOTH trigger shots, and move image files from the camera's memory to a hard drive.

I'm hoping to avoid video capture altogether since I don't want to deal with mocking up a long exposure-like effect. Not to mention there would probably be image resolution limitations(?).

Has anyone had success doing something similar? Are there any specific cameras out there known to be easy to work with remotely?

Ok, I'm looking for the same thing: how to control a digital SLR to take long-exposure photographs.

However, I would be satisfied if I could do this just with the normal built-in camera or any external usb camera. My need is to take long exposure photographs and save that in specific files in the hard drive.

Well, any guidance would be wonderful! (:

Thanks for your attention!

Peace! Sandro

Answers

  • Well, I searched a lot and didn't find anything that could help me control the external cameras, however, I made a code that simulates this light painting effect!

    You can check it out:

    import processing.video.*;
    
    Capture cam;
    PImage preImg;
    PImage camImg;
    
    void setup() {
      size(1280, 720);
      frameRate(60);
    
      preImg = createImage(width, height, RGB);  
      camImg = createImage(width, height, RGB);  
    
      String[] cameras = Capture.list();
    
      if (cameras.length == 0) {
        println("There are no cameras available for capture.");
        exit();
      } else {
        cam = new Capture(this, cameras[0]);
        cam.start();     
    
      }      
    }
    
    void draw() {
      if (cam.available() == true) {
        cam.read();
        cam.loadPixels();
        for (int i=0; i<width*height; i++){
           preImg.pixels[i] = cam.pixels[i];
        }
      }
      // Blend next frame with previous with LIGHTEST mode
      camImg.blend(preImg, 0, 0, width, height, 0, 0, width, height, LIGHTEST);
      image(camImg,0,0);
      //tint(255, 5);  // Apply transparency without changing color
    
    }
    
  • Hi, I think these two other threads in the new forum are relevant to your question:

    http://forum.processing.org/two/discussion/comment/2864

    http://forum.processing.org/two/discussion/968

    because a problem people are repeatedly facing with the built-in video library is how to access capture devices other than webcams and the like. Unfortunately, the solution is not easy at this moment because it would require a major update of the video library, and I don't have much time to work on it right now. Maybe javacv is an option since it wraps several libraries for video capture. A quick search online suggests that accessing an SLR camera directly through opencv is possible (this this for example), so perhaps the new processing-opencv library could allow you to do that through Processing, although I'm not sure.

Sign In or Register to comment.