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. me’s avatar

          Hi Matt,

          You did programmed my dream rig scripts, I also use Canon A1200. Just I’m not as good as you with programming script. I’m only using CHDK USB remote control for my 62 cameras. then you certainly imagine how long it takes me to take out every SD card and download them one by one. Is there any way you could share your script with me?

          hope to talk to you soon

          Here is my email address :neo_22_nancy@hotmail.com

          best regards,
          Me

          Reply

          1. artanim’s avatar

            Our current script is very close from the latest multicam.lua which now supports USB remote and download of images. Check it out here: http://chdk.setepontos.com/index.php?topic=11667.0 and here http://chdk.wikia.com/wiki/Multiple_Cameras_using_CHDK

            Reply

          2. 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

          3. 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

          4. 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

          5. 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

          6. 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

          7. 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

          8. 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

          9. 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

          10. Khumo’s avatar

            Great stuff..l have toying with this concept for a while, its amazing someone has set it up! Havent you thought of packaging and selling it as a complete product? l would love to have one of these

            Reply

          11. caiz’s avatar

            Hi , very nice work!!!
            and i would like to do something similar too ,so could you send me some info about the project, what i have is powershot sx150is .

            best regards

            caizhen2717@gmail.com

            Reply

          12. Eric Pearce’s avatar

            Very interesting and I am glad it worked out well for you and your organization. I was hoping for some theorizing upon the product if you have a moment. I understand the usage of 64 Canon Powershot A1400 and that generated up to 1064 MB at maximum in camera capabilities. You might have changed the internal recording to RAW through the CHDK program but that was not clarified. I think I understand the following truths about your concept; the A1400 has 28mm Wide-Angle Lens, you set then .25 meters high, the total diameter appear to be 2 meter. So each photo would cover 0.29 meters at f/22? So each photo only overlapped .02 meters of another photo? Did I get it right? So the question is “are the Megapixels that important”? The new Raspberry Pi cameras are easier to set up and cost less per unit at $35. They only shoot at 5MP but the field of view is better so more coverage of the target area. It the 1064 MB resolution file is required then on would need 213 cameras (likely cost at $27 (USD) per camera would cost $5751 USD instead of your camera cost of ($142 USD x 64) $9088 USD. The PI camera system would cost less if MP were not as important and coverage was more important. Did you decide Canons were better than PI? Any thought would be helpful. Eric

            Reply

          13. Bob’s avatar

            Impressive work. Nice design too.
            I read that you modified the standard chdk scripts but it’s not clear what you needed to change or why. If you could share that info it would be helpful. Have you made the scripts available?

            Also, I’m having difficulty locating wholesale lots of cameras. The Canon website has refurbished cameras, but it is hit or miss with availability. If I wanted to test a few cameras first, there is no guarantee that there will be another 60 or so available.

            Do you have any thoughts on what the minimum number of cameras is to get good results? I’ve seen setups with 100 cameras but it’s not clear (pun intended) that it makes any difference.

            Thanks for sharing your work. It’s impressive.

            Reply

          14. David’s avatar

            Hi there,

            we are working on a similar system, also using CHDK. We have faced a big problem regarding the focus. We can not set the cameras to center focus. These cheap Canon cameras we have are always try to find the face of the model, so a lot of pictures are badly focussed.

            Did you have also issues like this? How did you solve this issue?

            Regards,

            David

            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>