Full ALPR Database System for Blue Iris!

I won't give any further information, but they are definitely running possibly 3 instances of the ALPR Database as well as CPAI with YOLOv5 6.2 on GPU and the ALPR module. It could be someone from Reddit or elsewhere that found the GitHub repository I suppose.

CPAI just detected a plate starting with DAB7nn if that helps anyone in this thread identify themselves.

Iowa

The alpr database is definitely wide open to all sorts of code injection... Could probably figure out who it is through that lol.

I do see the user in my metrics database, but I don't have anything that would identify them. It looks like only one instance to me though. About 4k plates total.
 
The alpr database is definitely wide open to all sorts of code injection... Could probably figure out who it is through that lol.

I do see the user in my metrics database, but I don't have anything that would identify them. It looks like only one instance to me though. About 4k plates total.
Correction: 1 ALPR Database, 2 Blue Iris Logins, 1 CPAI Server and what looks like a login for Home Assistant.
 
Just glad it was not me.
 
This is gonna be a pretty enormous update. Added a page similar to what Motorola has on the police computers while they're driving around.

If you leave this up, it will just update with a full screen display of the info whenever a car drives by.

Screenshot 2025-03-17 at 1.48.16 AM.png
 
Looking for input from others to work out the logic to actually make the associations for the TPMS readings.

The busier your street is, the harder it is going to be to do it accurately. In the most simplistic case with very low traffic, we can just use the timestamps and determine that if we got TPMS data within 30 seconds or so of a plate recognition, the sensors likely belong to that vehicle.

As the traffic increases, things get much more complicated. Especially considering the fact that we might get a TPMS reading from a car as far as about 50 feet away. It is possible to manually trigger a TPMS sensor to transmit, but I'm not exactly sure how it works. If anyone thinks they could figure it out and wants to read the spec for the sensors, that would be super helpful.

Devices like below can "wake up" a sensor by transmitting something very close to the sensor. That means that it's possible to do it from farther away with more power. This might be worth exploring if it could narrow down the zone we expect vehicles to be in when we receive the data.
1742209785817.png



Even still, it's a tricky problem. The solution will likely need to store multiple possibilities with varying levels of confidence and then refine the database through process of elimination over time. Some sort of elaborate guessing algorithm or way to try to make accurate guesses would make it a lot better.


With the most primitive possible reduction logic, it's still pretty helpful to have a list of sensor ID's that were nearby at the same time as the ALPR recognition. If you get TPMS off a car with no plate, you will at least have a set of plates (probably never more than like 20) that it could be.


Could be an interesting use case for a super basic custom AI model to go an estimate vehicle association probabilities at some point.
 
Looking for input from others to work out the logic to actually make the associations for the TPMS readings.

The busier your street is, the harder it is going to be to do it accurately. In the most simplistic case with very low traffic, we can just use the timestamps and determine that if we got TPMS data within 30 seconds or so of a plate recognition, the sensors likely belong to that vehicle.

As the traffic increases, things get much more complicated. Especially considering the fact that we might get a TPMS reading from a car as far as about 50 feet away. It is possible to manually trigger a TPMS sensor to transmit, but I'm not exactly sure how it works. If anyone thinks they could figure it out and wants to read the spec for the sensors, that would be super helpful.

Devices like below can "wake up" a sensor by transmitting something very close to the sensor. That means that it's possible to do it from farther away with more power. This might be worth exploring if it could narrow down the zone we expect vehicles to be in when we receive the data.
View attachment 216929


Even still, it's a tricky problem. The solution will likely need to store multiple possibilities with varying levels of confidence and then refine the database through process of elimination over time. Some sort of elaborate guessing algorithm or way to try to make accurate guesses would make it a lot better.


With the most primitive possible reduction logic, it's still pretty helpful to have a list of sensor ID's that were nearby at the same time as the ALPR recognition. If you get TPMS off a car with no plate, you will at least have a set of plates (probably never more than like 20) that it could be.


Could be an interesting use case for a super basic custom AI model to go an estimate vehicle association probabilities at some point.

I think these devices wake it up by sending pulsing an electromagnet and I think they only work when it's within inches of the sensor, but I haven't taken one apart to confirm.
 
  • Like
Reactions: algertc
Follow up question. My set-up is working fairly well however, I need some advice on the next challange I'm facing. Acquiring plate numers from two or more cars following in quick succession (reference attached photo). I know this is a loaded question as many variables are in play here, i.e. CPU/GPU speed, camera shutter speed/FPS, and lighting conditions to name a few. If this is at all possible and if some folks here have this situation working, I would be more interested in hearing about the necessary/required settings within Blue Iris that I need to tweak (assuming the hardware part is adequate). Anyone have this issue covered? Thanks.


FromSWM2.20250316_150809303.12.jpg
 
Of more importance, what is your break-time - that is what starts new alerts and is what determines if you get all the vehicles not the pre-record time.

Unfortunately this is now set to a min of 1 second whereas older versions you could go down to 0.1 second. So in theory if two cars come by in less than 1 second, it may miss one.

1710767131684.png


But this can be mitigated now by changing under motion use the "New zones/sources only (additive)" option to generate multiple triggers.
 
  • Like
Reactions: MikeLud1
Of more importance, what is your break-time - that is what starts new alerts and is what determines if you get all the vehicles not the pre-record time.

Unfortunately this is now set to a min of 1 second whereas older versions you could go down to 0.1 second. So in theory if two cars come by in less than 1 second, it may miss one.

1710767131684.png


But this can be mitigated now by changing under motion use the "New zones/sources only (additive)" option to generate multiple triggers.
Thanks. I'll give it a try.
 
Devices like below can "wake up" a sensor by transmitting something very close to the sensor. That means that it's possible to do it from farther away with more power. This might be worth exploring if it could narrow down the zone we expect vehicles to be in when we receive the data.

Even still, it's a tricky problem. The solution will likely need to store multiple possibilities with varying levels of confidence and then refine the database through process of elimination over time. Some sort of elaborate guessing algorithm or way to try to make accurate guesses would make it a lot better.

With the most primitive possible reduction logic, it's still pretty helpful to have a list of sensor ID's that were nearby at the same time as the ALPR recognition. If you get TPMS off a car with no plate, you will at least have a set of plates (probably never more than like 20) that it could be.
How much data do you need to receive before you get the ID? On my 2011 vehicle it takes 60+ seconds for my own car to get a full reading of pressures from 4 tires. But I'm guessing that is 4 complete transactions. Is a handshake enough to get a unique ID? And how unique are the unique IDs?
 
Last edited:
How much data do you need to receive before you get the ID? On my 2011 vehicle it takes 60+ seconds for my own car to get a full reading of pressures from 4 tires. But I'm guessing that 4 complete transactions. Is a handshake enough to get a unique ID? And how unique are the unique IDs?

Once the sensor transmits, it's instant. I think the reason it takes a bit in the car menu is because of the interval or the car telling them to transmit. While it's possible in theory to encounter a duplicate, the combinations should be plenty large for this. Very very very low probability of finding one.
 
  • Like
Reactions: TheWaterbug
1.8 update is about ready. The image is available on Dockerhub for anyone who wants to update. I haven't written the changelog/release notes yet and might tweak a few minor things, but mostly just styling.

I was able to use the update script to install it. Took about 30 seconds. Would recommend.


If you haven't switched to using ai_dump:&JSON instead of plate_number:&Plate, I highly recommend doing that now. Several things will not work without that.

It won't break or cause errors, you just won't be able to use certain features and the pages will look weird when things are missing. While switching that in blue iris, might as well add the bi_path for the open in blue iris button also. Below is how my payloads look:

Code:
{ "ai_dump": &JSON, "Image":"&ALERT_JPEG", "camera":"&CAM", "ALERT_PATH": "&ALERT_PATH", "ALERT_CLIP": "&ALERT_CLIP", "timestamp":"&ALERT_TIME"}


To install the mobile app, first navigate to the web UI in safari on mobile. Log in and get to the dashboard. Then, click the share button in the bottom nav bar of safari. Click add to home screen.

1742237303268.png



**Note that this is not the same at all as adding a web bookmark to your home screen. This is something called a progressive web app (PWA). There is special code that will allow it to function just like a native app once you do this.


You may have to click around a bit in the app before clicking add to home screen to get it to work. The title should show up as "ALPR" when the dialog to add to home screen pops up. If it says "ALPR database", it will just be a bookmark. Click around some more, close out and reopen, etc. It's slightly weird to add the first time, but once its added it's added. If the browser UI is showing, delete the icon from home screen and try it again.



Be sure to check the settings page and enable AI training and enter a name if you would like.
 
Last edited:
  • Like
Reactions: PeteJ
1.8 update is about ready. The image is available on Dockerhub for anyone who wants to update. I haven't written the changelog/release notes yet and might tweak a few minor things, but mostly just styling.

I was able to use the update script to install it. Took about 30 seconds. Would recommend.


If you haven't switched to using ai_dump:&JSON instead of plate_number:&Plate, I highly recommend doing that now. Several things will not work without that.

It won't break or cause errors, you just won't be able to use certain features and the pages will look weird when things are missing. While switching that in blue iris, might as well add the bi_path for the open in blue iris button also. Below is how my payloads look:

Code:
{ "ai_dump":"&JSON", "Image":"&ALERT_JPEG", "camera":"&CAM", "ALERT_PATH": "&ALERT_PATH", "ALERT_CLIP": "&ALERT_CLIP", "timestamp":"&ALERT_TIME"}


To install the mobile app, first navigate to the web UI in safari on mobile. Log in and get to the dashboard. Then, click the share button in the bottom nav bar of safari. Click add to home screen.

View attachment 216950


**Note that this is not the same at all as adding a web bookmark to your home screen. This is something called a progressive web app (PWA). There is special code that will allow it to function just like a native app once you do this.



Be sure to check the settings page and enable AI training and enter a name if you would like.

So just a docker compose pull to update, then go to then to complete the update?

Or do we need to grab the migration.sql first

Thanks!
 
When I say update script, I'm talking about these: windows Linux


That will just do everything for you. No need to do anything inside the app. Looks like the below when you run it.

View attachment 216954
@algertc Did you fix the permissions error on the linux script?

 
@algertc Did you fix the permissions error on the linux script?


Not totally sure what caused that error there. I would just download it and chmod +x then ./update.sh

The new install script downloads the update script and leaves it there with your other stuff.