Skip to main content



How can I get more log output from Stream?#

You can get more logs from Stream by adding the LOGGING env var.

Here are the levels to choose from:

  • 10 for debug
  • 20 info
  • 30 warning Example: -e LOGGING=10

Why does it seem like Stream sends the webhooks with a few seconds delay?#

There may be a few reasons for this delay:

  1. The internet connection speed may be slow. If this is the case, then try sending the webhooks without an image.

  2. The hardware running Stream may be running at out of resources. Verify this by looking at the RAM and CPU utilization at times when the webhooks seems to be delayed. If this is the case, then you will need to get a stronger machine.

  3. Perhaps the webhook target or receiver is slow in processing the requests. You can verify this by sending the webhooks to a different target such as

  4. The delay is also dependent on max_prediction_delay parameter. This parameter sets the maximum delay in seconds before a prediction is returned. Note that reducing it may lower recognition accuracy.

As always, we encourage you to examine and test the items above to see if you can increase the time to receiving the webhooks.

Would Stream ALPR accuracy improve if I increase max_prediction_delay?#

It really depends on the environment:

  1. For example, in a parking use-case where the camera can see the plate clearly from a distance as the vehicle is approaching, then there is likely no meaningful difference in ALPR accuracy.

  2. However, in cases where the camera cannot see plate as well (say due to some obstruction or because it’s a lower res camera), then increasing max_prediction_delay will give Stream a bit more time without rushing to find the best frame for the best ALPR results.

As always, we encourage you to test this parameter and compare results in your own specific environment.

What is the minimum value possible for max_prediction_delay?#

The minimum would be 0.1 seconds.

However, we don’t want to set to 0.1, because when Stream first spots the vehicle, Stream may not have a clear enough image of the plate. This may lead to an incorrectly decoded plate.

Unless you need a really, really fast real time result to say open up a gate, we recommend putting this figure at the default value.

What is the minimum value for memory_decay parameter for Stream?#

The minimum value would be 0.1 seconds.

But, for clarity, we don’t want to set it so low because then if the camera sees that same vehicle again (say 0.2 seconds later), Stream will count that same vehicle again in the ALPR results.

How can I connect Stream to a camera through a DDNS server?#

You can connect the camera through DDNS server by first making port forwarding in the router settings.

Using DDNS, the URL would look like this: rtsp://admin:[email protected]<"name of your DDNS domain">.

What does Stream Health Score mean?#

Stream Health Score is a measure on Stream’s performance on the hardware running Stream.

If the Health Score is below 70%, the machine is not fast enough. There’s a higher chance that Stream will miss license plates.

Below are some possible remedies: – Get a faster machine. See Stream Hardware Recommendations. – Make sure that no other compute intensive programs are running. – Reduce the number of cameras in Stream. – Lower the camera feed resolution. This is done outside of Stream. – Increase the sample parameter in config.ini. If the value is too high Stream may miss license plates.

How do I get timestamp of vehicles captured in Stream when processing videos?#

We indicate the timestamp of the video in position_sec field. This timestamp corresponds to when the vehicle plate was identified in the video.

How often does Stream try to resend webhooks?#

Refer to our Stream configuration guide for more details about webhooks.

If the server does not respond or produces an error, the prediction is discarded.

What does the timestamp in Stream webhooks refer to?#

The timestamp refers to when the vehicle is detected and when a plate is read.

Here’s an example: – Stream detects a vehicle at time 001 but the license plate is not visible. – Stream detects a vehicle at time 003 and the license plate is readable. – The timestamp in the webhook JSON will be 003.

What does this error message mean: “Webhook queue is full”?#

If you get this message, it means the webhook queue has reached a size of 100 and is now filled up. This is caused by the receiving server being too slow as a result of connectivity issues. When the queue is full, the new results are dropped and won’t be sent to the webhook_target.

To resolve this issue, you should optimize your webhook receiving server to be able to quickly process the requests.

What does this error message mean: “Stream failed to register camera”?#

This message means that Stream was not able to contact our servers to register the camera. This can happen if the device cannot access the Internet or if the Docker container networking does not allow access to the Internet.

To resolve this issue, make sure that Docker can connect to the Internet. You may also try running the container with HOST networking. –network host.

What does this error message in Stream mean: “There is a drop in performance”?#

The “Drop in performance” message is when Stream is running out of resources and struggles to process the video or live camera feed. This occurs for example when the CPU utilization is above 90% and/or memory utilization is above 90%.

To resolve this issue, allocate more RAM and CPU to Docker. You can reference the Stream Hardware Recommendations.

How to set FPS in Stream to optimize hardware?#

By default, Stream processes every other frame. So if you have a camera that’s processing 60 fps, Stream will process 30 frames each second. Unless the vehicles are going extremely fast, you do not need to process 30 frames per second on Stream.

Based on the vehicle speed, we recommend the following eFPS: – For vehicles traveling <30 mph → set the eFPS to 4-5. – For vehicles traveling 30-60 mph → set eFPS to 8-10. – For vehicles traveling >60 mph → set eFPS to 12.

To compute eFPS, divide the camera FPS by the Sample Rate that you set in Stream. So for example, if the camera has 30 FPS, then set sample=6 to get an eFPS = 5

Again, we encourage you to test and confirm this for your specific environment. Contact us if we can help!

What do I need to do after additional camera licenses are added to my Stream license?#

You have to restart the Stream container.

How do I test or troubleshoot Webhooks in Stream?#

The easiest way is to first test whether the ALPR events are being sent out to Refer to our Stream configuration guide for details.

To receive the Webhooks, please refer to this Script that we created specifically for Webhooks with Plate Recognizer in these programming languages: Python, Flask, Javascript/Node, C#.

Please note that the bounding boxes in the webhook are different when you use the “webhook_image = true” option. When this is turned on, the cropped vehicle image is sent along with the webhook data. The bounding boxes then refer to the position in the cropped image and not the full source image.

If you would like the original bounding boxes, you can set “webhook_image = false” or you can recover the original bounding box using the vehicle bounding box. For example:

obj[‘box’][‘xmin’] += obj[‘vehicle’][‘box’][‘xmin’]

Can Stream process a video file rather than a camera feed?#

Yes. Stream can analyze both live camera feeds as well as video files. Go here for details.

What type of video files can Stream accept?#

Stream supports all video formats FFmpeg supports.

Can I deploy Stream on Amazon Web Services (AWS), Azure or Google Cloud?#

Yes! You can run Stream on any cloud provider.

How can I update to a new verison of Stream?#

Please go here to update to a new version of Stream.

How do I install Stream via Docker for Windows.#

We recommend that you use our Plate Recognizer Installer to install Stream. Please go download the Plate Recognizer Installer.

If you strongly prefer to install via Docker, please refer to our Docker Help page.

How can I set up Stream to process a video?#

Let’s say that your Stream directory is c:users\john\documents\stream

In that Stream directory, you have KyleVideo.avi and also config.ini.

Your video file is in c:users\john\documents\stream\KyleVideo.avi

The content of config.ini should be as follows:

[cameras]     [[camera-1]] name = Camera One     url = /user-data/KyleVideo.avi     csv_file = camera-1.csv

Stream works with all the formats supported by FFmpeg.

Please see the steps to process a video file on Stream.

How do I start Stream for Thai and Jetson?#

Please refer to the additional Docker Images for Stream.

How can I configure Stream to process a camera or video feed?#

Please refer to the steps for Stream Configuration.

What is the output for Stream?#

Stream output consists of:

  1. A CSV file with full ALPR results
  2. Camera screenshots of each ALPR result
  3. Webhooks of ALPR results and accompanying images to your system

Do I need Internet access to install and run Stream?#

Yes and no.

In our standard implementation, you will need Internet access to update and/or install Stream. Thereafter, a subscription plan to Stream will “call home” a few times a month to validate the subscription. No images are sent, but only a few bytes of data are sent to validate the subscription. So flakey, intermittent Internet is OK for the Stream Subscription License.

If there is absolutely no Internet available at all, then you can go with a Perpetual License of Stream. Please contact us for more information about a Perpetual License for Stream.

To install Stream with absolutely zero Internet, please Contact Us for details.

What happens if/when the camera is accidentally turned off or resets?#

Stream will automatically reconnect with the camera when it is turned back on. If the camera remains unconnected for more than 5 hours, you will see a system notification.

What should I do if Stream is unable to connect a camera?#

First, ensure the camera is streaming by opening the RTSP url in a video player such as VLC or ffplay.

The camera might be using a different protocol, Try including this option in the Docker run command:

-e OPENCV_FFMPEG_CAPTURE_OPTIONS=”rtsp_transport;udp”

Example Docker run command with the option:

sudo docker run –rm -t –name stream -v /home/kyt/documents/stream:/user-data –user `id -u`:`id -g` -e LICENSE_KEY=XXXXX -e TOKEN=YYYYY -e OPENCV_FFMPEG_CAPTURE_OPTIONS="rtsp_transport;udp" platerecognizer/alpr-stream

If the issue persists, please let us know specifically the make/model of the camera.

How do I completely uninstall Stream?#

To uninstall Stream, just remove the image with the following Docker command:

docker image rm platerecognizer/alpr-stream

Note that the license is still tied to the original device.

Please contact us to remove the fingerprint after you uninstall Stream.

How do I resolve this error message:Connection to tcp:// failed: Connection refused.#

This error message means that Stream is not able to successfully connect to the camera.

What should I do when Stream does not correctly decode an image?#

Please let us know! Please include a 30 second video clip and we’d be happy to take a look.

Does the Stream need to be restarted if we change the config.ini file?#

Yes. When you update the config.ini file in Stream, you have to restart the Docker container.

What does this error mean: License file not found for Stream installation?#

This means that the system does not recognize the API Token or License Key for Stream.

Please double-check your API Token and License Key. Also, make sure the device has Internet connectivity.

What is the recommended hardware for Stream?#

The recommended hardware for Stream is as follows:

CPU. The main drivers of CPU utilization is the amount of vehicles observed by Stream. No GPU is needed. See examples of machines with a certain Passmark score.

  • For High Traffic (e.g. highway, busy street): CPU Passmark Score = 1200 * # Stream Cameras.
  • For Low Traffic (e.g. parking entrance, small street): CPU Passmark Score = 700 * # Stream Cameras.

To figure out the Passmark of an existing machine, just do an online search! This Google Search: “intel i5-8250u cpu @ 1.60ghz passmark” returns Passmark 5942.

RAM. The main drivers of RAM utilization is the video size and Vehicle Make Model Color (and Orientation) identification.

  • 1920×1080 video with MMC: RAM = 450M * cameras.
  • 1920×1080 video without MMC: RAM = 400M * cameras.
  • 1280 x 720 video with MMC: RAM = 400M * cameras
  • 1280×720 video without MMC: RAM = 350M * cameras.

Hard Drive Space. Stream has a fairly small footprint. The main occupants of the hard drive will be the jpg images captured and CSV from the ALPR. If you have 0.5 GB of storage, that would be plenty.

eFPS. You can set the eFPS based on the speed of the vehicles to optimize system resources.

  • For vehicles traveling <30 mph → set the eFPS to 4-5.
  • For vehicles traveling 30-60 mph → set eFPS to 8-10.
  • For vehicles traveling >60 mph → set eFPS to 12.
  • To compute eFPS, divide the camera FPS by the Sample Rate that you set in Stream. So for example, if the camera has 30 FPS, then set sample=6 to get an eFPS = 5.


  • Nvidia Jetson Xavier AGX with GPU can support 3 Stream cameras with MMC.
  • For 2 Stream camera with MMC deployment for High Traffic, an Intel Core i3-4100M @ 2.5 GHz (Passmark 2440) with 1 GB RAM should be sufficient.
  • For a 20 Stream camera deployment for highway monitoring with Vehicle MMC, you will want a machine with 24000 Passmark Score, such as an Intel Core i7-11700K @ 3.60GHz.
  • Raspberry Pi with 4 GB RAM can support 1 Stream camera with MMC at 1080p in High Traffic.
  • Jetson Nano with 4 GB RAM can support 1 Stream camera. Nano with 8 GB can support 2-3 Stream cameras.

What does this error mean: This license has already been used?#

This error message means that the license has already been used. We permit only one Stream license to be installed on only one machine. To resolve this issue, please uninstall the license from the previous machine before installing it on this machine.

If you have a Subscription for your Stream license, please go to your Account Page and then click Manage > Reset for that particular license key. If you have a Perpetual License, then unfortunately, we will not be able to recover the Perpetual License Key, per our Terms for Perpetual License.

How can I improve webhooks speed of the ALPR results?#

To decrease the time required for webhooks, you can try to (a) exclude images from the webhooks, or (b) put the webhook target/receiver on the same HOST as Stream to minimize network latency.

I cannot install Stream on a new hardware.#

Stream takes a digital fingerprint of your device specifications. As such, if you change a hardware component, Streamt will stop working. Please contact us to request for your Stream Subscription License to be reset. Please note that we are not able to reset Stream Perpetual Licences.