License Plate Recognition Camera (LPR) Node

Hi everyone,

I built a Node-RED node for Viewtron LPR cameras. This is the first Node-RED node that I have published, so if I messed anything up or if the veterans here have any recommendations, please let me know.

And for full disclosure, my name is Mike Haldas. I am the co-founder of CCTV Camera Pros and founder of the Viewtron brand. We are a small US business with 20 years experience. I am our sole software engineer and product designer.

The Viewtron AI Camera node receives license plate reads directly from the camera — plate number, which database group the plate belongs to (for access control), and optionally the cropped license plate snapshot image and a full scene overview snapshot. The camera does all the plate recognition on-device and pushes events over HTTP POST. There is no cloud dependency or no middleware required. The IP camera does the AI inference and talks straight to Node-RED.

Install from palette manager (search node-red-contrib-viewtron) or:

cd ~/.node-red
npm install node-red-contrib-viewtron

Here's what it looks like receiving live plate reads in Node-RED:

What you get for each plate read:

  • plate_number — the plate text
  • plate_group — which group the plate is in on the camera's database (allow list, block list, or custom group names on the NVR). Empty if the plate isn't in the database.
  • Plate crop image + full scene overview (as base64 or Buffer)
  • Camera IP, timestamp

The camera has its own on-device plate database. You add plates to groups — allow list, block list, temporary, or on the NVR you can create custom groups like "Residents" or "Delivery". When a plate is read, the camera tells you which group it belongs to. Your flow just acts on it.

Here's a simple dashboard showing the plate images coming through:

Works with both Viewtron IP cameras (direct) and IP cameras connected to Viewtron NVRs (forwarded). The NVR also sends vehicle attributes — brand, color, type, model. Version detection is automatic.

Applications it can be used for:

  • Gate access — different groups get different treatment (residents open gate, delivery opens service entrance, unknown triggers alert)
  • Loading dock — log which trucks show up and when
  • Parking — track entry/exit by plate
  • Car Wash Automation

The node also has outputs for person detection, vehicle detection, face recognition, and people / vehicle counting. Those are built in and parse correctly, however testing and documentation is not 100% done. LPR is done and working now.

Links:

Happy to answer any questions. If anyone else is working with security camera events or license plate reader cameras in Node-RED, I'd be curious to learn about what you're building.

Thank you!

4 Likes

Welcome to the forums @cctvcamerapros
And thank you for contributing to the project.

I moved your post to Share Your Nodes: to ensure proper reach.

1 Like

Thank you sir! Thats where I meant to post it.

1 Like

Not so much messed up, but something to be aware of...

Having had a quick peak:
This Node acts as the HTTP server socket.

Which is fine, but the moment a user wants multiple instances of this Node, each instance needs to have a unique port, or they will be limited to running one instance (or have to configure different cameras to point to different Nodes)

What will be a "better" approach IMO

  • Use a Config Node to run the HTTP server
  • And have the user deploy "listeners"

meaning many instance of the node can be used - all sharing the same port
And with this approach - give the user the ability to configure each "listener" in certain ways.

  • some type of filtered events that each deployed node want to act on (pass a message though)
  • Have them output only certain cameras
  • etc

Just my 2c :smiley:

2 Likes

This is a great idea! I am going to work on that approach for the next version. Thank you for taking a look!