Как правильно установить тело вызова http для API пользовательского видения Microsoft в nativescript-vue? - PullRequest
0 голосов
/ 30 января 2019

Я создаю крошечное приложение для школьного проекта.Я использую игровую площадку с нативным скриптом, что затрудняет отладку.Я просто хочу сделать снимок и отправить его в API пользовательского видения, чтобы предсказать, что это за изображение.Я не уверен, как правильно установить тело с изображением.

takePicture() {
    camera
        .takePicture({
            width: 120,
            height: 180,
            keepAspectRatio: true
        })
        .then(imageAsset => {
            this.pictureFromCamera = imageAsset;
            http.request({
                url: "https://southcentralus.api.cognitive.microsoft.com/customvision/v2.0/Prediction/key/image",
                method: "POST",
                headers: {
                    "Content-Type": "application/octet-stream",
                    "Prediction-Key": "key"
                },
                content: JSON.stringify({
                    Body: imageAsset
                })
            }).then(
                response => {
                    this.response = response.content.toJSON();
                    console.log("RESPONSE", this.response);
                },
                error => {
                    console.error("ERRRORR", error);
                }
            );
        })
        .catch(err => {
            console.log("Error -> " + err.message);
        });
    }
}

Это зарегистрированный ответ:

[Galaxy S8+]: 'RESPONSE' { code: [Getter/Setter],
[Galaxy S8+]: message: [Getter/Setter],
[Galaxy S8+]: { value: [Circular],
[Galaxy S8+]: [__ob__]:
[Galaxy S8+]: dep: { id: 39, subs: [Object] },
[Galaxy S8+]: vmCount: 0 } }

Ответы [ 2 ]

0 голосов
/ 30 января 2019

Это то, что я закончил

takePicture() {
  camera
      .takePicture({
          width: 120,
          height: 180,
          keepAspectRatio: true
      })
      .then(picture => {
          this.pictureFromCamera = picture;
          const source = new imageSourceModule.ImageSource();
          source.fromAsset(picture).then(imageSource => {
              const folder = fileSystemModule.knownFolders
                  .documents()
                  .path;
              const fileName = "test.png";
              const path = fileSystemModule.path.join(
                  folder,
                  fileName
              );
              const picsaved = imageSource.saveToFile(
                  path, "png");
              if (picsaved) {
                  console.log("Saving");
                  var session = bghttp.session(
                      "image-upload");
                  var request = {
                      url: "https://southcentralus.api.cognitive.microsoft.com/customvision/v2.0/Prediction/key/image",
                      method: "POST",
                      headers: {
                          "Content-Type": "application/octet-stream",
                          "Prediction-Key": "key"
                      }
                  };
                  try {
                      var task = session.uploadFile(
                          path, request);
                  } catch (err) {
                      console.log(err);
                  }
                  task.on("responded", data => {
                      console.log("RESPONDED", data.data);
                  });
              } else {
                  console.log("Failed");
              }
          });
      })
      .catch(err => {
          console.log("Errorr -> " + err.message);
      });
}
0 голосов
/ 30 января 2019

Нельзя переводить изображение в актив.Единственный способ отправить многокомпонентные данные - использовать плагин nativescript-background-http , модуль по умолчанию http не поддерживает это.

...