Full ALPR Database System for Blue Iris!

This is saying that the folders auth and config don't exist in your directory. I'm guessing Mike cloned the repo which is why they exist for him. Just create them and it should work. I'll update the readme to include that step.
Makes complete sense! Added them and all working now. thank you
 
  • Like
Reactions: algertc
@MikeLud1 Let me know if the memo for multiple plates is working properly for you. It should create a plate read record for each plate in the memo using the same time and image.
 
This is awesome! Thanks for sharing!!

Edit: @algertc is there anyway to eliminate the required login password? I tried entering a blank password in the security settings but it didn't work.

Screen Shot 2024-11-18 at 12.12.23 PM.png
 
Last edited:
This is awesome! Thanks for sharing!!

Edit: @algertc is there anyway to eliminate the required login password? I tried entering a blank password in the security settings but it didn't work.

View attachment 207530
Not sure if I would recommend it, but you should be able to do this by going into the auth.json file (the one in the persistent volume at /auth/auth.json) and setting the password hash to null. (password: null,)

It's definitely not the most secure, even with the password. I should probably switch it over to use HTTPS if people are going to use it.

Anyways, give that a try.
 
Not sure if I would recommend it, but you should be able to do this by going into the auth.json file (the one in the persistent volume at /auth/auth.json) and setting the password hash to null. (password: null,)

It's definitely not the most secure, even with the password. I should probably switch it over to use HTTPS if people are going to use it.

Anyways, give that a try.
Changing the password option to null didn't work. The dialog box still appears prompting a password. Entering a blank password creates an invalid password error

Screen Shot 2024-11-18 at 2.26.51 PM.png
.
 
@MikeLud1 Let me know if the memo for multiple plates is working properly for you. It should create a plate read record for each plate in the memo using the same time and image.
It looks to be working most of the time. Below is one instance where it did not 11/18/2024, 6:14:10 PM had two plates but only recorded one. At 11/18/2024, 6:14:06 PM there were two plates and recorded two plates. Plate KVJ5990/KYJ5990 is a parked car.

Here is the payload for the missed plate
{ "memo":"EART:70%,KVJ5990:90%", "Image":"&ALERT_JPEG", "timestamp":"2024-11-18T23:14:10.862Z" }

1731972085179.png
 
Last edited:
It looks to be working most of the time. Below is one instance where it did not 11/18/2024, 6:14:10 PM had two plates but only recorded one. At 11/18/2024, 6:14:06 PM there were two plates and recorded two plates. Plate KVJ5990/KYJ5990 is a parked car.

Here is the payload for the missed plate
{ "memo":"EART:70%,KVJ5990:90%", "Image":"&ALERT_JPEG", "timestamp":"2024-11-18T23:14:10.862Z" }

View attachment 207555

Hmm. “EART” nice. I used a regular expressions solution to filter out all the other AI objects that I thought was pretty clever at the time, but it will not work for a short vanity plate like that.

I think the best solution to still be able to handle vanity plates is going to be to create a wordlist of every single other AI label that might come from any of the models people are using, then check against that.

Do you know where I could get something like this?
 
Hmm. “EART” nice. I used a regular expressions solution to filter out all the other AI objects that I thought was pretty clever at the time, but it will not work for a short vanity plate like that.

I think the best solution to still be able to handle vanity plates is going to be to create a wordlist of every single other AI label that might come from any of the models people are using, then check against that.

Do you know where I could get something like this?
An alternative solution would be to set up the model to spit out the plates with some prefix. I’d rather it just work than create another step in the setup though, so I think the wordlist / label list might be best for now.
 
Hmm. “EART” nice. I used a regular expressions solution to filter out all the other AI objects that I thought was pretty clever at the time, but it will not work for a short vanity plate like that.

I think the best solution to still be able to handle vanity plates is going to be to create a wordlist of every single other AI label that might come from any of the models people are using, then check against that.

Do you know where I could get something like this?
The plate was not a vanity plate it was just distorted and read incorrectly. I will make a list of all of the AI labels that I used for my models and for the YOLO models
1731984217973.png
 
Do you know where I could get something like this?
Here you go

IPcam-combined Labels: - person, bicycle, car, motorcycle, bus, truck, bird, cat, dog, horse, sheep, cow, bear, deer, rabbit, raccoon, fox, skunk, squirrel, pig

IPcam-general Labels : - person, vehicle

IPcam-animal Labels: - bird, cat, dog, horse, sheep, cow, bear, deer, rabbit, raccoon, fox, skunk, squirrel, pig

IPcam-dark Labels: - Bicycle, Bus, Car, Cat, Dog, Motorcycle, Person

license-plate Labels: - DayPlate, NightPlate

Plate Label: - Plate

DeepStack_ExDark Labels: - Bicycle, Boat, Bottle, Bus, Chair, Car, Cat, Cup, Dog, Motorbike, People, Table

YOLO Labels: - person, bicycle, car, motorcycle, airplane, bus, train, truck, boat, traffic light, fire hydrant, stop sign, parking meter, bench, bird, cat, dog, horse, sheep, cow, elephant, bear, zebra, giraffe, backpack, umbrella, handbag, tie, suitcase, frisbee, skis, snowboard, sports ball, kite, baseball bat, baseball glove, skateboard, surfboard, tennis racket, bottle, wine glass, cup, fork, knife, spoon, bowl, banana, apple, sandwich, orange, broccoli, carrot, hot dog, pizza, donut, cake, chair, couch, potted plant, bed, dining table, toilet, tv, laptop, mouse, remote, keyboard, cell phone, microwave, oven, toaster, sink, refrigerator, book, clock, vase, scissors, teddy bear, hair drier, toothbrush
 
  • Like
Reactions: algertc
Changing the password option to null didn't work. The dialog box still appears prompting a password. Entering a blank password creates an invalid password error

View attachment 207549.

Alright, so it turns out I don't have a great way to turn it off without changing the way it works and adding it as a setting, which I would prefer to avoid.

Can I ask why you want to remove it? Right now it should only make you log in every 24 hours. If this is too much of an annoyance and a longer session like every 7 days would be better, I could add something to allow you to set that in the config. It should also let you save your password in your browser and try to autofill it so you don't have to type it every time.
 
  • Like
Reactions: samplenhold
Along with other improvements, I've added an alert that will check for updates and notify you if there is a newer version available.

Anyone using should make sure they have the latest schema.sql and then
Code:
docker compose down
then
Code:
docker compose pull
Code:
docker compose up -d

All of your data and settings will be saved.
 
Last edited:
  • Like
Reactions: hikky_b
I am trying to change the port of this to 5433 as I am setting it up on a synology nas where port 5432 is currently used. I have modified my compose file to contain the following under the db section. I am getting connection timeout even tho I am setting up the database settings within the dashboard to db:5433 any help would be greatly appreciated


YAML:
    ports:
      - "5433:5433"
    expose:
      - "5433"
    command: -p 5433
    healthcheck:
      test: ["CMD-SHELL", "pg_isready -U postgres -p 5433"]
      interval: 10s
      timeout: 5s
      retries: 5
 
I am trying to change the port of this to 5433 as I am setting it up on a synology nas where port 5432 is currently used. I have modified my compose file to contain the following under the db section. I am getting connection timeout even tho I am setting up the database settings within the dashboard to db:5433 any help would be greatly appreciated


YAML:
    ports:
      - "5433:5433"
    expose:
      - "5433"
    command: -p 5433
    healthcheck:
      test: ["CMD-SHELL", "pg_isready -U postgres -p 5433"]
      interval: 10s
      timeout: 5s
      retries: 5
In the docker compose, all you need to do is change the first port to the port you want. It will keep the db in the container running on 5432 and map port 5433 on the machine to 5432 in the container.

Someone else asked this also. I think I’ll add some links to separate setup instructions in the readme for other common systems people might want to deploy on.

Let me know if that works
 
@MikeLud1 Update to use the label list. Thanks.
Thanks for the update, after sleeping on it there is an easer and cleaner way. If you replace &MEMO and &PLATE with @JSON. This will have all the data needed to replace &MEMO and &PLATE. In the JSON there is the api used, if it is alpr then it is a plate and ignore all the other api in the JSON

{ "memo":"T121396C:94%,KYJ5:72%", "Image":"&ALERT_JPEG", "timestamp":"2024-11-19T23:51:19.323Z" }

JSON
[{"api":"alpr","found":{"success":true,"processMs":436,"inferenceMs":354,"predictions":[{"confidence":0.9422435760498047,"label":"Plate: T121396C","plate":"T121396C","x_min":469,"y_min":557,"x_max":614,"y_max":677},{"confidence":0.7209769487380981,"label":"Plate: KYJ5","plate":"KYJ5","x_min":210,"y_min":481,"x_max":295,"y_max":558}],"message":"Found Plate: T121396C, Plate: KYJ5","moduleId":"ALPR","moduleName":"License Plate Reader","code":200,"command":"alpr","requestId":"6a5d387c-807a-47b6-a4f7-17425b934318","inferenceDevice":"GPU","analysisRoundTripMs":633,"processedBy":"localhost","timestampUTC":"Tue, 19 Nov 2024 23:51:20 GMT"}}]