Я новичок в c ++, этот вопрос может быть глупым для вас.
Я использую Network Optix Служба управления видео. Используя их приложение, я создаю плагин.
Я использую приведенный ниже фрагмент кода для создания пакета объекта метаданных.
std::vector<IMetadataPacket*> DeviceAgent::cookSomeObjects()
{
std::vector<IMetadataPacket*> result;
auto objectMetadataPacket = makePtr<ObjectMetadataPacket>();
objectMetadataPacket->setTimestampUs(m_lastVideoFrameTimestampUs);
objectMetadataPacket->setDurationUs(0);
auto j = json::parse(readBuffer);
for (auto& context : j) {
float a = context["x1"];
float b = context["y1"];
float c = context["height"];
float d = context["width"];
std::string label = context["label"];
auto objectMetadata = makePtr<ObjectMetadata>();
objectMetadata->setBoundingBox(Rect(a, b, c, d));
objectMetadataPacket->addItem(objectMetadata.get());
}
result.push_back(objectMetadataPacket.releasePtr());
return result;
}
readBuffer - это ответ на вызов API. это выглядит следующим образом.
[{"height": 0.10374343395233154, "label": "car", "width": 0.13737773895263672, "x1": 0.4747169017791748, "y1": 0.27557021379470825}, { "высота": 0,1520291566848755, "метка": "автомобиль", "ширина": 0,23306196182966232, "x1": 0,0436464324593544, "y1": 0,4737709164619446}, { "высота": 0,05128565430641174, "метка": "автомобиль",» ширина ": +0,08260226249694824," x1 ": 0,5227476954460144," y1 ": 0,1012464314699173}, {" высота ": 0,2633265256881714," метка ":" автомобиль», "ширина": 0,2628181278705597 "x1": 0,26807519793510437, "y1": 0,6712638735771179 }, { "высота": 0,1066703349351883, "метка": "автомобиль", "ширина": 0,1351754069328308 "x1": 0,3640907108783722, "y1": +0,19261829555034637}, { "высота": 0,13967299461364746, "метка": "велосипед" , "ширина": 0,09549647569656372, "x1": +0,22761660814285278, "y1": 0,5885671973228455}, { "высота": +0,06679290533065796, "метка": "автомобиль", "ширина": 0,07677030563354492, "x1": 0,7689603567123413, "y1" : 0,15423545241355896}, { "высота": 0,08153106272220612, "метка": "автомобиль", "ширина": 0,09254050254821777, "x1": 0,6379277110099792, "y1": 0. 19936798512935638}, {"height": 0.13518506288528442, "label": "car", "width": 0.11784732341766357, "x1": 0.6905719637870789, "y1": 0.34653833508491516}]
* 1015 анализирует каждый объект в J и создает упаковку в указателе objectMetadata. objectMetadataPacket содержит каждый указатель objectMetadata один за другим.
Когда я печатаю objectMetadata, он возвращает 1, как я ожидал. Но, когда я печатаю objectMetadataPacket
, он также возвращает 1 вместо n числа объектов в J. Я думаю, что objectMetadataPacket удерживает или заменяет одно значение вместо добавления к предыдущим значениям.
Как это исправить? Любой намек будет заметен.