Отримання інформації про розпізнаний номерний знак з ANPR камер HIKVISION 7 серії через використання ISAPI
Підписка на подію
Для того, щоб отримати подію розпізнавання номеру автомобіля камерою (серії камер 7A26 та 4А26), необхідно підняти сервер, здатний обробляти запити.
Після цього необхідно відіслати відповідну команду (/ISAPI/Event/notification/httpServers/) на камеру, аби камера знала, куди відсилати подію (також є можливість зберігати зображення з номером).
Приклад:
ip камери: 192.168.30.173,
ip сервера: 192.168.30.139,
port сервера: 5008,
повний url : http://192.168.30.139:5008/http_alarm.
Команда для камери: http://192.168.30.173/ISAPI/Event/notification/httpServers/
метод – PUT, digest auth (login, password)
ulr - http://192.168.30.173/ISAPI/Event/notification/httpServers/
========
<HttpServer version="2.0"
xmlns="http://www.hikvision.com/ver20/XMLSchema">
<id>1</id>
<url>http://192.168.30.139:5008/http_alarm</url>
<enabled>true</enabled>
<protocolType>HTTP</protocolType>
<parameterFormatType>XML</parameterFormatType>
<addressingFormatType>ipaddress</addressingFormatType>
<ipAddress>192.168.30.139</ipAddress>
<portNo>5008</portNo>
<userName></userName>
<httpAuthenticationMethod>none</httpAuthenticationMethod>
<eventType>all</eventType>
<uploadPicture>false</uploadPicture>
<pictureType>big</pictureType>
</HttpServer>
Для отримання налаштувань камери можна використати ту саму команду, але змінити метод на GET (щоб видалити - DELETE) .
GET http://192.168.30.173/ISAPI/Event/notification/httpServers/
DELETE http://192.168.30.173/ISAPI/Event/notification/httpServers/<:id>
Отримання інформації про номер та фото
Після цього, на вказаний url (http://192.168.30.139:5008/http_alarm) будуть приходити події формату: [('channelID', '1'), ('dateTime', '20191228T121448 0200'), ('eventType', 'vehicleDetection'), ('country', 'Ukraine'), ('licensePlate', 'AA7367EA'), ('lane', '1'), ('direction', 'forward'), ('confidenceLevel', '100')].
dateTime = request.args.get('dateTime')
plate_number = request.args.get('licensePlate')
А також зображення (request.data).
with open('{}\\{}.jpg'.format(path, id), 'wb') as handler:
handler.write(request.data)
Відправити POST команду на камеру з відповідним пейлоадом.
Команда: http://192.168.30.176/ISAPI/ContentMgmt/search
Digest Auth: login, password
Пейлоад:
<CMSearchDescription>
<searchID>1</searchID>
<trackIDList>
<trackID>103</trackID>
</trackIDList>
<timeSpanList>
<timeSpan>
<startTime>2022-10-24T21:00:00Z</startTime>
<endTime>2022-10-25T20:59:59Z</endTime>
</timeSpan>
</timeSpanList>
<maxResults>50</maxResults>
</CMSearchDescription>
Приклад відповіді:
<?xml version="1.0" encoding="UTF-8"?>
<CMSearchResult version="2.0"
xmlns="http://www.hikvision.com/ver20/XMLSchema">
<searchID>{1}</searchID>
<responseStatus>true</responseStatus>
<responseStatusStrg>MORE</responseStatusStrg>
<numOfMatches>1</numOfMatches>
<matchList>
<searchMatchItem>
<sourceID>{0000000000-0000-0000-0000-000000000000}</sourceID>
<trackID>103</trackID>
<timeSpan>
<startTime>2022-10-25T11:26:30Z</startTime>
<endTime>2022-10-25T11:26:30Z</endTime>
</timeSpan>
<mediaSegmentDescriptor>
<contentType>picture</contentType>
<codecType>jpeg</codecType>
<playbackURI>http://192.168.30.176/ISAPI/Streaming/tracks/103/?starttime=20221025T112630Z&endtime=20221025T112630Z&name=ch01_00000000000000034@20221025132630_AB9999AC&size=195434</playbackURI>
</mediaSegmentDescriptor>
<metadataMatches>
<metadataDescriptor>recordType.meta.hikvision.com/vehicleDetection</metadataDescriptor>
</metadataMatches>
</searchMatchItem>
</matchList>
</CMSearchResult>
Де, спарсивши, значення playbackURI ви можете завантажити зображення GET запитом (http://192.168.30.176/ISAPI/Streaming/tracks/103/?starttime=20221025T112630Z&endtime=20221025T112630Z&name=ch01_00000000000000034@20221025132630_AB9999AC) і отримати номер автомобіля (AB9999AC).
Керування тривожним виходом
Відправити PUT команду на камеру з відповідним пейлоадом (щоб увімкнути тригер):
url='http://{}:{}/ISAPI/System/IO/outputs/1/trigger'.format('192.168.30.173', 80)
payloadToOn = """
<IOPortData>
<outputState>high</outputState>
</IOPortData>
"""
r = requests.put(url, auth=HTTPDigestAuth('login', 'password'), data=payloadToOn, timeout=5)
Потім, щоб вимкнути тригер:
payloadToOff = """
<IOPortData>
<outputState>low</outputState>
</IOPortData>
"""
r = requests.put(url, auth=HTTPDigestAuth('login', 'password'), data=payloadToOff, timeout=5)
Завантажуйте прикріплений файл з повною інструкцією.
Оцініть цю статтю
Будь ласка, увійдіть, щоб оцінити статтю.