VK Cloud logo

Распознавание автомобильных номеров

Распознавание автомобильных номеров — частный случай использования метода detect — метод позволяет найти различные объекты на фотографии.

Данный метод позволяет найти различные объекты на фотографии.

Запрос

Авторизационные данные передаются в строке запроса:

ПараметрТипЗначение
oauth_token
string
OAuth2 access token (required non-empty)
oauth_provider
string
Провайдер OAuth2 (required non-empty)

Поддерживаемые провайдеры OAuth2:

ПровайдерЗначение oauth_providerПолучение токена
Mail.Ru
mr
VK Cloud
mcs
https://mcs.mail.ru/help/vision-auth/vision-token (все клиенты VK Cloud)

Параметры запроса передаются в формате JSON в теле запроса с name="meta":

ПараметрТипЗначение
mode
[]string
Типы объектов, которые требуется искать на переданных изображениях (required non-empty)
images
[]image_meta
Метаданные передаваемых изображений (required non-empty)

Возможные значения mode:

ПараметрЗначение
object
Искать на изображении объекты
scene
Искать на изображении сцены
car_number
Искать на изображении номера машин
multiobject
Искать на изображении мультиобъекты - объекты и все множество боксов всех найденных объектов
pedestrian
Искать на изображении людей (более точно определяет множество боксов всех людей на изображении)

mode

mode может содержать один или несколько режимов. Например:

  • "mode":["object"] <-- искать только объекты;

  • "mode":["scene"] <-- искать только сцены;

  • "mode":["object","scene"] <-- искать сцены и объекты.

image_meta

ПараметрТипЗначение
name
string
Имена файлов для сопоставления файлов в запросе и ответе (required non-empty)

Изображения передаются в теле запроса, значения поля name должны соответствовать переданным в images.

Максимальное количество изображений в одном запросе равняется 100. Максимальный размер каждого изображения не должен превышать 4МБ.

Пример запроса:

POST /api/v1/objects/detect?oauth_provider=mr&oauth_token=123 HTTP/1.1

Content-Type: multipart/form-data; boundary=----WebKitFormBoundaryfCqTBHeLZlsicvMp

------WebKitFormBoundaryfCqTBHeLZlsicvMp
Content-Disposition: form-data; name="file_0"; filename=""
Content-Type: image/jpeg

000000000000000000000000000
000000000000000000000000000
000000000000000000000000000
------WebKitFormBoundaryfCqTBHeLZlsicvMp
Content-Disposition: form-data; name="file_1"; filename=""
Content-Type: image/jpeg

111111111111111111111111111
111111111111111111111111111
111111111111111111111111111
------WebKitFormBoundaryfCqTBHeLZlsicvMp
Content-Disposition: form-data; name="meta"

{"mode":["object","scene","car_number"],"images":[{"name":"file_0"},{"name":"file_1"}]}
------WebKitFormBoundaryfCqTBHeLZlsicvMp--

Ответ

ПараметрТипЗначение
status
int
200 в случае успеха, иначе описание ошибки будет в body
body
string
Тело ответа

response

ПараметрТипЗначение
scene_labels
[]object
Массив ответов для каждого файла со сценами (может отсутствовать)
object_labels
[]object
Массив ответов для каждого файла с объектами (может отсутствовать)
car_number_labels
[]object
Массив ответов для каждого файла с номерам машин (может отсутствовать)
multiobject_labels
[]object
Массив ответов для каждого файла с мультиобъектами (может отсутствовать)
pedestrian_labels
[]object
Массив ответов для каждого файла с людьми (может отсутствовать)

object

ПараметрТипЗначение
status
enum
Результат выполнения
error
string
Текстовое описание ошибки (optional)
name
string
Имя файла для сопоставления файлов в запросе и ответе
labels
[]label
Список объектов (меток), найденных на изображении
count_by_density
int
Количество людей в кадре, подсчитанное с помощью карты плотности (только для mode=”pedestrian”)

status

ПараметрЗначение
0
Успешно
1
Перманентная ошибка
2
Временная ошибка

label

ПараметрЗначение
eng
Метка (название) для найденного объекта на английском
rus
Метка (название) найденного объекта на русском
eng_categories
Список категорий (каждая категория включает в себя множество меток) на английском (optional)
rus_categories
Список категорий (каждая категория включает в себя множество меток) на русском (optional)
prob
Степень уверенности в том, что на изображении именно этот объект
coord
Координаты найденного объекта (optional)
types_prob
Массив вероятностей типов номерных знаков. на данный момент поддерживаются следующие типы: "rus" - все типы Российских номеров, "cis" - номера СНГ (кроме индивидуальных и военных украинских), "eu" - одноэтажные номера Европы (optional, only for car_number mode)

Пример ответа:

1{
2    "status":200,
3    "body":
4    {
5        "object_labels":[
6            {
7                "status":0,
8                "name":"file_0",
9                "labels":[
10                    {
11                       "eng":"Person",
12                       "rus":"Человек",
13                       "eng_categories":[],
14                       "rus_categories":[],
15                       "prob":0.6542,
16                       "coord":[0,63,518,656]
17                   },
18                   {
19                       "eng":"Face",
20                       "rus":"Лицо",
21                       "eng_categories":[],
22                       "rus_categories":[],
23                       "prob":0.6841,
24                       "coord":[0,63,518,571]
25                   }
26                ]
27            }
28        ],
29        "scene_labels":[
30            {
31                "name":"file_0",
32                "status":0,
33                "labels":[
34                    {
35                        "eng":"Beauty Salon",
36                        "rus":"Салон красоты",
37                        "eng_categories":[],
38                        "rus_categories":[],
39                        "prob":0.3457
40                    },
41                    {
42                        "eng":"Stage",
43                        "rus":"Сцена",
44                        "eng_categories":["Concerts"],
45                        "rus_categories":["Концерты"],
46                        "prob":0.2651
47                    }
48                ]
49            }
50        ],
51        "car_number_labels":[
52            {
53               "name":"file_0",
54               "status":0,
55               "labels":[
56                    {
57                        "eng":"C606KY777",
58                        "rus":"С606КУ777",
59                        "prob":0.9996,
60                        "coord":[250,281,334,302],
61                        "types_prob":[
62                            {
63                                 "type":"ru",
64                                 "prob":0.9820
65                            },
66                            {
67                                 "type":"cis",
68                                 "prob":0.9367
69                            },
70                            {
71                                 "type":"eu",
72                                 "prob":0.0026
73                            }
74                        ]
75                    },
76                    {
77                        "eng":"T820YO98",
78                        "rus":"Т820УО98",
79                        "prob":0.4563,
80                        "coord":[250,281,334,302],
81                        "types_prob":[
82                            {
83                                 "type":"ru",
84                                 "prob":0.9220
85                            },
86                            {
87                                 "type":"cis",
88                                 "prob":0.9167
89                            },
90                            {
91                                 "type":"eu",
92                                 "prob":0.0026
93                            }
94                        ]
95                    }
96                ]
97            }
98         ]
99         "multiobject_labels":[
100            {
101                "status":0,
102                "name":"file_0",
103                "labels":[
104                    {
105                       "eng":"Person",
106                       "rus":"Человек",
107                       "eng_categories":[],
108                       "rus_categories":[],
109                       "prob":0.9765,
110                       "coord":[308,107,1920,1153]
111                   },
112                   {
113                       "eng":"Person",
114                       "rus":"Человек",
115                       "eng_categories":[],
116                       "rus_categories":[],
117                       "prob":0.9893,
118                       "coord":[423,72,634,479]
119                   }
120                ]
121            }
122        ],
123        "pedestrian_labels":[
124            {
125               "name":"file_0",
126               "status":0,
127               "labels":[
128                    {
129                        "eng":"Pedestrian",
130                        "rus":"Человек",
131                        "prob":0.9996,
132                        "coord":[150,221,278,402]
133                    },
134                    {
135                        "eng":"Pedestrian",
136                        "rus":"Человек",
137                        "prob":0.9863,
138                        "coord":[177,181,434,320]
139                    }
140                ],
141                "count_by_density":5
142            }
143         ]
144    },
145    "htmlencoded":false,
146    "last_modified":0
147}

Пример ответа, когда одна из картинок не обработалась:

1{
2    "status":200,
3    "body":
4    {
5        "object_labels":[
6            {
7                "status":2,
8                "error":"internal error: image crc mismatch",
9                "name":"file_0"
10            },
11            {
12                "status":0,
13                "name":"file_1",
14                "labels":[
15                    {
16                        "eng":"Person",
17                        "rus":"Человек",
18                        "eng_categories":[],
19                        "rus_categories":[],
20                        "prob":0.6542,
21                        "coord":[0,63,518,656]
22                    }
23             }
24        ]
25    },
26    "htmlencoded":false,
27    "last_modified":0
28}

Пример ответа, когда не удалось выполнить запрос:

1{
2    "status":500,
3    "body":"Internal Server Error",
4    "htmlencoded":false,
5    "last_modified":0
6}

Пример python:

1examples/python/smarty.py \
2-u "https://smarty.mail.ru/api/v1/objects/detect?oauth_provider=mr&oauth_token=e50b000614a371ce99c01a80a4558d8ed93b313737363830" \
3-p examples/friends1.jpg \
4--meta '{"mode":["scene"]}' \
5-v