I've been sent a 3D camera addon to review - the Svpro SV-2560X3D-001 is a £65 stereo camera designed for Android. It will also work with a Raspberry Pi!
It looks a little like a Microsoft Kinect - a single bar with two embedded cameras. The camera resolution is 720p on each lens.
You can buy the camera from Amazon UK.
It clips on easily to a phone via a padded screw clamp. You need to install a dedicate 3D camera app in order to make it work. In the box you get the camera, two USB-OTG cables, a tripod and clamp, and a carrying pouch.
Let's take it for a spin!
As you can see, the 3D effect is prominent.
Video quality is 2560x720. Framerate is variable depending on how fast your phone is. My Nexus 6 managed just 16fps, my S6 got to the slightly better 25fps.
Because the cameras are independent, their exposure and white balance aren't linked. This also means that occasionally one camera may drop a frame or exhibit tearing - while the other side remains unaffected.
The cameras work best in bright light. Too much motion and the JPEG encoding can't keep up. You can stream raw YUYV video off the device - but you need to either lower the framerate or resolution if you want the USB bandwidth to be sufficient.
aac, 44100 Hz, mono, fltp, 67 kb/s
You don't get stereo sound, which is a little bit of a disappointment. There are no microphones in the unit - audio comes from your phone's mic. I've removed the audio from the above videos
3D metadata isn't embedded - this is needed for sites like YouTube to recognise them as 3D videos.
I uploaded a sample video to YouTube - which has native 3D support. I was able to stream the video to my smart TV and watch it using 3D glasses.
The Svpro app doesn't let you take photos! A bizarre omission. I cheated and used the phone's screenshot tool to capture these. Click for full size.
Android doesn't natively support external cameras - so you need to download the Svpro app. It's basic - you can record video and play video. That's it!
No photo capabilities, no resolution or quality settings, no framerate control, no video editing or upload to YouTube.
Worse, the app in the Google Play Store doesn't support Android 7.0 - you need to download it directly from http://www.svpro.cc/app/.
I found that the app would not keep the screen on while I was recording. You may need to adjust your phone's display settings if you want to keep the screen active.
On the positive side, it doesn't ask for crazy permissions - although you will need to grant it USB access.
There are other apps on the play store which you can use, which show how good the Svpro app could be. For example, this is USB Dual Camera:
That's not a perfect app, but it gives you an idea of the potential.
The Svpro app also seems quite slow - which sometimes leads to disappointing video results.
Raspberry Pi Linux support
Although this camera isn't advertised as working on Linux, it is a USB camera - and it works brilliantly!
lsusb gives us:
Bus 001 Device 004: ID 1a40:0101 Terminus Technology Inc. 4-Port HUB Bus 001 Device 005: ID 0ac8:9902 Z-Star Microelectronics Corp. Bus 001 Device 006: ID 0ac8:9901 Z-Star Microelectronics Corp.
So this is a USB hub with two cameras attached to it! It shows up as
/dev/video1 - and both cameras work perfectly!
YUV 4:2:2 (YUYV) and
MJPG for video capture and, pleasingly, each camera is 1280*720 native. No interpolation!
The Raspberry Pi website has a quick tutorial on capturing images.
You can capture the MJPG directly from the camera. This is the quickest and most efficient way to get 25fps video out of the device - although the filesize is rather large (5MB per second).
avconv -f video4linux2 -input_format mjpeg -i /dev/video0 -t 00:00:05 -c:v copy output.mkv
That will only capture from one of the twin cameras. How do we get both? Here's a lazy way to capture dual USB cameras simultaneously.
avconv -f video4linux2 -input_format mjpeg -i /dev/video0 -t 00:00:05 -c:v copy outputL.mkv & avconv -f video4linux2 -input_format mjpeg -i /dev/video1 -t 00:00:05 -c:v copy outputR.mkv
That worked on my Pi 2 Model B - I'll write a blog post soon explaining other ways to do this.
At the start of the decade, my mate Ket was building his own 3D cameras. Literally two cameras wired together and mounted next to each other.
It's incredible to think how quickly technology has progressed. For £65 you get a lightweight (50g) and tiny (92mm * 20mm * 20mm) camera pairing. The distance between the cameras is almost identical to the distance between my pupils. The view angle on each lens is 100°. Perfect for stereoscopic viewing.
But pushing all that video over a USB cable is tough. A more practical design may be to place the video processing within the unit - rather than relying on the USB bandwidth and phone speed being sufficient.
There are a few little niggles with the Svpro.
- For phones, it is Android only. At the moment the USB OTG functionality only works with Android. So you iPhone users are out of luck.
- Dedicated Android app needed. An app like this needs to be polished, professional, and a joy to use. It isn't.
- 720p is fine for a cheap camera - and matches the resolution of most 3D displays - but a bigger resolution would be welcome.
- Framerate should be higher - although this is partially a limitation of the speed of the USB transfer and of your phone.
- No binaural sound. Audio is recorded from your phone's microphone, so there's no stereo effect.
Those are minor problems. The only other issue I found was that on some devices, it would capture BGR video - the red and blue channels swapped around. Which gave this weird effect:
No idea why - I reported it to Svpro and they're looking into it.
To correct it using Linux requires
ffmpeg -i in.mp4 -vf colorchannelmixer=rr=0:rb=1:br=1:bb=0 -acodec copy out.mp4
Recording from the Pi didn't exhibit these problems.
If you want to get started with a 3D VR Camera - for playback on a Google Cardboard or other VR headset - this is a pretty good device. The app is basic, but the video quality is satisfactory if your phone is fast enough. The 3D effect is perfect. It's also a handy way to add stereo-vision to a Raspberry Pi robotics project.