[ANNOUNCE] node-red-contrib-plate-recognizer

Hi folks,

Last week there was a request for a new node:

Had some chit chat with @lizzardguki behind the scenes meanwhile, and a beta version is now available on Github:

You can install it directly from my Github account like this:

npm install bartbutenaers/node-red-contrib-plate-recognizer

It is a bit similar to the node-red-contrib-openalpr-cloud that I developed a couple of years ago. But the openalpr github repository seems to be abandoned for already quite some time.

Some good to knows:

  • You can very easily get started: sign up at their homepage, and paste your token into my config screen. That is all ...
  • This new node uses deep learning behind the scenes. That you can 'learn' a piece of software to recognize something, really keeps fascinating me...
  • They offer a free license up to 2500 images per month, which is quite well for hobbyist IOT users.
  • The service can also be installed locally (via their SDK) on a number of platforms, like e.g. Raspberry.
  • They offer a Docker container, so you should be able to run it locally without having installation headache...

I have added a demo on my readme page, which should get you up and running very easily:

As always, all 'constuctive' feedback is more than welcome!

Have fun with it!
Bart

3 Likes

There is something I'm not really sure about.
You can now filter specific regions, by entering an array of region codes:

image

But not sure how it works.
In the documentation I see this:

image

I did a test last night with a german plate ("de"). Then I entered an array for only belgian and french plates ([ "be", "fr" ]), but it still recognized the german plate. Thought it would only report belgian and french plates?

If anybody knows how I should interpret the documentation, would be nice to let me know!

1 Like

BTW beside license plate recognition, they also offer an API to query your statistics. E.g. how many recognitions you still have left this month in your free account, and so on ...

Can imagine that it would be useful to get this information, e.g. to show an alert on your mobile file when you are running out of recognitions.

But should I create a separate node in my repository, or add it to my existing node (e.g. when some topic arrives) ... Any suggestions?

@lizzardguki,
I have added a second node to the repository:

image

Which returns the maximum number of recognitions, and the current number of statistics of the current month:

image

For me this node is ready for NPM ...

I want to congratulate you on a job well done, and for full usage for the nodes.
I also want to thank you for helping out on this project, and I am sure that this will be the project I will refer to when I am stuck on a coding.
And I promise to give to the community my full potential.

Once again thank you for your cooperation and have a nice day...

4 Likes

@lizzardguki,
You are welcome!
Version 1.0.0 is now available in the palette:

image

After :champagne: :champagne: :champagne: , now back to my original todo list ...

4 Likes

Do you think it would be worthwhile to add a message to the node-red-contrib-openalpr-cloud readme, advising users to install this node instead?
I haven't as yet tried the new node, but was very impressed how effective platerecognizer.com was in recognising poor quality images.

1 Like

Yes I am also impressed about it. And yes I could also add a link to the readme page. This also reminds me that I need to add the keyword "alpr" to my package.json file, to guide users towards my new node. Now off to work...

1 Like

I added the two remaining functions from the docs page (send timestamp and cameraID), I forked your repository and made changes, also made some changes to the pieces of information, when you are available please check them out, would love to push them also to npm :hugs:

Thanks @lizzardguki !

A new version 1.0.1 is available in the palette, which contains both new fields:

image

And the 3 example flows (from the readme file) are now available via the Node-RED import menu:

image

1 Like

:heart_eyes: :heart_eyes:
Thanks, Bart for your cooperation, I am going to run off starting another project, and will try to not ask for your help a lot :smiley:

Oh no ... :rofl: :joy:

1 Like

:zipper_mouth_face: :zipper_mouth_face: :rofl:

If you want to send timestamp why not just send it all the time and users can always ignore it when they receive it ? (Why add clutter to the UI :wink:

1 Like

Yes that is true ... Indeed I 'think' both fields have no impact on the recognition in the service.
But now at least the config screen looks a bit impressive :wink:

1 Like

If by impressive you mean I now have to scroll the config panel when using a smaller browser window then yes...

1 Like

Well honestly, that maybe my fault, because I wanted to have all of the parameters like in the documentation.

I think what Dave was saying was that you could have the timestamp feed without having a selectable option in config.
It would be there all the time, but if you didn't want to use it, then disregard it.
Having as a selectable option just adds unnecessary clutter to the node config, and really serves no practical purpose.

But hey, it's yours & Bart's node, so it's your preference that matters.

Good point, so @lizzardguki has implemented a PR to solve this. Now we always send the timestamp in version 1.0.2:

image

The checkbox removal has not really reduced the size of the config screen very much, so this change hasn't enabled me to buy a smaller smartphone and still fit the config screen on it :wink:

This new 1.0.2. version also has improved error handling. I had a party last night at home, so lots of cars from my international friends on my driveway. As a result my camera has sent this screenshot image to the plate recognition service:

But that seemed to be a bit too much for the recognition service. It responded with an internal server error, which caused our node to crash. Now we handle the unexpected result better:

image

3 Likes

Do you think we need a small changes to help all the new newbies on node-red.
My suggestion is for msg.payload to contain only the plate string.
If there are more plates it should list in msg.payload[ 0, 1,2 , etc]
What do you guys think about this?

Not big of a edit , just a small touch up...