At this point making "optimum" choices is premature IMHO, but I've consolidated the variations in my Python code versions so it runs on my i7 desktop and Pi3B+ with automatic fallback to CPU only AI if the NSC stick is not found and a choice of using Onvif IP cameras, USB camera, or the PiCamera module.
On the i7 basically CPU only is actually significantly faster, (Adrian at PyImageSearch found similar with his Mac computer) I was surprised USB3 vs USB2 (Ubuntu 16.04) made only a small difference.
NCS 1280x720 USB camera: 130-150 mS/frame
USB3 NCS 1280x720 USB camera: 100-120 mS/frame
USB3 NCS Onvif IP 1280x720 camera: 140-230 mS/frame
CPU Onvif IP 1280x720 camera: 80-130 mS/frame
CPU 1280x720 USB camera: 40-60 mS/frame
Take these with a large grain of salt as my desktop is running four desktops with more apps and browser windows & tabs open than most folks would think reasonable on a 4K UDH TV used as a monitor. These timings are with every frame (including no detection) displayed using cv2.imshow("Detector", image)
My take home lesson is that Onvif IP cams are the easiest way to go for multiple cameras on a single system, the two camera system works very well on the Pi3B+ with under a second latency to detection -- my most important parameter. YMMV. But yes, at this point Onvif IP cameras, NCS and a Pi3B+ is a very nice and rather straight forward solution for ~$200-250, I planning on using 4 IP cameras, I could always add another NCS later
I will post this updated code in the "share your projects" section thread once I've added in the MQTT and updated node-red flow to start and control it.
I plan to start replacing some Lorex cameras with Onvif Netcams ASAP. The USAVision (aka Geovision) camera has been perfectly well behaved for the week I've been running it, the Besder "straight from China" cameras IMHO should be avoided as the WiFi one isn't Onvif compatable enough for anything, and the one without WiFi has bursts of network errors about every 10-12 hours, usually my (crude) error handling code lets it recover after a few seconds to a few minutes, but several times I've had to cycle the camera power to get it back. The USAVision only costs like $3 more from Amazon.
For me the optimum is one of the commercial systems for 24/7 recording, which they do extremely well for a very reasonable price and AI cameras in key locations for early detection and warning alerts. If not for the latency my node-red-contrib-ftp-server Pi3B+ NCS add-on solution could be a viable product.
Costco has a 4-channel 4-IPcamera 1920x1080 Network DVR for like $300, but I'm afraid the network DVR acts as a NAT router and I would not be able to talk directly to the cameras. But since I can get four of the USA vision cameras for a bit over $100 I stopped looking for on-line documentation about the commercial system.
I'm going to sign up for the Amazon "free trial" today or tomorrow.
Trying the Google AIY Vision bonnet on a Pi3B+ will be a priority for me next week assuming it arrives when promised.
Edit:
I need to get a longer PiZero camera module cable to run the AIY Vision on the Pi3B+ reports are it does work so I'm starting with it.
Ran a few CPU only AI tests on the Pi3B (non-+):
Onvif IP cams 1280x720 and 704x480: ~1 sec per frame, each image time overlay counts upby 2, ~66-80% CPU, after about 10 minutes the little red statusbar thermometer pops up about two of four ticks red and now the time overlay sometimes counts by 3. After 45+ minutes seems stable, about every 3rd or 4th frame counts up by 3 instead of 2 seconds. Room temp here is about 28C at the moment. Thermometer notification went away a few seconds after I closed the program.
Pi Camera Module 960x544: CPU usage is about 90% and the thermometer notification pops back up its running about one frame every 2.5 seconds. I'm surprised the PiCamera module slows things down this much. I'm using the PyImageSearch imutil "videostream" camera interface. All these tests were run with openCV displaying every frame on the gui.