Some performance results from the README.md on IOT class machines:
-
AI_dev.py Using 5 720p netcams with Onvif snaphots.
-
- Pi3B+ running Raspbian Stretch:
- NCS v1 SDK ~6.5 fps
- 2 NCS v1 SDK ~11.6 fps
- NCS OpenVINO ~5.9 fps
- 2 NCS OpenVINO ~9.9 fps
- NCS2 OpenVINO ~8.3 fps
-
- Odroid XU-4 running Ubuntu Mate-16.04:
- NCS OpenVINO ~8.5 fps
- 2 NCS OpenVINO ~15.9 fps
- NCS2 OpenVINO ~15.5 fps
-
TPU.py with 1080p (HD, 3 fps) and 4K (UHD, 5 fps) rtsp streams.
-
- Pi4B running Raspbian Buster:
- 4 HD: ~11.8 fps (basically processing every frame)
- 5 HD: ~14.7 fps (basically processing every frame)
- 6 HD: ~15.0 fps, -d 0 (no display) ~16.7 fps
- 8 HD: ~11.6 fps, -d 0 ~14.6 fps
- 1 UHD: ~4.6 fps (basically processing every frame)
- 2 UHD: ~4 fps very high latency makes it useless (Pi4B struggles with decoding 4K streams)
-
TPU.py with Nano 3 fps HD and UHD rtsp streams.
-
- Jetson Nano running Ubuntu 18.04:
- 5 UHD (4K) : ~14.6 fps (effectively processing every frame!)
- 5 UHD 3 HD : ~10.3 fps, jumps to ~19.1 fps if -d 0 option used (no live image display)
- 4 UHD 4 HD : ~16.3 fps, ~22.5 fps with -d 0 option
- 5 UHD 10 HD (1080p): ~4.4 fps, ~7.6 fps with -d 0 option (totally overloaded, get ~39 fps when running on i7-4500U MiniPC)
AI_dev.py is the version that supports all the AI options -- CPU, NCS/NCS2, & Coral TPU.
TPU.py only supports uing the Coral TPU for the AI.
Right now if you are looking to buy, I'd get the Jetson Nano and the Coral TPU, you are looking at spending ~$200.
The Wiki on the GitHub https://github.com/wb666greene/AI-Person-Detector/wiki has some notes about cameras, POE and DVRs, but its hard to really recommend as many of what I have used are "not currently available" on Amazon, others when I used the "Order Again" were very different firmware despite being nominally the same item.
For less than a Pi4B as AI host, Onvif snapshot cameras are the best choice, but very few camera models deliver the full resolution as Onvif snapshots, most (as do DVRs) only give lame D1 snapshots.
The 720p and 1080p cameras I have that do give full resolution snapshots are "no longer available". Its frustrating that I've found some 4K cameras that give the full 4K snapshot but only appear to do so for rtsp "keyframes" meaing only one snapshot every second or two.
D1 images certainly work and its what I started with, but better resolution makes for a much easier and quicker decision to ignore or act when a push notification comes in. Also, unexpectedly, with MobilenetSSD-v2_coco the sensitivity of detection clearly seems to improve with image resolution, at least up to 4K. With MobilenetSSD-v1 to get "good" sensitivity with some 4 & 5 Mpixel cameras I had access to I needed to "tile" the image into quadrants which of course reduced the frame rate by 1/4.
I think this is a "game changer" for home security and I'd like to make it more accessible for "normal" do-it-your-self-ers, right now you pretty much need a computer geek card.
Its inevitable that this will find its way into cameras and security DVRs, but right now IMHO its premature as the AI and Co-processors are changing fast. For example the NCS performed pretty well with MobilenetSSD-v1 but it struggles with MobilenetSSD-v2_coco which is in my experience a much superior AI. I look forward to what Intel does with the NCS3 that is supposed to come out "soon", they are way behind the Google TPU at the moment, at least for the AI that I've tried.
Please, if you try it and have problems raise issues about the Python code or software installation on the GitHub, questions about the node-red here.
The Node-RED is what makes the Python code (which can be treated mostly as a black-box) useful for adding to your existing home automation/security system.