Skip to main content

FAQ

System Requirements

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.

Installation

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.

caution

Whether you are running your Windows operating system as a virtual machine on-premise or in a cloud provider instance, please ensure it can perform nested virtualization, otherwise, you will not be able to run docker, therefore neither will the Stream.

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

Yes! You can run Stream on any cloud provider.

If you want to run a Windows OS instance, be sure to read the caution note at this point.

How do I start Stream for Thai and Jetson?

Please refer to the additional Docker Images for Stream.

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, Stream 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 Licenses.

How do I resolve this error message: Connection to tcp://192.168.0.111:8080?timeout=0 failed: Connection refused.

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

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 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 do I manage a Docker container?

Below is a short summary of the basic commands used in Docker:

  • docker ps is to list running containers
  • docker stop container_name/container_id is to stop container execution
  • docker rm container_name/container_id is to remove container
  • docker start container_name/container_id is to start an existing container
  • docker restart container_name/container_id is to restart container

Example of command to restart stream: docker restart stream

Configuration

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!

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.

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.

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.

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 can I prevent Stream from hogging all the CPU when running multiple containers on the same machine?

When you've got multiple containers running on the same machine alongside Stream, it's crucial to ensure everyone gets their fair share of processing power, we may utilize this Docker Runtime Options to limit the CPU usage of Stream.

Example: docker run... --cpus=1.5

If the host machine has two CPUs and you set --cpus="1.5", the container is guaranteed at most one and a half of the CPUs.

Camera Source

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:password@<"name of your DDNS domain">.

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

You have to restart the Stream container.

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

Please refer to the steps for Stream Configuration.

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. See max_reconnection_delay.

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.

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.

Video Source

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

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

What type of video files can Stream accept?

Stream supports all video formats FFmpeg supports.

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

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 long Stream takes to analyze a video file?

It depends on the CPU PassMark rate and the sample rates set in the Stream configuration.

In the following table, you can see the results of several tests we made over the same two hours video file used as an example to establish a benchmark:

CPU PassMark32001000020000
Sample=137 min27 min20 min
Sample=230 min22 min17 min
Sample=426 min18 min14 min
Sample=821 min17 min12 min

Stream Output

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

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

  • When the input is a video file, position_sec is the number of seconds since the start of the video.
  • When the input is a camera, position_sec is the number of seconds since Stream started.

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

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: docker run... -e LOGGING=10

Is there a way to add visualization on plate results inside a video?

Yes! You can use this script to add visualization of the vehicles and license plates identified onto a video file.

Please go here to get the Stream Visualization Script. Check the README file for the setup instructions.

Could I remove older images from the Stream output?

Yes! You can use this script to remove images that are older than xx hours in your Stream folder.

Please go here to get the Stream Images Removal Script and the installation setup.

Webhooks

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 seem 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 https://webhook.site/

  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.

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.

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 https://Webhook.site. 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’]

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.

How do I not save vehicle or plates images in my local Stream folder when forwarding webhook data?

To not save images locally, do not set either csv or jsonlines as output in the configuration file. For example:

[[camera-1]]
active = yes
url = rtsp://localhost:8554/live
#csv_file = $(camera)_%y-%m-%d.csv
webhook_targets = parkpow

Others

How can I update to a new version of Stream?

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

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.

What does this error message mean: Stream periodically "pings home" to validate the subscription. Please provide Internet connectivity and re-run the Docker command to reactivate Stream.

This error message indicates that the Stream service could not establish communication with the server to authenticate the license. This may happen if the device lacks internet connectivity, particularly to our server. It may also occur if the networking configuration of the Docker container does not permit internet access.

To solve this problem, ensure that Docker can establish a connection to our servers. You can verify this by clicking here. If you are certain that access is allowed, run the stream container with the HOST network using the --network host flag.

Floating button icon
CTRL + .