Header Ads

Review: Vizy Linux-Powered AI Camera

Camera held in hand

Vizy is a Linux-based “AI camera” based on the Raspberry Pi 4 that uses machine learning and machine vision to pull off some neat tricks, and has a design centered around hackability. I found it ridiculously simple to get up and running, and it was just as easy to make changes of my own, and start getting ideas.

Person and cat with machine-generated tags identifying them
Out of the box, Vizy is only a couple lines of Python away from being a functional Cat Detector project.

I was running pre-installed examples written in Python within minutes, and editing that very same code in about 30 seconds more. Even better, I did it all without installing a development environment, or even leaving my web browser, for that matter. I have to say, it made for a very hacker-friendly experience.

Vizy comes from the folks at Charmed Labs; this isn’t their first stab at smart cameras, and it shows. They also created the Pixy and Pixy 2 cameras, of which I happen to own several. I have always devoured anything that makes machine vision more accessible and easier to integrate into projects, so when Charmed Labs kindly offered to send me one of their newest devices, I was eager to see what was new.

I found Vizy to be a highly-polished platform with a number of truly useful hardware and software features, and a focus on accessibility and ease of use that I really hope to see more of in future embedded products. Let’s take a closer look.

Looking Inside

Vizy is based on the Raspberry Pi 4, which sets it somewhat apart from most other embedded machine vision platforms. Like many other platforms, all code and vision processing for Vizy runs locally. However, running on a Raspberry Pi 4 also means having access to a familiar Linux environment, and this functionality brings a few benefits we’ll explore in a moment.

Smart camera with top open, side view
Vizy is by default an indoor device, but for more demanding environments, there is an optional outdoor enclosure.

Inside the case is tucked a Raspberry Pi 4, a fan, the lens assembly and camera (which uses the same Sony IMX477 sensor as the Raspberry Pi High Quality camera), and a small power and I/O management board attached to the top of the Pi’s 40-pin GPIO header. This board handles powering on and off, controls the switchable IR filter, accepts 12 V DC input, provides feedback with a beeper and RGB LED, and has an I/O header with screw terminals for easy interfacing to other devices.

Vizy can almost be thought of as a camera-shaped enclosure for a Raspberry Pi, since it provides full access to all of the Raspberry Pi 4’s ports, which all work as one would expect. One can plug in a monitor and keyboard and see a Linux desktop environment, and adding a feature like cellular wireless connectivity is as simple as plugging in and configuring a USB cellular modem. Interfacing to other systems or hardware — an expected task for a smart camera — becomes easier as a result of being able to use familiar interfaces and methods.

Hacker-Friendly Features

One of the things I liked the most about exploring Vizy was how quickly I started modifying sample code without even having to even leave my web browser, thanks to the built-in web terminal interfaces. Examples and applications are all written in Python, and while it’s certainly possible to use whatever method one wishes to edit Python code and push changes to the device, it’s also trivially simple to launch an editor in a new browser tab.

Here are some of the more interesting features I found in Vizy, each of them having something useful to offer. Their utility is enhanced by excellent documentation.

Hardware Features

Software-controlled, switchable IR filter which is independent of the lens itself. An IR filter is typically built into most lenses because it provides better photos. However, there are times when going without an IR filter is desirable (a camera tends to see better at night without one, for example.) Vizy allows enabling (or disabling) the IR filter with a simple software command.

Lens mount is both M12 and C/CS compatible. Most cameras accept one type of lens or the other, but Vizy allows using either (though it is recommended to use lenses without IR filters, because Vizy provides its own.)

I/O plug with screw terminals provides a way for the camera to directly interface to other hardware and devices. The pins allow for robust digital input and output including serial communication, and software-switchable high-current 5 V and 12 V outputs are available to control external devices (more details on the pinout is here.)

The usual camera standards are present such as a tripod mount, mounting shoe for camera accessories, and an optional outdoor enclosure.

All the usual Raspberry Pi interfaces are exposed which means that Vizy doesn’t get in the way of anything a Raspberry Pi would normally be able to do. It’s even possible to plug in a keyboard and monitor (or connect via VNC, for that matter) and work on Vizy from a normal Linux desktop environment.

Software Features

Simple setup. It takes virtually no time at all to be up and running, or configure the device to connect to a local network. Every part of Vizy’s functionality is accessible via a web browser.

Built-in applications and examples are easy to modify. Two applications and a number of examples come pre-installed and ready to run: Birdfeeder automatically detects and identifies different species of birds, and MotionScope detects moving objects, measures the acceleration and velocity of each, and presents the data as interactive graphs. Examples include things like TensorFlow object detection, which runs locally and provides a simple framework for projects.

Development can be done entirely in the browser, and any example or application can be launched in a Python editor in a new browser tab with a couple of clicks, with no need for a separate development environment (although Vizy also permits SMB/CIFS-based file sharing on the local network.)

Remote web sharing for access from outside one’s network is a handy feature that creates a custom URL through which one may remotely access the device. A URL generated in this way is only valid for an hour, but established remote sessions won’t be terminated; a generated URL simply stops being valid. All of the usual features are accessible through web sharing — including web-based terminal windows and file editing — and the system handles simultaneous access by multiple users gracefully.

Powering the Camera

Vizy is nominally powered by the included 12 V wall adapter but there are a number of options for powering the device, which offers the typical hacker some flexibility. For example, it’s possible to power the device by applying 5 V to the USB-C connector, although doing this means the 12 V output on the I/O connector won’t be functional. Speaking of which, that 12 V output also can function as an input, allowing one to power the camera from an external 12 V source applied to the right screw terminals. Power over Ethernet (PoE) is also an option.

Power consumption reflects the device’s Raspberry Pi 4 internals, consuming around 3 W to 5 W depending on what it is doing. I measured between 500 mA and 600 mA at 5 V when idle, jumping to around 1 A while actively streaming the results of TensorFlow object detection in the camera view.

In-Browser… Everything

It’s one thing to be able to view live video or change hardware parameters from within a browser, but what’s even better is being able to edit Python code directly from a browser tab, complete with application console output. It’s a slick system that really makes modifying or writing code for the camera much more accessible. Need to create new files, or even open a terminal window to the Pi itself? That can be launched in a new tab, as well.

Of course, one can use whatever method one wishes to develop on the device. File sharing, ssh, and remote desktop (via VNC) are all options, as is simply plugging in a keyboard and monitor.

Loving This Direction

I was up and running in no time with Vizy, and the default application is a bird feeder watcher that detects birds, identifies their species, and uploads their pictures to a Google photo album. It’s capable of more than that, however. Want an idea of what goes into developing your own application? Here’s a tutorial on rolling your own pet companion, complete with treat dispenser.

Vizy comes with a number of useful examples that are ready to modify, and development doesn’t need anything more than a web browser. This helps make it more accessible while at the same time offering the average hacker a running start at implementing things like object detection in a project. In fact, thanks to the pre-installed TensorFlow examples, Vizy is only a couple lines of code away from being a functional Cat Detector like this one.

Vizy has a level of polish and set of features that I really hope to see more of in future products like this. Does a device like this give you any ideas for a new project, or perhaps breathe life into an old one? We definitely want to hear about it, so let us know in the comments.


No comments