Toybrick

求助,c++调用set_inputs似乎无法正确配置参数

yinjun

新手上路

积分
25
楼主
发表于 2024-5-14 10:16:12    查看: 1588|回复: 0 | [复制链接]    打印 | 只看该作者
rt,不论我的输入内容是什么,我的模型输出的结果经过后处理后似乎都是一样的,求dalao帮我看看我设置的input是存在什么样的问题
我的setinput部分代码
  1. Java_com_wuzhengai_examination_tfliterun_blazeface_rknn_BlazeFaceRknn_detect(
  2.         JNIEnv *env,
  3.         jobject thiz,
  4.         jbyteArray input,
  5.         jbyteArray output1,
  6.         jbyteArray output2) {

  7.     if (!created) {
  8.         LOGE("run_yolo: init yolo hasn't successful!");
  9.         return false;
  10.     }

  11.     jboolean inputCopy = JNI_FALSE;
  12.     jbyte *const inData = env->GetByteArrayElements(input, &inputCopy);

  13.     // 获取数组长度
  14.     jsize length = env->GetArrayLength(input);

  15. // 创建一个int8_t数组
  16.     int8_t *inputData = new int8_t[length];
  17.     // inputData
  18.     for (int i = 0; i < length; i++) {
  19.         inputData[i] = static_cast<int8_t>(inData[i]);
  20.     }

  21.     jboolean outputCopy = JNI_FALSE;


  22.     jbyte *const y0 = env->GetByteArrayElements(output1, &outputCopy);
  23.     jbyte *const y1 = env->GetByteArrayElements(output2, &outputCopy);


  24.     rknn_input inputs[1];
  25.     memset(inputs, 0, sizeof(inputs));
  26.     inputs[0].index = 0;
  27.     inputs[0].type = RKNN_TENSOR_INT8;
  28. //    float 类型需要乘以2?不清楚
  29.     inputs[0].size = m_in_height * m_in_width * m_in_channel;
  30. //    inputs[0].size =75264;
  31.     inputs[0].fmt = RKNN_TENSOR_NHWC;
  32.     inputs[0].pass_through = 1;
  33.     inputs[0].buf = inData;


  34.     int ret = rknn_inputs_set(ctx, 1, inputs);


  35.     rknn_output outputs[2];
  36.     memset(outputs, 0, sizeof(outputs));
  37.     for (int i = 0; i < 2; ++i) {
  38.         outputs[i].want_float = 0;
  39.     }


  40.     if (ret < 0) {
  41.         LOGE("rknn_set fail! ret=%d\n", ret);
  42.         return false;
  43.     }
  44. //    LOGE("rknn set %d",ret)
  45.     ret = rknn_run(ctx, nullptr);
  46.     if (ret < 0) {
  47.         LOGE("rknn_run fail! ret=%d\n", ret);
  48.         return false;
  49.     }


  50.     rknn_outputs_get(ctx, 2, outputs, NULL);


  51.     int8_t *kk = static_cast<int8_t *>(inputs[0].buf);

  52.     int8_t *kk3 = static_cast<int8_t *>(outputs[1].buf);

  53.     memcpy(y0, outputs[0].buf, output_attrs[0].n_elems * sizeof(char));
  54.     memcpy(y1, outputs[1].buf, output_attrs[1].n_elems * sizeof(char));


  55.     LOGE("sesekan %d,%d,%d,%d", kk[25423], inputData[25423], y1[200], kk3[200]);

  56. //
  57.     env->ReleaseByteArrayElements(input, inData, JNI_ABORT);
  58.     env->ReleaseByteArrayElements(output1, y0, 0);
  59.     env->ReleaseByteArrayElements(output2, y1, 0);

  60.     rknn_outputs_release(ctx, 2, outputs);
  61.     return JNI_TRUE;
  62. }
复制代码


回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

产品中心 购买渠道 开源社区 Wiki教程 资料下载 关于Toybrick


快速回复 返回顶部 返回列表