Я пытаюсь преобразовать изображение в TF_Tensor типа TF_STRING, используя C API . Шаг кодирования проходит просто отлично, но когда я передаю его на модель , он возвращает сообщение об ошибке, в котором указано invalid string encoding or truncated src buffer
Вот некоторый (грубый) код, который я использовал для построения закодированная строка из изображения:
// ------------------------ CREATE IMAGE TENSOR ---------------------------------------- //
// **char* image** - points to the buffer containing the image read from file in "rb" mode
// **const unsigned int imageSize** - is the length of the buffer above
std::vector<int64_t> inputDims = { static_cast<int64_t>(TF_DataTypeSize(TF_UINT64)) + static_cast<int64_t>(imageSize) };
size_t encodedSize = TF_StringEncodedSize(imageSize);
size_t totalSize = TF_DataTypeSize(TF_UINT64) + encodedSize;
char* encodedInput = new char[totalSize];
for (size_t i = 0; i < TF_DataTypeSize(TF_UINT64); i++)
encodedInput[i] = 0;
TF_StringEncode((const char*)image.data, imageSize, encodedInput + 8, encodedSize, status);
if (TF_GetCode(status) != TF_OK) {
std::cerr << "Failed to encode image\n"; // The code enters this block and TF_Message(status) returns nothing to the output stream
std::cerr << TF_Message(status) << std::endl;
return false;
}
TF_Tensor* input = TF_NewTensor(TF_STRING, inputDims.data(), inputDims.size(), encodedInput, totalSize, NULL, 0);
// --------------------------------- Run SESSION -------------------------------------- //
/* ----------------------------------------------
Forked from - https://github.com/danishshres/ssd_c_api/ConsoleApplication5.cpp
Original Author - danishshresh
------------------------------------------------ */
// Setup inputs and outputs
std::vector<TF_Output> input_tensors, output_tensors;
std::vector<TF_Tensor*> input_values, output_values;
input_tensors.push_back({ TF_GraphOperationByName(graph, "encoded_image_string_tensor"), 0 });
input_values.push_back(input);
output_tensors.push_back({ TF_GraphOperationByName(graph, "detection_classes"),0 });
output_values.push_back(nullptr);
output_tensors.push_back({ TF_GraphOperationByName(graph, "detection_scores"),0 });
output_values.push_back(nullptr);
output_tensors.push_back({ TF_GraphOperationByName(graph, "detection_boxes"),0 });
output_values.push_back(nullptr);
// Run the session
TF_SessionRun(sess, nullptr,
&input_tensors[0], &input_values[0], input_values.size(),
&output_tensors[0], &output_values[0], 3, //3 is the number of outputs count..
nullptr, 0, nullptr, status
);
// Check if the run was successful
if (TF_GetCode(status) != TF_OK){
std::cout << "ERROR: SessionRun: " << TF_Message(status) << "\n";
return false;
}
Как правильно создать TF_Tensor типа TF_STRING для изображения? Входной узел: 'encoded_image_string_tensor: 0' Значение по умолчанию: [""]