提交 cbb8daa4 编写于 作者: Z Zhu Guodong

add more NNRT device info tests and remove one unspported uint8 feature test

Change-Id: If8c561b0cd20f4713e630be0fe72a5a9131ab5cc
Signed-off-by: NZhu Guodong <zhuguodong0001@163.com>
上级 3db03e9b
...@@ -62,30 +62,84 @@ void AddContextDeviceCPU(OH_AI_ContextHandle context) { ...@@ -62,30 +62,84 @@ void AddContextDeviceCPU(OH_AI_ContextHandle context) {
// add nnrt device info // add nnrt device info
void AddContextDeviceNNRT(OH_AI_ContextHandle context) { void AddContextDeviceNNRT(OH_AI_ContextHandle context) {
size_t num = 0;
auto desc = OH_AI_NNRTGetAllDeviceDescs(&num);
if (desc == nullptr) {
return;
}
std::cout << "found " << num << " nnrt devices" << std::endl;
auto id = OH_AI_NNRTDeviceDescGetId(desc);
auto name = OH_AI_NNRTDeviceDescGetName(desc);
auto type = OH_AI_NNRTDeviceDescGetType(desc);
std::cout << "NNRT device: id = " << id << ", name: " << name << ", type:" << type << std::endl;
OH_AI_DeviceInfoHandle nnrt_device_info = OH_AI_DeviceInfoCreate(OH_AI_DEVICETYPE_NNRT); OH_AI_DeviceInfoHandle nnrt_device_info = OH_AI_DeviceInfoCreate(OH_AI_DEVICETYPE_NNRT);
ASSERT_NE(nnrt_device_info, nullptr); ASSERT_NE(nnrt_device_info, nullptr);
OH_AI_DeviceInfoSetDeviceId(nnrt_device_info, id);
OH_AI_NNRTDestroyAllDeviceDescs(&desc);
OH_AI_DeviceType device_type = OH_AI_DeviceInfoGetDeviceType(nnrt_device_info);
printf("==========device_type:%d\n", device_type);
ASSERT_EQ(device_type, OH_AI_DEVICETYPE_NNRT);
OH_AI_DeviceInfoSetPerformanceMode(nnrt_device_info, OH_AI_PERFORMANCE_MEDIUM);
ASSERT_EQ(OH_AI_DeviceInfoGetPerformanceMode(nnrt_device_info), OH_AI_PERFORMANCE_MEDIUM);
OH_AI_DeviceInfoSetPriority(nnrt_device_info, OH_AI_PRIORITY_MEDIUM);
ASSERT_EQ(OH_AI_DeviceInfoGetPriority(nnrt_device_info), OH_AI_PRIORITY_MEDIUM);
OH_AI_ContextAddDeviceInfo(context, nnrt_device_info);
}
// add nnrt device info by type
void AddContextDeviceNNRTByType(OH_AI_ContextHandle context) {
size_t num = 0; size_t num = 0;
auto desc = OH_AI_NNRTGetAllDeviceDescs(&num); auto desc = OH_AI_NNRTGetAllDeviceDescs(&num);
if (desc == nullptr) { if (desc == nullptr) {
return; return;
} }
std::cout << "found " << num << " nnrt devices" << std::endl; std::cout << "found " << num << " nnrt devices" << std::endl;
for (size_t i = 0; i < num; i++) { auto id = OH_AI_NNRTDeviceDescGetId(desc);
std::cout << "nnrt device " << i << ": {device_id: " << desc[i].device_id auto name = OH_AI_NNRTDeviceDescGetName(desc);
<< ", type:" << desc[i].device_type << ", name:" << desc[i].device_name << std::endl; auto type = OH_AI_NNRTDeviceDescGetType(desc);
} std::cout << "NNRT device: id = " << id << ", name: " << name << ", type:" << type << std::endl;
OH_AI_DeviceInfoSetDeviceId(nnrt_device_info, desc[0].device_id); auto nnrt_device_info = OH_AI_CreateNNRTDeviceInfoByType(type);
OH_AI_NNRTDestroyAllDeviceDescs(&desc); OH_AI_NNRTDestroyAllDeviceDescs(&desc);
ASSERT_NE(nnrt_device_info, nullptr);
OH_AI_DeviceType device_type = OH_AI_DeviceInfoGetDeviceType(nnrt_device_info); OH_AI_DeviceType device_type = OH_AI_DeviceInfoGetDeviceType(nnrt_device_info);
printf("==========device_type:%d\n", device_type); printf("==========device_type:%d\n", device_type);
ASSERT_EQ(device_type, OH_AI_DEVICETYPE_NNRT); ASSERT_EQ(device_type, OH_AI_DEVICETYPE_NNRT);
ASSERT_EQ(OH_AI_DeviceInfoGetDeviceId(nnrt_device_info), id);
OH_AI_ContextAddDeviceInfo(context, nnrt_device_info); OH_AI_ContextAddDeviceInfo(context, nnrt_device_info);
} }
// add nnrt device info by name
void AddContextDeviceNNRTByName(OH_AI_ContextHandle context) {
size_t num = 0;
auto desc = OH_AI_NNRTGetAllDeviceDescs(&num);
if (desc == nullptr) {
return;
}
std::cout << "found " << num << " nnrt devices" << std::endl;
auto id = OH_AI_NNRTDeviceDescGetId(desc);
auto name = OH_AI_NNRTDeviceDescGetName(desc);
auto type = OH_AI_NNRTDeviceDescGetType(desc);
std::cout << "NNRT device: id = " << id << ", name: " << name << ", type:" << type << std::endl;
auto nnrt_device_info = OH_AI_CreateNNRTDeviceInfoByName(name);
OH_AI_NNRTDestroyAllDeviceDescs(&desc);
ASSERT_NE(nnrt_device_info, nullptr);
OH_AI_DeviceType device_type = OH_AI_DeviceInfoGetDeviceType(nnrt_device_info);
printf("==========device_type:%d\n", device_type);
ASSERT_EQ(device_type, OH_AI_DEVICETYPE_NNRT);
ASSERT_EQ(OH_AI_DeviceInfoGetDeviceId(nnrt_device_info), id);
OH_AI_ContextAddDeviceInfo(context, nnrt_device_info);
}
// fill data to inputs tensor // fill data to inputs tensor
void FillInputsData(OH_AI_TensorHandleArray inputs, string model_name, bool is_transpose) { void FillInputsData(OH_AI_TensorHandleArray inputs, string model_name, bool is_transpose) {
...@@ -1559,7 +1613,7 @@ HWTEST(MSLiteTest, OHOS_Compatible_0001, Function | MediumTest | Level1) { ...@@ -1559,7 +1613,7 @@ HWTEST(MSLiteTest, OHOS_Compatible_0001, Function | MediumTest | Level1) {
OH_AI_ModelDestroy(&model); OH_AI_ModelDestroy(&model);
} }
// delegate异构 // delegate异构:选取第一个NNRT设备
HWTEST(MSLiteTest, OHOS_NNRT_0001, Function | MediumTest | Level1) { HWTEST(MSLiteTest, OHOS_NNRT_0001, Function | MediumTest | Level1) {
printf("==========Init Context==========\n"); printf("==========Init Context==========\n");
OH_AI_ContextHandle context = OH_AI_ContextCreate(); OH_AI_ContextHandle context = OH_AI_ContextCreate();
...@@ -1586,41 +1640,62 @@ HWTEST(MSLiteTest, OHOS_NNRT_0001, Function | MediumTest | Level1) { ...@@ -1586,41 +1640,62 @@ HWTEST(MSLiteTest, OHOS_NNRT_0001, Function | MediumTest | Level1) {
OH_AI_ModelDestroy(&model); OH_AI_ModelDestroy(&model);
} }
// delegate异构:多输入单输出 // delegate异构:根据类型确定NNRT设备
HWTEST(MSLiteTest, OHOS_NNRT_0002, Function | MediumTest | Level1) { HWTEST(MSLiteTest, OHOS_NNRT_0002, Function | MediumTest | Level1) {
printf("==========Init Context==========\n"); printf("==========Init Context==========\n");
OH_AI_ContextHandle context = OH_AI_ContextCreate(); OH_AI_ContextHandle context = OH_AI_ContextCreate();
ASSERT_NE(context, nullptr); ASSERT_NE(context, nullptr);
AddContextDeviceNNRT(context); AddContextDeviceNNRTByType(context);
AddContextDeviceCPU(context); AddContextDeviceCPU(context);
printf("==========Create model==========\n"); printf("==========Create model==========\n");
OH_AI_ModelHandle model = OH_AI_ModelCreate(); OH_AI_ModelHandle model = OH_AI_ModelCreate();
ASSERT_NE(model, nullptr); ASSERT_NE(model, nullptr);
printf("==========Build model==========\n"); printf("==========Build model==========\n");
OH_AI_Status ret = OH_AI_ModelBuildFromFile(model, "/data/test/ml_headpose_pb2tflite.ms", OH_AI_Status ret = OH_AI_ModelBuildFromFile(model, "/data/test/ml_face_isface.ms",
OH_AI_MODELTYPE_MINDIR, context); OH_AI_MODELTYPE_MINDIR, context);
printf("==========build model return code:%d\n", ret); printf("==========build model return code:%d\n", ret);
ASSERT_EQ(ret, OH_AI_STATUS_SUCCESS); ASSERT_EQ(ret, OH_AI_STATUS_SUCCESS);
printf("==========GetInputs==========\n"); printf("==========GetInputs==========\n");
OH_AI_TensorHandleArray inputs = OH_AI_ModelGetInputs(model); OH_AI_TensorHandleArray inputs = OH_AI_ModelGetInputs(model);
ASSERT_NE(inputs.handle_list, nullptr); ASSERT_NE(inputs.handle_list, nullptr);
FillInputsData(inputs, "ml_headpose_pb2tflite", false); FillInputsData(inputs, "ml_face_isface", true);
printf("==========Model Predict==========\n"); printf("==========Model Predict==========\n");
OH_AI_TensorHandleArray outputs; OH_AI_TensorHandleArray outputs;
ret = OH_AI_ModelPredict(model, inputs, &outputs, nullptr, nullptr); ret = OH_AI_ModelPredict(model, inputs, &outputs, nullptr, nullptr);
ASSERT_EQ(ret, OH_AI_STATUS_SUCCESS); ASSERT_EQ(ret, OH_AI_STATUS_SUCCESS);
CompareResult(outputs, "ml_headpose_pb2tflite", 0.02, 0.02); CompareResult(outputs, "ml_face_isface");
OH_AI_ModelDestroy(&model); OH_AI_ModelDestroy(&model);
} }
// delegate异构:输入为uint8模型 // delegate异构:根据名称确定NNRT设备
HWTEST(MSLiteTest, OHOS_NNRT_0003, Function | MediumTest | Level1) { HWTEST(MSLiteTest, OHOS_NNRT_0003, Function | MediumTest | Level1) {
printf("==========ReadFile==========\n"); printf("==========Init Context==========\n");
size_t size1; OH_AI_ContextHandle context = OH_AI_ContextCreate();
size_t *ptr_size1 = &size1; ASSERT_NE(context, nullptr);
const char *imagePath = "/data/test/aiy_vision_classifier_plants_V1_3.input"; AddContextDeviceNNRTByName(context);
char *imageBuf = ReadFile(imagePath, ptr_size1); AddContextDeviceCPU(context);
ASSERT_NE(imageBuf, nullptr); printf("==========Create model==========\n");
OH_AI_ModelHandle model = OH_AI_ModelCreate();
ASSERT_NE(model, nullptr);
printf("==========Build model==========\n");
OH_AI_Status ret = OH_AI_ModelBuildFromFile(model, "/data/test/ml_face_isface.ms",
OH_AI_MODELTYPE_MINDIR, context);
printf("==========build model return code:%d\n", ret);
ASSERT_EQ(ret, OH_AI_STATUS_SUCCESS);
printf("==========GetInputs==========\n");
OH_AI_TensorHandleArray inputs = OH_AI_ModelGetInputs(model);
ASSERT_NE(inputs.handle_list, nullptr);
FillInputsData(inputs, "ml_face_isface", true);
printf("==========Model Predict==========\n");
OH_AI_TensorHandleArray outputs;
ret = OH_AI_ModelPredict(model, inputs, &outputs, nullptr, nullptr);
ASSERT_EQ(ret, OH_AI_STATUS_SUCCESS);
CompareResult(outputs, "ml_face_isface");
OH_AI_ModelDestroy(&model);
}
// delegate异构:多输入单输出
HWTEST(MSLiteTest, OHOS_NNRT_0004, Function | MediumTest | Level1) {
printf("==========Init Context==========\n"); printf("==========Init Context==========\n");
OH_AI_ContextHandle context = OH_AI_ContextCreate(); OH_AI_ContextHandle context = OH_AI_ContextCreate();
ASSERT_NE(context, nullptr); ASSERT_NE(context, nullptr);
...@@ -1630,41 +1705,19 @@ HWTEST(MSLiteTest, OHOS_NNRT_0003, Function | MediumTest | Level1) { ...@@ -1630,41 +1705,19 @@ HWTEST(MSLiteTest, OHOS_NNRT_0003, Function | MediumTest | Level1) {
OH_AI_ModelHandle model = OH_AI_ModelCreate(); OH_AI_ModelHandle model = OH_AI_ModelCreate();
ASSERT_NE(model, nullptr); ASSERT_NE(model, nullptr);
printf("==========Build model==========\n"); printf("==========Build model==========\n");
OH_AI_Status ret = OH_AI_ModelBuildFromFile(model, "/data/test/aiy_vision_classifier_plants_V1_3.ms", OH_AI_MODELTYPE_MINDIR, OH_AI_Status ret = OH_AI_ModelBuildFromFile(model, "/data/test/ml_headpose_pb2tflite.ms",
context); OH_AI_MODELTYPE_MINDIR, context);
printf("==========build model return code:%d\n", ret); printf("==========build model return code:%d\n", ret);
ASSERT_EQ(ret, OH_AI_STATUS_SUCCESS); ASSERT_EQ(ret, OH_AI_STATUS_SUCCESS);
printf("==========GetInputs==========\n"); printf("==========GetInputs==========\n");
OH_AI_TensorHandleArray inputs = OH_AI_ModelGetInputs(model); OH_AI_TensorHandleArray inputs = OH_AI_ModelGetInputs(model);
ASSERT_NE(inputs.handle_list, nullptr); ASSERT_NE(inputs.handle_list, nullptr);
for (size_t i = 0; i < inputs.handle_num; ++i) { FillInputsData(inputs, "ml_headpose_pb2tflite", false);
OH_AI_TensorHandle tensor = inputs.handle_list[i];
int64_t element_num = OH_AI_TensorGetElementNum(tensor);
printf("Tensor name: %s, elements num: %" PRId64 ".\n", OH_AI_TensorGetName(tensor), element_num);
void *input_data = OH_AI_TensorGetMutableData(inputs.handle_list[i]);
ASSERT_NE(input_data, nullptr);
memcpy_s(input_data, size1, imageBuf, size1);
}
printf("==========Model Predict==========\n"); printf("==========Model Predict==========\n");
OH_AI_TensorHandleArray outputs; OH_AI_TensorHandleArray outputs;
ret = OH_AI_ModelPredict(model, inputs, &outputs, nullptr, nullptr); ret = OH_AI_ModelPredict(model, inputs, &outputs, nullptr, nullptr);
ASSERT_EQ(ret, OH_AI_STATUS_SUCCESS); ASSERT_EQ(ret, OH_AI_STATUS_SUCCESS);
printf("==========GetOutput==========\n"); CompareResult(outputs, "ml_headpose_pb2tflite", 0.02, 0.02);
for (size_t i = 0; i < outputs.handle_num; ++i) {
OH_AI_TensorHandle tensor = outputs.handle_list[i];
int64_t element_num = OH_AI_TensorGetElementNum(tensor);
printf("Tensor name: %s, elements num: %" PRId64 ".\n", OH_AI_TensorGetName(tensor), element_num);
uint8_t *output_data = reinterpret_cast<uint8_t *>(OH_AI_TensorGetMutableData(tensor));
printf("output data is:");
for (int j = 0; j < element_num && j <= 20; ++j) {
printf("%d ", output_data[j]);
}
printf("\n");
printf("==========compFp32WithTData==========\n");
string expectedDataFile = "/data/test/aiy_vision_classifier_plants_V1_3" + std::to_string(i) + ".output";
bool result = compUint8WithTData(output_data, expectedDataFile, 0.01, 0.01, false);
EXPECT_EQ(result, true);
}
delete[] imageBuf;
OH_AI_ModelDestroy(&model); OH_AI_ModelDestroy(&model);
} }
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册