Add advanced computer vision capabilities to your project, without the coding! The Person Sensor from Useful Sensors Inc. includes a camera module pre-programmed with algorithms that detect nearby faces, and return information over a simple Qwiic I2C interface. It is designed to be used as an input to a larger system and be treated like any other sensor where power and information are provided through SparkFun's Qwiic I2C interface. There’s also a separate interrupt pin, TP1, which is used to indicate if any people have been detected.
Internally the Person Sensor bundles an image sensor and a small microcontroller into a single board. It is a small, low power (~150 milliwatts), and economical hardware module that is capable of detecting nearby faces and returning information about how many there are, where they are relative to the device, and performs facial recognition. This makes it easy to build projects that wake up when people approach, follow their faces, mute a microphone when nobody is present, and even recognize different people to personalize their experiences. The Person Sensor is designed to be a simple way to build smarter devices.
The SparkFun Qwiic Connect System is an ecosystem of I2C sensors, actuators, shields and cables that make prototyping faster and less prone to error. All Qwiic-enabled boards use a common 1mm pitch, 4-pin JST connector. This reduces the amount of required PCB space, and polarized connections mean you can’t hook it up wrong.
Note: The sensor uses an image sensor internally, so you need to make sure that the lens has a clear field of view, and that it’s mounted the right way up. You should be able to see the side of the board that has the sensor by spotting the small lens in the center. You’ll know you have it the right way up when the silkscreen writing “Useful Sensors Person Sensor V2.0” is at the correct orientation.
If it requires power, you need to know how much, what all the pins do, and how to hook it up. You may need to reference datasheets, schematics, and know the ins and outs of electronics.
Skill Level: Rookie - You may be required to know a bit more about the component, such as orientation, or how to hook it up, in addition to power requirements. You will need to understand polarized components.
See all skill levels
We welcome your comments and suggestions below. However, if you are looking for solutions to technical questions please see our Technical Assistance page.
Based on 17 ratings:
1 of 1 found this helpful:
Have high hopes for this small camera device, but ...
Uses a SparkFun Qwiic connector for the i2c connection. That's fine but SparkFun doesn't seem to make a Qwiic connector to the (much more common) Dupont 2.54mm Pitch Connector cable or adapter.
I would be willing to pay significantly more if Useful Sensors added more smarts to the module to make facial recognition more reliable.
The camera mounts to the circuit board via a very small connector. Unfortunately I found that the camera separates from the circuit board too easily. I will attempt to put it back but don't have much expectation that I will be successful.
Having said this, I would still say that it is a good buy for $10. Just hoping that Useful Sensors sticks around as a company and version 2 takes into account some or all of the points above.
Feel free to reach out and submit a return ticket with us as well if you wish to go though with a replacement: https://www.sparkfun.com/returns
(Useful Sensors)I've been plagued by the loss of camera modules too! Sorry about that flaw in our design, for all future batches we'll be trying to add a small blob of glue to make them more secure, though it may be a few weeks before that new version is available. If you'd like replacement boards for any you've lost the camera modules to, you can always reach me through contact@usefulsensors.com. Thanks for your feedback, and patience!
Pete@Useful
We sell this https://www.sparkfun.com/products/15081 has adapters of both F/M types, see other options here https://www.sparkfun.com/search/results?term=qwiic+cable
I feel the same way. I have 3 of these and broke one of mine too.....I can't find the lens/camera(!) to even try and put it back on, but it's STILL worth at least $10 :-p
1 of 1 found this helpful:
I bought one a few weeks ago, but it seemed a bit flaky (hit-and-miss on the face detection), so I bought two more, under the assumption that the camera module might be faulty (dead pixels, out of focus, etc). The other two arrived today, and both failed to work at all. Swapping the camera module from the first one to the other two (the camera module is only held in place by its connector) caused them to work, oddly enough.
So, by the looks of it, I've got three working sensor boards but only one functional camera. If I could figure out where to get the cameras (appear to be Arducam PY122), I could possibly repair the two non-functional sensors, but I haven't been able to track down that particular product yet.
Now, granted, Either FedEx or USPS might be to blame here. The shipment of the two latter sensors arrived with a sticker on the box indicating that the package had to be re-barcoded due to damage in transit. It's entirely possible that the camera modules were also damaged during shipment.
Still a fairly disappointing experience, overall.
(Useful Sensors)Sorry to hear about the mechanical issues! For the next batch of sensors we've actually glued them in place to try and avoid this problem. If you contact us at contact@usefulsensors.com we'd be happy to send you replacement boards. Thank you for your patience and feedback!
3 of 3 found this helpful:
This novel sensor is a lot of fun to play around with. It performed as expected when using CircuitPython on a Pico (or Pico W) to detect a face and track its movement to change the position of a servo or a visual display (see example projects at: https://www.hackster.io/useful-sensors/products/person-sensor). I was also able to program it to distinguish between different faces (including large pictures of faces), although the accuracy/reliability would likely not be adequate for a security system. The main limitations I saw were that it performed less reliably in low light and that its range is only a couple of meters. The orientation of the sensor relative to the person’s face also makes a big difference, especially when trying to distinguish between different faces. It worked best when the face was well illuminated, within 1 meter, and looking directly at the sensor. When those conditions were met, it worked quite well.
1 of 1 found this helpful:
The Jury is still out, sadly, despite the initial enthusiasm.
The simplest Arduino sketch reports (via Serial Monitor) no I2C data!???
The Person Sensor status LED duly lights up when an object is presented in front (including presumably faces).
A vanilla I2C sketch reports that an I2C device is present at the designated address.
What can a newbie do to avoid self-inflicted operator errors?
I guess try it on a Pico next and then of course on the grand daddy -RPi if I can buy without donating to scalpers.
Anyway, good introduction to Qwiic which will serve me well since I like small form factor JSTs and not the Gr___ size.
(Useful Sensors)Sorry you hit these problems!
After investigating, and some help from the community, we figured out that a lot of older Arduino boards have a 32 byte limit on I2C reads, and silently discard any bytes above that. Since we're reading 40 bytes of information, this caused the failure you saw. I've now checked in a fix that reads in smaller chunks to work around this limitation.
Thanks for your patience, and apologies again for the bug. I hope your explorations on the Pico went more smoothly.
Pete@Useful
I wish they didn’t have a proprietary cable for the device. I just peeled the connector housing apart and soldered wire leads directly to the board. The sensor works well under normal lighting conditions. Once there is a bright backdrop it may flare out the camera picture and not get a good detection and/or tracking (understandably for a pinhole camera). It was easy to connect to an arduino, find the library and heading to compile to my sketch.
Bought this to try out for control of an animatronic eye mechanism. The person sensor worked flawlessly after following instructions from YouTube channel "Workshop Nation". Incredible price for what used to be rather tricky tech - but is now plug and play. Here is a video of my test on first power up. https://youtu.be/ernsnKQk_5Q
This is so cool. I've only just started using this little wonder, but now I want to incorporate it everywhere, especially in my smart home projects!
I bought eight of these hoping to use them in a robotics project for a class. Unfortunately, after testing all eight of them, I can say they're not reliable in any way.
I tested them under a variety of lighting conditions. They are more apt to trigger under bright lighting conditions, but false positives become more likely as well. The green light will sometimes indicate when I point the camera at my (or another person's) face. Often it will indicate only once after a delay, and then stop indicating immediately. But it will consistently indicate when switched to a brighter surface (that isn't a face). I was able to get it to consistently indicate on synthetic white fur with barely any pauses.
Hooking it up to a microcontroller, you're able to peek the values, including a box_confidence, (1-100). This would seemingly allow for finer-grained control in order to eliminate the copious false positives, but the number is meaningless. White fur, for example, produces mostly 99 confidence, while a human face ranges between the low 60's and the high 90's from moment to moment.
I'm pretty bummed about this purchase, since I was hoping to use it as a "black box" for a kids' robotics project. It feels like I purchased eight divining rods though. They're nowhere near consistent enough to use in a classroom environment.
I'm building some mechatoric eyes and had absolutely no trouble integrating this sensor into my project. It was almost plug and play. The examples were spot-on and straight-forward.
The person sensor work very well, I am currently using it with and Arduino Mega 2560 for some simple facial detection and it does a great job. Perfect little sensor for a project in detecting a person. While it should not be confused with facial recognition, it does do a good job of detect the presence of a person. Tracking from left to right and up and down is simple. Only thing it needs is to have the cable included with it.
The sensor is fairly easy to use -- except that the Arduino I2C library, which I believe is used in the onboard ESP32, is limited to 32 bytes. The example program shows how to get the other 7 bytes (total packet length is 39) with a second fetch, but this is simply returning a copy of the first 7 bytes of the packet -- it is not the end of the packet (which is the last 5 bytes of face #3, and the 2-byte CRC). The demo program doesn't validate the packet CRC. Had the author done that they would have discovered this problem before releasing the current code.
I am using the Propeller in my project, but ended up running an Arduino demo so that I could connect a logic analyzer to see what's happening. All of the reads from the Arduino demo have the problem with duplicating the first 7 bytes to the last 7 bytes. I believe this could be a firmware error.
It might be wise of the vendor to reduce the maximum faces detected to three which would keep the total packet under 32 bytes and eliminate the buffering problem we're facing now. Another option would be to add the ability to set the read pointer inside the device. ATM, a read is from the front of the packet. You don't get the option to set the address. If this were added then it would be cleaner to read data from the sensor.
Update: Today I ran the Pico demo. It reads an extra byte (40 instead of 39 as in the Arduino code) and it does it all in one go. That said, the last 8 bytes seem to be a copy of the first 8 bytes. This causes me to believe that the Arduino library with the 32-byte limit is being used in the device. It would be nice if a future update treated the device like an addressable memory device where you could read data in chucks of the user's choosing.
You can file an issue/merge request here if you are interested in helping things along https://github.com/usefulsensors/person_sensor_docs/issues
I have both a person sensor 1.1 and a person sensor 2 (just bought a couple because of how I liked 1.1!) and the 1.1 has a more consistent reading and better confidence/accuracy. The 2.0 just blinks so often on me that I can't rely on it as a sensor for a pretty key project I'm working on. I didn't expect this to be the failure point! I would love to buy a 1.1 or have a 1.1 rushed to me to replace these.
Note this is a v2.0 of the product. It is mechanically different from the v1.0 of the product including the QWICC connector being in a different place. There was a 3D printed case for this sensor but turns out that it was for the v1.0 and will not work with this sensor.
I am in Brazil, I bought a SEN-21231 module and when I connect it to an Arduino UNO, Nano or MEGA it cannot communicate with I2C, I sent an email to support with photos of the connections so that you could help me, but so far nothing has happened. I would really like to be able to use this module with my application. Since I am in Brazil I have spent a lot of money on shipping and customs and I cannot use the module.
I used one of these to create a "Look at Me Light Switch." (https://blog.arduino.cc/2023/03/08/turn-your-lights-on-and-off-by-staring-at-this-little-robotic-switch/) I've just scratched the surface of the capabilities of this device. For face detection at low cost and in simple form, then this is probably the best thing available.
Works reliably event in low light. The inference struct is well thought out. Expect to code in some simple logic to filter out low confidence false positives. Runs 1 inference every 200ms so roughly 5 FPS.
The sensor works fine and the detection rate is good for adults but didn't do too good for children. My only problem was the sensor came with the camera plugged in the wrong orientation and not fully seated in
I've been unable to get the device to work using the sample code on a Particle.io Argon. It just keeps reporting 'no face found' even though the green light comes on. With a scope I could see that the I2C bus is getting x62 as the address. I see it polling the sensor every 200 ms. Don't really know what to do next.
UPDATE: I got it to work by modifying their supplied Arduino code. Problem is they try to read 40 bytes from the Wire library but that library is limited to 32 byte max. Using their supplied code the read never completes. I've left comments in their github repo about this.
Thanks! I've updated https://github.com/usefulsensors/person_sensor_arduino/issues/2 with some notes, I'm guessing you're correct, and sorry we didn't catch this during our testing. I appreciate the STL file too.
Pete@Useful
I've now checked in a fix to read from I2C in 32-byte chunks, which gets it working on the Uno, which failed previously. I hope this solves the issue, thanks for your patience and help debugging it!
Pete@Useful
I'm wondering if the Library for this camera, have one specific to identifying RC cars, or any small car like vehicle. Then use the I2C and an Arduino, for simple identity processing.
We don't have any plans for custom models unfortunately, but I personally like Edge Impulse as a self-service tool for creating your own computer vision solutions for embedded platforms.
Pete@Useful
Since it’s simply I2C ,I’d guess you could get data from it in Arduino too? Just need to know the wire address and it’s behavior
The 7-bit wire address is 0x62. Note that on some boards the lowest bit (read/write) is included, making the address 0xC4. See this document for the I2C API.
There's are a couple of official examples for Arduino boards which should hopefully help. There is a known issue with some boards like the Uno, but I'm working on a fix once I have the hardware to test with.
Pete@Useful
Just a quick update that the issue on older Arduino boards should now be fixed. Thanks for everyone's patience!
Pete@Useful
How far away can the device confidently detect faces / people?
3m/10' should be a good theoretical upper limit, given the sensor specs (110º FoV, 256x256) and a 14cm average face width (so 6 pixels wide @ 3m).
We find in practice that about one meter in decent lighting conditions gives reasonable performance, any further is less reliable. We're hoping to keep improving this as we work on new versions though.
Pete@Useful
I rather suspect that I'm not the only one who would find a mechanical drawing for this part useful!
I left a one-star review, but it never posted. Curious.
Anyway, I bought eight of these things and none of them work. They can't reliably detect human faces. Tons of false positives and they're barely sensitive to an actual human face. Tested in all sorts of lighting conditions.
Are the configuration registers write only or is it possible to read their value as well? I would like to read the state of the register (for example 0x07) and allow a toggle in my code that can flip the value on and off. However, all I am getting is a 0 whenever I attempt to read the register. I want to make sure I am doing something that should work and I need to fix it on my side or stop trying to do something that is not expected to work. Thanks.
Are the I2C pins on the Quiic connector and the broken out pins tolerant to voltages higher than the 3.3v on the supply? I connected one of the sensors to a 5V Arduino UNO, the LED flashed once, then never again...