类型错误:使用 SDK 和 CustomVision 库时,预期信号是 AbortSignal 的实例

问题描述 投票:0回答:1

我们正在尝试使用 SDK 在 CustomVision 上创建一个项目。我们正在使用以下库:

import { TrainingAPIClient } from "@azure/cognitiveservices-customvision-training"; import { PredictionAPIClient } from "@azure/cognitiveservices-customvision-prediction"; import { ApiKeyCredentials } from "@azure/ms-rest-js";

以下是版本:

  "@azure/cognitiveservices-customvision-prediction": "^5.1.2", "@azure/cognitiveservices-customvision-training": "^5.2.0", "@azure/ms-rest-azure-js": "^2.1.0",
不幸的是,无论我做什么,我都会收到此错误:
TypeError: Expected signal to be an instanceof AbortSignal  

我们尝试切换到“@azure/ms-rest-azure-js”;这没有帮助。

我们尝试传递 AbortSignal 但效果不佳。

这些库的当前版本不支持 core-auth 等现代库,因此我们无法使用它。

还有其他想法吗?

azure-cognitive-services microsoft-custom-vision
1个回答
0
投票

错误

Expected signal to be an instance of AbortSignal
通常在以下格式使用
abort-controller
时发生:


const controller = new AbortController();
doAsyncWork({ abortSignal: controller.signal });
controller.abort();

注:
请参阅同一问题上的 gitMSDOC

为避免冲突,请安装

AbortSignal
库(或删除包含该库的代码部分)。
AbortSignal
.

npm install @azure/abort-controller

npm install abort-controller

通过参考doc,我执行了以下代码,用于创建项目、添加标签、上传图像、训练模型以及使用 Azure Custom Vision 发布迭代。

const  util = require('util');
const  fs = require('fs');
const TrainingApi = require("@azure/cognitiveservices-customvision-training");
const PredictionApi = require("@azure/cognitiveservices-customvision-prediction");
const msRest = require("@azure/ms-rest-js");

const trainingKey = "VISION_TRAINING_KEY";
const trainingEndpoint = "VISION_TRAINING_ENDPOINT";

const VISIONKey = "VISION_PREDICTION_KEY";
const predictionResourceId ="VISION_PREDICTION_RESOURCE_ID";
const predictionEndpoint = "VISION_PREDICTION_ENDPOINT";

const publishIterationName = "classifyModel";
const setTimeoutPromise = util.promisify(setTimeout);

(async () => {
    console.log("Creating project...");
    const credentials = new msRest.ApiKeyCredentials({ inHeader: { "Training-key": trainingKey } });
    const trainer = new TrainingApi.TrainingAPIClient(credentials, trainingEndpoint);
    const sampleProject = await trainer.createProject("Sample Project");

    console.log("Adding tags...");
    const hemlockTag = await trainer.createTag(sampleProject.id, "Hemlock");
    const cherryTag = await trainer.createTag(sampleProject.id, "Japanese Cherry");

    console.log("Adding images...");
    const sampleDataRoot = "Images";
    let fileUploadPromises = [];

    const hemlockDir = `${sampleDataRoot}/Hemlock`;
    const hemlockFiles = fs.readdirSync(hemlockDir);
    hemlockFiles.forEach(file => {
        fileUploadPromises.push(trainer.createImagesFromData(sampleProject.id, fs.readFileSync(`${hemlockDir}/${file}`), { tagIds: [hemlockTag.id] }));
    });

    const cherryDir = `${sampleDataRoot}/Japanese_Cherry`;
    const japaneseCherryFiles = fs.readdirSync(cherryDir);
    japaneseCherryFiles.forEach(file => {
        fileUploadPromises.push(trainer.createImagesFromData(sampleProject.id, fs.readFileSync(`${cherryDir}/${file}`), { tagIds: [cherryTag.id] }));
    });

    await Promise.all(fileUploadPromises);

    console.log("Training...");
    let trainingIteration = await trainer.trainProject(sampleProject.id);

    console.log("Training started...");
    while (trainingIteration.status == "Training") {
        console.log("Training status: " + trainingIteration.status);
        await setTimeoutPromise(1000, null);
        trainingIteration = await trainer.getIteration(sampleProject.id, trainingIteration.id);
    }
    console.log("Training status: " + trainingIteration.status);

    await trainer.publishIteration(sampleProject.id, trainingIteration.id, publishIterationName, predictionResourceId);

    const predictor_credentials = new msRest.ApiKeyCredentials({ inHeader: { "Prediction-key": VISIONKey } });
    const predictor = new PredictionApi.PredictionAPIClient(predictor_credentials, predictionEndpoint);
    const testFile = fs.readFileSync(`${sampleDataRoot}/Test/test_image.jpg`);

    const results = await predictor.classifyImage(sampleProject.id, publishIterationName, testFile);
    console.log("Results:");
    results.predictions.forEach(predictedResult => {
        console.log(`\t ${predictedResult.tagName}: ${(predictedResult.probability * 100.0).toFixed(2)}%`);
    });
})();

enter image description here

enter image description here

© www.soinside.com 2019 - 2024. All rights reserved.