License plate verifier API

Description

The AXIS License plate verifier API contains the information and steps that makes it possible to detect and recognize license plates and whether the vehicle should be allowed to enter a restricted area such as a parking garage. It is split into three groups that handles everything from settings to how to query events and retrieve real time data from the system:

Real time events API

Description

Real time recognition events can be received from a camera using VAPIX protocols in a format where all recognition related data except images are present. For more information see .

ParameterDescription
textThe license plate text.
countryThe 3 letter country names in the Alpha-3 ISO-3166 format.
heightThe height of the license plate, measured in pixels.
widthThe width of the license plate, measured in pixels.
leftThe left coordinate of the license plate, measured in pixels.
topThe top coordinate of the license plate, measured in pixels.
listNameThe name of the list. It will be empty if the plate text cannot be found in the list, or labelled on either the Block list or Allow list if it exists.
ActionSet to either Opened or No action depending on whether an application configuration has occurred.
consumedTimeThe license plate recognition time, measured in milliseconds (ms).

Package sample

<tt:MetadataStream xmlns:tt="http://www.onvif.org/ver10/schema">
  <tt:Event xmlns:tt="http://www.onvif.org/ver10/schema">
    <wsnt:NotificationMessage xmlns:tns1="http://www.onvif.org/ver10/topics" xmlns:tnsaxis="http://www.axis.com/2009/event/topics" xmlns:wsnt="http://docs.oasis-open.org/wsn/b-2" xmlns:wsa5="http://www.w3.org/2005/08/addressing">
      <wsnt:Topic Dialect="http://docs.oasis-open.org/wsn/t-1/TopicExpression/Simple">tnsaxis:CameraApplicationPlatform/ALPV.AllPlates</wsnt:Topic>
        <wsnt:ProducerReference>
          <wsa5:Address>uri://c37d4bf5-fa69-498d-8294-e0c8ade51ded/ProducerReference</wsa5:Address>
        </wsnt:ProducerReference>
        <wsnt:Message>
          <tt:Message UtcTime="2021-05-20T11:54:21.894000Z">
            <tt:Source>
            </tt:Source>
            <tt:Data>
            <tt:SimpleItem Name="consumedTime" Value="153" />
            <tt:SimpleItem Name="frame_timestamp" Value="1288416958" />
            <tt:SimpleItem Name="carMoveDirection" Value="unknown" />
            <tt:SimpleItem Name="carState" Value="new" />
            <tt:SimpleItem Name="action" Value="No action" />
            <tt:SimpleItem Name="capture_timestamp" Value="1621511661894" />
            <tt:SimpleItem Name="width" Value="168" />
            <tt:SimpleItem Name="carID" Value="1139066" />
            <tt:SimpleItem Name="top" Value="354" />
            <tt:SimpleItem Name="country" Value="PRT" />
            <tt:SimpleItem Name="left" Value="539" />
            <tt:SimpleItem Name="height" Value="28" />
            <tt:SimpleItem Name="listName" Value="" />
            <tt:SimpleItem Name="text" Value="II04458" />
          </tt:Data>
        </tt:Message>
      </wsnt:Message>
    </wsnt:NotificationMessage>
  </tt:Event>
</tt:MetadataStream>

Supported events

EventDescription
ALPV.ALLPlatesA general metadata event that is always available and contains all data from the LPR engine. The event can be sent several times for each individual license plate:

New:

Used when detecting a new license plate.

Update:

Used when something has changed in the LPR package.

Lost:

Used when a vehicle has left the frame (+ 10 seconds after the latest detection).
Example
<tt:MetadataStream xmlns:tt="http://www.onvif.org/ver10/schema">
  <tt:Event xmlns:tt="http://www.onvif.org/ver10/schema">
    <wsnt:NotificationMessage xmlns:tns1="http://www.onvif.org/ver10/topics" xmlns:tnsaxis="http://www.axis.com/2009/event/topics" xmlns:wsnt="http://docs.oasis-open.org/wsn/b-2" xmlns:wsa5="http://www.w3.org/2005/08/addressing">
      <wsnt:Topic Dialect="http://docs.oasis-open.org/wsn/t-1/TopicExpression/Simple">tnsaxis:CameraApplicationPlatform/ALPV.AllPlates</wsnt:Topic>
      <wsnt:ProducerReference>
        <wsa5:Address>uri://c37d4bf5-fa69-498d-8294-e0c8ade51ded/ProducerReference</wsa5:Address>
      </wsnt:ProducerReference>
      <wsnt:Message>
        <tt:Message UtcTime="2021-05-17T13:40:12.509000Z">
          <tt:Source>
          </tt:Source>
          <tt:Data>
            <tt:SimpleItem Name="consumedTime" Value="104" />
            <tt:SimpleItem Name="frame_timestamp" Value="1039287603" />
            <tt:SimpleItem Name="carMoveDirection" Value="unknown" />
            <tt:SimpleItem Name="carState" Value="new" />
            <tt:SimpleItem Name="action" Value="No action" />
            <tt:SimpleItem Name="capture_timestamp" Value="1621258812509" />
            <tt:SimpleItem Name="width" Value="192" />
            <tt:SimpleItem Name="carID" Value="1087595" />
            <tt:SimpleItem Name="top" Value="564" />
            <tt:SimpleItem Name="country" Value="PRT" />
            <tt:SimpleItem Name="left" Value="625" />
            <tt:SimpleItem Name="height" Value="32" />
            <tt:SimpleItem Name="listName" Value="" />
            <tt:SimpleItem Name="text" Value="RZ3160" />
          </tt:Data>
        </tt:Message>
      </wsnt:Message>
    </wsnt:NotificationMessage>
  </tt:Event>
</tt:MetadataStream>
EventDescription
ALPV.List1Allow
ALPV.List2Block
ALPV.List3Custom
ALPV.NotinList
Triggered events whose name is dependent on the list name in the application. Please note that these events are only available when a relay is connected.
active = 1
active = 0
Example
<tt:MetadataStream xmlns:tt="http://www.onvif.org/ver10/schema">
  <tt:Event xmlns:tt="http://www.onvif.org/ver10/schema">
    <wsnt:NotificationMessage xmlns:tns1="http://www.onvif.org/ver10/topics" xmlns:tnsaxis="http://www.axis.com/2009/event/topics" xmlns:wsnt="http://docs.oasis-open.org/wsn/b-2" xmlns:wsa5="http://www.w3.org/2005/08/addressing">
      <wsnt:Topic Dialect="http://docs.oasis-open.org/wsn/t-1/TopicExpression/Simple">tnsaxis:CameraApplicationPlatform/ALPV.NotInList</wsnt:Topic>
      <wsnt:ProducerReference>
        <wsa5:Address>uri://c37d4bf5-fa69-498d-8294-e0c8ade51ded/ProducerReference</wsa5:Address>
      </wsnt:ProducerReference>
      <wsnt:Message>
        <tt:Message UtcTime="2021-05-17T15:42:54.961154Z" PropertyOperation="Changed">
          <tt:Source>
          </tt:Source>
          <tt:Key>
          </tt:Key>
          <tt:Data>
            <tt:SimpleItem Name="active" Value="0" />
          </tt:Data>
        </tt:Message>
      </wsnt:Message>
    </wsnt:NotificationMessage>
  </tt:Event>
</tt:MetadataStream>
EventDescription
ALPV.Roi1
ALPV.Roi2
Triggered events.
active = 1
active = 0
Example
<tt:MetadataStream xmlns:tt="http://www.onvif.org/ver10/schema">
  <tt:Event xmlns:tt="http://www.onvif.org/ver10/schema">
    <wsnt:NotificationMessage xmlns:tns1="http://www.onvif.org/ver10/topics" xmlns:tnsaxis="http://www.axis.com/2009/event/topics" xmlns:wsnt="http://docs.oasis-open.org/wsn/b-2" xmlns:wsa5="http://www.w3.org/2005/08/addressing">
      <wsnt:Topic Dialect="http://docs.oasis-open.org/wsn/t-1/TopicExpression/Simple">tnsaxis:CameraApplicationPlatform/ALPV.Roi1</wsnt:Topic>
      <wsnt:ProducerReference>
        <wsa5:Address>uri://c37d4bf5-fa69-498d-8294-e0c8ade51ded/ProducerReference</wsa5:Address>
      </wsnt:ProducerReference>
      <wsnt:Message>
        <tt:Message UtcTime="2021-05-17T14:00:01.613199Z" PropertyOperation="Changed">
          <tt:Source>
          </tt:Source>
          <tt:Key>
          </tt:Key>
          <tt:Data>
            <tt:SimpleItem Name="active" Value="1" />
          </tt:Data>
        </tt:Message>
      </wsnt:Message>
    </wsnt:NotificationMessage>
  </tt:Event>
</tt:MetadataStream>
EventDescription
ALPV.PlateIN
ALPV.PlateOUT
Triggered events. Please note that these events are only available when a relay is connected.
active = 1
active = 0
Example
<tt:MetadataStream xmlns:tt="http://www.onvif.org/ver10/schema">
  <tt:Event xmlns:tt="http://www.onvif.org/ver10/schema">
    <wsnt:NotificationMessage xmlns:tns1="http://www.onvif.org/ver10/topics" xmlns:tnsaxis="http://www.axis.com/2009/event/topics" xmlns:wsnt="http://docs.oasis-open.org/wsn/b-2" xmlns:wsa5="http://www.w3.org/2005/08/addressing">
      <wsnt:Topic Dialect="http://docs.oasis-open.org/wsn/t-1/TopicExpression/Simple">tnsaxis:CameraApplicationPlatform/ALPV.PlateIn</wsnt:Topic>
      <wsnt:ProducerReference>
        <wsa5:Address>uri://c37d4bf5-fa69-498d-8294-e0c8ade51ded/ProducerReference</wsa5:Address>
      </wsnt:ProducerReference>
      <wsnt:Message>
        <tt:Message UtcTime="2021-05-17T16:24:19.596468Z" PropertyOperation="Changed">
          <tt:Source>
          </tt:Source>
          <tt:Key>
          </tt:Key>
          <tt:Data>
            <tt:SimpleItem Name="active" Value="1" />
          </tt:Data>
        </tt:Message>
      </wsnt:Message>
    </wsnt:NotificationMessage>
  </tt:Event>
</tt:MetadataStream>

HTTP management API

This API is used when you want to query for either events or managing settings.

Event search and download

Use this method when you want to download recorded data from the database in either a filtered or unfiltered format. All parameters listed below can be used independently and the string inputs are treated as not case sensitive.

Request

Access control

admin

Method

GET

http://<servername>/local/fflprapp/search.cgi?<argument>=<value>[&<argument>=<value>...]
ArgumentDescription
TextThe text on the license plate, either all or part of it, such as AA11,AA1122BB or AA1134XX.
LimitThe number of events in a reply package, such as the SQL LIMIT clause.
OffsetThe amount of records that should be skipped before filling a reply, such as the SQL OFFSET clause.
timestampFromThe timestamp that filter records by time, measured in milliseconds (ms). May be used without TimestampTo.
timestampToThe timestamp that filter records by time, measured in milliseconds (ms). May be used without TimestampFrom.
countryThe name of a country or regional part of it.
ActionThe filter used when an action is taken. 1 = opened and 0 = no action.
Example URL
http://10.0.3.100/local/fflprapp/search.cgi?timestampfrom=1467648840000000&timestampto=146764 8 874652000&text=&action=&country=&limit=11&offset=0

http://10.0.3.100/local/fflprapp/search.cgi?limit=20

Response

FieldDescription
TSA license plate timestamp presented in a Unix format and measured in milliseconds.
MOD_TSA license plate timestamp presented in a readable format.
CAR_IDThe vehicle ID, stored on a database.
LPRThe license plate text.
RTIMEThe time spent for the application to recognise a license plate, measured in milliseconds.
ACTIONUsed when a barrier action is taken. 1 = opened and 0 = no action.
ACT_PARAMDeprecated.
THRESHOLDThe value of the license plate, based on range and precision of the camera (float).
ROI_XROI coordinates and dimensions.
ROI_Y
ROI_W
ROI_H
LP_XLicense plate coordinates and dimensions.
LP_Y
LP_W
LP_H
LP_BMPThe URL for a license plate image stored on a camera. Addhttp://<servername>/local/fflprapp/ when using it in a request.
ROI_BMPThe URL for a ROI image, stored on a camera. Addhttp://<servername>/local/fflprapp/ when using it in a request.
COUNTRYThe 3–letter country name according to the Alpha-3 ISO-3166 format.
DIRECTION0 = Unknown
1 = Undefined
2 = In
3 = Out
Response
<events>
  <currentTimestampUs>1548942667892206</currentTimestampUs>
  <event>
    <TS>1548941557723043</TS>
    <MOD_TS>2019-01-31 13:32:37 GMT<MOD_TS>
    <END_TS>0</END_TS>
    <CAR ID>17</CAR_ID>
    <LPR>ABC1234</LPR>
    <RTIME>140.0</RTIME>
    <ACTION>100</ACTION>
    <ACT PARAM/>
    <THRESHOLD>0.745121419429779</THRESHOLD>
    <ROI_X>96</ROI_X>
    <ROI_Y>54</ROI_Y>
    <ROI_W>1728</ROI_W>
    <ROI_H>972</ROI_H>
    <LP_X>224</LP_X>
    <LP_Y>932</LP_Y>
    <LP_W>92</LP_W>
    <LP_H>28</LP_H>
    <ROI_ID>1</ROI_ID>
    <ROI_IDU>0</ROI_IDU>
    <FRAMES>0</FRAMES>
    <DISTANCE>0</DISTANCE>
    <SPEED>0</SPEED>
    <DIRECTION>0</DIRECTION>
    <LP_BMP>tools.cgi?action=getImage&name=3/20190131133237_723075lp_ABC1234_35133.png</LP_BMP>
    <ROI_BMP>tools.cgi?action=getImage&name=3/20190131133237_723075lp_ABC1234_35133.png</ROI_BMP>
    <COUNTRY>GBR</COUNTRY>
  </event>
</events>

List management

Use this method when you want to read and update the allow and/or block list in the camera.

Example: Allow
<?xml version="1.0" encoding="utf-8"?>
<bw_list mode="allow">
  <s>ZZ0000DD</s>
  <s>ZZ0999DD</s>
</bw_list>
Example: Block
<?xml version="1.0" encoding="utf-8"?>
<bw_list mode="block">
  <s>ZZ12300DD</s>
  <s>ZZ2229DD</s>
</bw_list>

Get list request

Use this method when you want to retrieve a list of license plate numbers.

Access control

admin

Method

GET

Allow_list syntax
http://<servername>/local/fflprapp/allow_list.cgi
Response
<bw_list mode="allow">
  <s>ABC123</s>
  <s>ACB567</s>
</bw_list>
Block_list syntax
http://<servername>local/fflprapp/block_list.cgi
Response
<bw_list mode="block">
  <s>CBA321</s>
  <s>BCC231</s>
</bw_list>

Update list request

Use this method when you want to update the list by either adding or removing a single license plate.

Note
Please note that single plate entries are only supported up to AXIS License Plate Verifier version 2.0.
Access control

admin

Method

POST

Update Allow list
http://<servername>/local/fflprapp/allow_list.cgi
Command line example
curl -i -X POST -H "Content-Type: text/xml" --anyauth -uroot:pass http://192.168.1.1/local/fflprapp/allow_list.cgi --data "<?xml version=\"1.0\" encoding=\"UTF-8\" ?><bw_list mode="allow"><s>ABC123</s><s>CBA000</s></bw_list>
Update block list
http://<servername>/local/fflprapp/block_list.cgi
Command line example
curl -i -X POST -H "Content-Type: text/xml" --anyauth -uroot:pass http://192.168.1.1/local/fflprapp/block_list.cgi --data "<?xml version=\"1.0\" encoding=\"UTF-8\" ?><bw_list mode="block"><s>XYZ321</s><s>VWQ456</s></bw_list>

Please note that when updating the lists, you need to post the complete lists as the API currently doesn’t support updating single entries.

Add a single plate to the list

curl --trace-ascii trace.txt --anyauth -u "root:pass" -X GET "http://10.0.3.176:8080/local/fflprapp/api.cgi?api=addplate&plate=testA,testplate&list=allow"
ParameterDescription
testAThe license plate.
testplateThe description.
test%20AThe license plate with added space.

While adding a plate it is possible to set the plate description.

Remove a single plate from the list

curl --trace-ascii trace.txt --anyauth -u "root:pass" -X GET "http://10.0.3.176:8080/local/fflprapp/api.cgi?api=delplate&plate=testA&list=allow"
ParameterDescription
delplateThe license plate.

Export API

Use this method when you want to export either the Block or Allow list to a camera.

Export Block list

http://<servername>/local/fflprapp/api.cgi?api=exportblock
Command line example
curl -o /tmp/fflprapp_block.csv --anyauth -u "root:pass1234" -X GET "http://10.0.3.167/local/fflprapp/api.cgi?api=exportblock"

Export Allow list

http://<servername>/local/fflprapp/api.cgi?api=exportallow
Command line example
curl -o /tmp/fflprapp_block.csv --anyauth -u "root:pass1234" -X GET "http://10.0.3.167/local/fflprapp/api.cgi?api=exportallow"

Upload API

Use this method when you want to upload the Allow or Block list to your camera as a .csv file.

http://<servername>/local/fflprapp/upload.cgi

Commands

Create a new list
http://<servername>/local/fflprapp/upload.cgi?command=new&list=<file name>.csv
Upload data
http://<servername>/local/fflprapp/upload.cgi?command=upload&list=<file name>.csv
Save and apply
http://<servername>/local/fflprapp/upload.cgi?command=save&list=<file name>.csv
Example
#!/bin/bash
#example:
#./send_list.sh block root:pass 10.0.3.167 block_list.csv
#./send_list.sh allow root:pass 10.0.3.167 allow_list.csv
#set -x
#clean temporary folder
rm -rf .$1
#recreate temporary folder .block or .allow
mkdir .$1
#go to temporary folder
cd .$1
#split input file in small chunks
split -l 500 ../$4
#Create new list
curl --anyauth -u "$2" -X POST -d "command=new&list=$1"
http://$3/local/fflprapp/upload.cgi
#upload data for
i in `ls`;do
curl --anyauth -u "root:pass1234" -X POST -d "command=upload&list=$1" - data-urlencode "data@$i" http://$3/local/fflprapp/upload.cgi done
#save&apply list
curl --anyauth -u "$2" -X POST -d "command=save&list=$1" http://$3/local/fflprapp/upload.cgi
#leave temporary folder
cd .. #data in temporary folder not deleted for checking !

Get statistics

Use this method when you want to retrieve a list containing statistics for events, such as points of interests, country of origin, etc.

Without conditions
http://10.0.3.176:8080/local/fflprapp/search.cgi?limit=0
With conditions
http://10.0.3.176:8080/local/fflprapp/search.cgi?timestampform=15940980000000xtampto=1594130400000000& text=R&action=1&country=&ro1_id=1&car_direction=3&limit=11&offset=0&format=0&limit=0
Response
<events>
<currentTimestampUs>1594113488922244</currentTimestampUs>
  <vcount>
    <direction>
      <in>0</in>
      <out>6</out>
      <unk>0</unk>
    </direction>
    <list>
      <blocklist>0</blocklist>
      <allowlist>0</allowlist>
      <nonelist>6</nonelist>
    </list>
    <roi>
      <roi1>6</roi1>
      <roi2>0</roi2>
    </roi>
    <total>6</total>
  </vcount>
</events>

Webservice API

This API is used when you want to push data to a configured server on the network whenever a plate is detected using either HTTP or TCP. Using HTTP makes it possible access the metadata (i.e. the plate numbers) and retrieve an image of the plate or a full frame image depending on the settings in the Save full frame option.

List configuration

Request

Access control

admin

Method

GET

http://<servername>/local/fflprapp/cloud.cgi
Response
<?xml version="1.0" encoding="utf-8"?>
<cloud_config>
  <cloud_url>10.13.24.13/alpv/receive.php</cloud_url>
  <latitude>50.418114</latitude>
  <longitude>30.476213</longitude>
  <sensorProviderID>defaultID</sensorProviderID>
  <protocol>1</protocol>
  <enable>false</enable>
</cloud_config>
FieldDescription
cloud_urlThe URL or IP address to which the data should be pushed in the format <IP>:port/path. There won’t be any path present when using the TCP option, only the IP and port.
latitudeThe camera latitude.
longitudeThe camera longitude.
sensorProviderIDAn identifier for the camera that will be sent with all requests when running multiple cameras in order to separate them.
protocol0: TCP
1: HTTP
enabletrue: Function is enabled.
false: Function is disabled.

Update configuration

Access control

admin

Method

POST

http://<servername>/local/fflprapp/cloud.cgi
Example
curl -i -X POST -H "Content-Type: text/xml" --anyauth -uroot:pass http://192.168.1.1/local/fflprapp/cloud.cgi -data "<?xml version=\"1.0\" encoding=\"UTF-8\" ?><cloud config><cloud url>10.13.24.13:7865</cloud url><latitude>50.418114</latitude><longitude>30.476213</longitude><sensorProviderID>defaultID</sensorProviderID><protocol>0</protocol><enable>true</enable></cloud_config>"

Receiving the data

Data format of received data

TokenTypeFormat / ValueDescription
packetCounterUnsigned integerThe counter for sent packages. Starts on 1 after a successful connection and resets upon re-connecting.
DatetimeStringYYYYMMDD
HHMMSSFFF[+HHMM]
Timestamp for the data:
YYYY = year
MM = month
DD = day
HH = hours
MM = minutes
SS = seconds
FFF = milliseconds
HHMM = optional timezones (hours, minutes)
plateTextUnicode string\u0041\u0041….The plate number presented in unicode.
plateCountryASCII string[DNK, .......UKR]The country code, according to ISO 3166-1 alpha-3
plateConfidenceFloatThe recognition confidence, ranging from 0.5 (least confident) to 0.9 (most confident).
carStateASCII string[new, updated]The event type.
geotag: {"lat":, "lon":}JSON objects with floats50.418114,30.476213Latitude and longitude.
imageTypeASCII string[plate, frame]The kind of attached image: either a plate only rectangle with the plate number or the full frame.
plateImageTypeASCII string[png, jpeg, bmp]The format of the attached image.
plateImageSizeUnsigned long0The size of an attached image (in bytes). Will be 0 when using TCP.
carMoveDirectionStringunk
in
out
The direction of the car. A configuration needs to made in the GUI for this value to be accurate by pointing the arrow in the driving direction.
timeProcessingUnsigned integerThe time it takes for an image to process, measured in milliseconds.
plateCoordinatesArray of unsigned integers[left, top, width, height]The location and size of the plate in the image. This is used when you want to configure the application to send full frames so that a plate can be highlighted by the receiver.
carIDUnsigned longThe internal ID for the plate.
GEOtargetStringCameraAlways set to the camera for the AXIS License plate verifier.
sensorProviderIDASCII stringThe readable ID as specified in the configuration.

Using TCP

Use this method when you want to make the server listen for connections on the port specified in your configuration. To do this, a JSON needs to be sent with the specified fields from the previous chapter.

Example
{
  "packetCounter":"11890300",
  "capture_timestamp":"1623405938252",
  "frame_timestamp":"0",
  "capture_ts":"1623405938252000000",
  "datetime":"20210611 130538252",
  "plateText":"\u0052\u004c\u0045\u0031\u0031\u0036\u0038\u0034",
  "plateUnicode":"\u0052\u004c\u0045\u0031\u0031\u0036\u0038\u0034",
  "plateUTF8":"RLE11684",
  "plateASCII":"RLE11684",
  "plateCountry":"POL",
  "plateConfidence":"0.719034",
  "carState":"lost",
  "roiID":"2",
  "geotag":{
    "lat": 50.418114,
    "lon": 30.476213
  },
  "imageType": "plate",
  "plateImageType": "jpg",
  "plateImageSize": "0",
  "carMoveDirection":"in",
  "timeProcessing":"0",
  "plateCoordinates":[1185, 532, 140, 28],
  "plateCoordinatesRelative":[1030, 196, 140, 28],
  "carID":"1144696",
  "GEOtarget":"Camera",
  "imagesURI":[
    "/local/fflprapp/tools.cgi?action=getImage&name=45/20210611130538_785523lp_RLE11684_11890182.jpg",
    "/local/fflprapp/tools.cgi?action=getImage&name=44/20210611130538_547764roi_RLE11684_11890181.jpg"
  ],
  "imageFile":"/var/spool/storage/SD_DISK/fflprapp/images/44/20210611130538_547764roi_RLE11684_11890181.jpg",
  "camera_info":{
    "SerialNumber":"ACCC8ED3290D",
    "ProdShortName":"AXIS P1445-LE-3",
    "MACAddress":"AC:CC:8E:D3:29:0D"
  },
  "sensorProviderID":"defaultID_176"
}

Using HTTP

Use this method when you want to use a web service capable of handling incoming HTTP POST requests that needs to be set up with the IP and path specified in the configuration.

Content is sent from the camera to the server as a HTTP POST request with the Content-type: multipart/formdata.

Example
POST /alpv/receive.php HTTP/1.1\r\n
Host: 10.13.24.13\r\n
Content-Length: 7160\r\n
Content-Type: multipart/form-data; boundary=------------------------3df4e8eee91da308\r\n
--------------------------3df4e8eee91da308
Content-Disposition: form-data; name="event";
filename="20190204103017_10536event_7000175.json" Content-Type: application/octet-stream
{
  "packetCounter":"11890300",
  "capture_timestamp":"1623405938252",
  "frame_timestamp":"0",
  "capture_ts":"1623405938252000000",
  "datetime":"20210611 130538252",
  "plateText":"\u0052\u004c\u0045\u0031\u0031\u0036\u0038\u0034",
  "plateUnicode":"\u0052\u004c\u0045\u0031\u0031\u0036\u0038\u0034",
  "plateUTF8":"RLE11684",
  "plateASCII":"RLE11684",
  "plateCountry":"POL",
  "plateConfidence":"0.719034",
  "carState":"lost",
  "roiID":"2",
  "geotag":{
    "lat": 50.418114,
    "lon": 30.476213
  },
  "imageType": "plate",
  "plateImageType": "jpg",
  "plateImageSize": "0",
  "carMoveDirection":"in",
  "timeProcessing":"0",
  "plateCoordinates":[1185, 532, 140, 28],
  "plateCoordinatesRelative":[1030, 196, 140, 28],
  "carID":"1144696",
  "GEOtarget":"Camera",
  "imagesURI":[
    "/local/fflprapp/tools.cgi?action=getImage&name=45/20210611130538_785523lp_RLE11684_11890182.jpg",
    "/local/fflprapp/tools.cgi?action=getImage&name=44/20210611130538_547764roi_RLE11684_11890181.jpg"
  ],
  "imageFile":"/var/spool/storage/SD_DISK/fflprapp/images/44/20210611130538_547764roi_RLE11684_11890181.jpg",
  "camera_info":{
    "SerialNumber":"ACCC8ED3290D",
    "ProdShortName":"AXIS P1445-LE-3",
    "MACAddress":"AC:CC:8E:D3:29:0D"
  },
  "sensorProviderID":"defaultID_176"
}
--------------------------3df4e8eee91da308
Content-Disposition: form-data; name="image";
filename="20190204103016_999776lp_LBE397_7000175.png" Content-Type: application/octetstream
<IMAGE DATA>
--------------------------3df4e8eee91da308--

PHP example of a receiver

Use this method when you want to receive data that can be stored as files using PHP.

<?php

# Create files in the following directory
$uploaddir = 'log/';

# Set path and filename where to store the event
$uploadfile = $uploaddir . basename($_FILES['event']['name']);

# Store the JSON file on disk
if (move_uploaded_file($_FILES['event']['tmp_name'], $uploadfile)) {
  # All good, do other things here
} else {
  # Failed moving file, do proper error handling
}

# Set path end filename where to store the image
$uploadfile = $uploaddir . basename($_FILES['image']['name']);

# Store the image file on disk
if (move_uploaded_file($_FILES['image']['tmp_name'], $uploadfile)) {
  # All good, do other things here
} else {
  # Failed moving file, do proper error handling
}

?>