Building your own 3D scanner out of off-the-shelf parts

So you have an animation and simulation project, and want to scan people to get their high-resolution 3D meshes. At that point you have wide variety of different options based on different capture technologies, big bulky machines, hand-held devices and scanners that can take quite a while to obtain a scan. So what do you do when you don’t necessarily have a lot of permanent space, when you ideally want to obtain a scan in a single shot, and you want to do all that on a budget? Well, you build your own solution of course.

You visit your local camera vendor, and empty their basket of 64 Canon Powershot A1400 cameras, which should suffice to build 8 portable 3D scanning poles. Throw in a significant amount of USB cables, add some USB hubs, grab some wood and hardware from your local DIY store, add some bright LED strip for lighting, and you have all the ingredients necessary to build your own scanner.

 

Being the efficient people that we are, the idea of having to charge and replace the batteries for 64 individual cameras at each session did not sound like the most effective solution. So external power it is. Unfortunately the official adapter comes at a cost. And with us not being all that patient when it comes to seeing results of our labour, an ordering time of several weeks made us wonder “If we’re building the whole thing ourselves, surely we can make our own external power supplies as well”. And as soon as we have such thoughts, a “battery” assembly line springs to life, wiring up the wooden batteries and soldering the power-supply connectors.

The construction:

3D body scanner based on 64 canon A1400

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

On the software side the Canon Hack Development Kit (CHDK) allows us to control all 64 cameras using custom scripts. With all cameras pretty much synchronized, we don’t have to worry too much about minor movements of the scanned subject, as long as the shutter time is fairly short. The actual capture process has completed in the blink of an eye. Processing the captured images into a 3D mesh and a clean texture uses Agisoft PhotoScan software, and requires only minimal manual tweaks. For animation some additional cleanup and remeshing might be necessary in other software, but the raw results obtained are already very detailed and usable.

And there you have it. Eight very portable and storable scanning poles, allowing us to capture bodies or objects at a sufficiently high resolution and in a short time.

The first results:

 

FacebookTwitterLinkedInshare

Tags: , , , ,

  1. Alex’s avatar

    Looks great! i wonder – have you tried doing animation with this rig, shooting video with each camera?

    Reply

  2. Haellmigk Silvia’s avatar

    I appreciated seeing every member of the team working on the common projet.
    Very good demonstration and explanation.
    Keep on.
    I wish you a lot of success.
    Silvia

    Reply

    1. Caecilia’s avatar

      Thank you! If you want to be scanned one day… let us know!

      Reply

    2. Ali’s avatar

      What’s the polycount for full body? Does the scanner output require cleanup?

      Would be very interested in a longer write-up!

      Reply

    3. eytan’s avatar

      Hello, Great job!

      I got some questions to you guys, I hope you can share some data as I want to build the same thing.

      1. What is the height of the poles? is it equal between all poles?
      2, Does all cameras on all poles located on the pole at the same height? if not, can you please share the heights?
      3. Do I need to install LED Light on each pole? Can you be more specific on what type of light do I need to purchase?

      Would appreciate if you can asist.

      Thanks,
      Eytan

      Reply

      1. Bart Kevelham’s avatar

        1. The poles are (including the base) a bit over 2 meters high.
        2. The cameras are equally spaced over the length of the pole and each pole is the same.
        3. We have a single LED strip on each pole over the full length. Ideally you would most likely want something a bit more diffuse, but it works as is.

        Reply

      2. Martin Spriggs’s avatar

        I was wondering how you actually get the pictures out of the cameras. Are you able to pull them across to a central location over USB? If you do does that not interfere with the CHDK USB power function that I assume you use to trigger the cameras?

        Sorry about all the questions but I have just order a bunch of these cameras to try and put together a similar setup :)

        Reply

      3. Matt’s avatar

        This is great. I’ve been working on something very similar with Canon A1200 cameras. I’d love to share ideas over e-mail as I have the capture and image transfer really streamlined and wouldn’t mind sharing my scripts. It’s also nice just knowing like minded people. My end game is to use my Oculus Rift to view these scans, which I see you guys are dabbling with too.

        My current workflow is to use the ptpcam tool to first set the camera’s internal clocks using memory register d034 (not sure what A1400 uses but it’s easy to hunt around for it). Then I have a chdk script to focus on 5 volt up on the USB port and if the voltage drops within 10 seconds the shutter snaps (it’s on a 5ms poll, so the shutters are reasonably in sync). Since my clocks are synchronized I can take many sets of images in a session and not worry about getting them mixed up. If I leave the 5 volt up for more than 10 seconds I have the cameras go into file transfer mode and I have some Perl scripts to download the files into timestamped set folders. I have scripts to wipe the cameras clean, shutdown, etc. Basically a good workflow was what I could work on with limited cameras. The only thing I am not sure of is how many cameras my PC can drive. I currently only have 7 but there’s really no reason I couldn’t just transfer the images in batches I guess (10 at a time or whatever).

        I’m really curious to know if you’re using the same technique as me or if you have something better. Your idea for cameras on pole modules is great. I was making 3 foot wide multi tiered bars. I like yours better because you could theoretically add more poles to image a bigger subject.

        Something else that you may want to consider is mounting the cameras in portrait mode, since I found that landscape wasted a lot of the sensor.

        Best regards,
        Matt

        Reply

        1. jeff’s avatar

          Hi

          I would appreciate if we can chat little regarding your setup , I could use some advice
          my skype : noamsheffi

          Thx

          Reply

        2. Michael’s avatar

          Hey Matt – I would like to see your set up and scripts if you don’t mind. I find this very interesting and would like to do a similar set up. email – ecwarrior_13@yahoo.com

          Reply

        3. Sunny Ho’s avatar

          Hi Matt,

          I am targeting to make stereo cam.
          Would you share your setup for the usb voltage and the script to me?

          btw
          how many camera did you used finally?

          my email: hksiusun@gmail.com

          Sunny

          Reply

        4. Peter’s avatar

          Great scanner
          How do you save the photos from each camera?
          Isn’t that a problem.
          I didn’t find a solution.

          Reg

          Peter

          Reply

        5. Steven Van Mulders’s avatar

          Great work!

          Is there any chance of releasing the chdk script to get it working.
          Would be very interested in this.

          Reply

        6. David B Silverman’s avatar

          Awesome setup guys!

          I spotted this in my research to build a much smaller desktop rig using A1400s to capture models for our game Rustclad. Any chance you’d be willing to share the scripts you created?

          Reply

        7. Mphx’s avatar

          Hey guys , i am gonna set up a similar rig and i was wondering if its possible to share the chdk scripts so i can have a starting point ..
          Thanx

          Reply

        8. Daveed’s avatar

          You posted a requested for information on the CHDK forum and in that thread a member asked for details of your changes to the Multicam script :-

          http://chdk.setepontos.com/index.php?topic=11261.msg112449#msg112449

          Unfortunately, no reply was received.
          In fact, no-one with a multicam setup that uses the multicam script has posted the details, despite promising to do so in some instances.

          Are you publishing the script ?

          Reply

        9. Marcus Milne’s avatar

          Great setup! What hubs are you using? I’ve tried this with some cheap powered hubs from eBay and I couldn’t get more than 10 cameras recognised. I was using a Surface Pro but I thought it should be able to handle 127 USB devices if they are powered, tho I could be wrong

          Reply

        10. Jason Holutiak’s avatar

          Hey this is great work!

          I was wondering if you would make a set of the photos available to anyone? We are currently looking into creating a rig like this one, we currently have one camera and a turntable but the results are not great.

          Before dropping a bunch of money on something like this we would love to be able to test it so we felt better about the investment.

          You can contact me through email jholutiak@resrchnet.com or skype jholutiak216

          Thanks

          Jason Holutiak

          Reply

        11. fernando palacio’s avatar

          Hi bart, fantastic project, i would like to do anything similar , could send me any other info about the project, are you going to do the code public?

          Do you think that if perhaps make any similar with a rotary could be as good as yours??

          best regards, feel free to contact me al

          info@armadillotaller.com

          fernando

          Reply

Reply

Your email address will not be published. Required fields are marked *

You may use these HTML tags and attributes: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>