首页 > 解决方案 > 使用 ngx-webcam 捕获图像并将其发送到人脸识别 api

问题描述

我目前正在尝试通过 ngx-webcam 直接发送图像而不将其保存到我的后端服务器并通过我的 node.js将其发送到人脸检测 API 。问题是我的 node.js 文件中的标头不断出现错误。我该如何解决这个问题?

我注意到传递的图像 url 很长。这可能是个问题吗?

图片网址:

"data:image/jpeg;base64,/9j/4AAQSkZJRgABAQAAAQABAAD/2wBDAAMCAgICAgMCAgIDAwMDBAYEBAQEBAgGBgUGCQgKCgkICQkKDA8MCgsOCwkJDRENDg8QEBEQCgwSExIQEw8QEBD/2wBDAQMDAwQDBAgEBAgQCwkLEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBD/wAARCAHgAoADASIAAhEBAxE..."

我的错误是:

TypeError [ERR_HTTP_INVALID_HEADER_VALUE]: Invalid value "undefined" for header "Content-Length"
    at ClientRequest.setHeader (_http_outgoing.js:473:3)
    at FormData.<anonymous> (C:\Users\Roger\Documents\GitHub\angular-face-recognition-app\back-end\node_modules\form-data\lib\form_data.js:321:13)
    at C:\Users\Roger\Documents\GitHub\angular-face-recognition-app\back-end\node_modules\form-data\lib\form_data.js:265:7
    at C:\Users\Roger\Documents\GitHub\angular-face-recognition-app\back-end\node_modules\form-data\node_modules\async\lib\async.js:251:17
    at done (C:\Users\Roger\Documents\GitHub\angular-face-recognition-app\back-end\node_modules\form-data\node_modules\async\lib\async.js:126:15)
    at C:\Users\Roger\Documents\GitHub\angular-face-recognition-app\back-end\node_modules\form-data\node_modules\async\lib\async.js:32:16
    at C:\Users\Roger\Documents\GitHub\angular-face-recognition-app\back-end\node_modules\form-data\node_modules\async\lib\async.js:248:21
    at C:\Users\Roger\Documents\GitHub\angular-face-recognition-app\back-end\node_modules\form-data\node_modules\async\lib\async.js:572:34
    at C:\Users\Roger\Documents\GitHub\angular-face-recognition-app\back-end\node_modules\form-data\lib\form_data.js:105:13
    at FSReqWrap.oncomplete (fs.js:153:21)

前端:角

组件文件:

//captures image function
public handleImage(webcamImage: WebcamImage): void {
    //stores it into webcamImageg variable
    this.webcamImage = webcamImage;
    //uses fda.sendImage function to send webcamImage to api via a service
    this.fda.sendImage(this.webcamImage.imageAsDataUrl).subscribe(res => {});
}

服务文件

 sendImage(imgUrl){
        console.log(imgUrl);
        const obj = {
          url: imgUrl
        };    

        return this.http.post(`${this.uri}`, obj);
    }

后端:node.js

路由文件

facedetAPIRoutes.route("/").post(function (req, res){
    let imageUrl = req.body.url;
    myFaceDetAPI.recognizeImg(imageUrl).then(function(result) { 
     // here is your response back
     res.json(result);
    });
});

api调用的函数文件:使用promise

  //I believe problem lies  here somewhere
    this.recognizeImg = (url)=>{
        let requestString = "https://lambda-face-recognition.p.rapidapi.com/recognize";
        let req = unirest("POST", requestString);
        let imgURL = url;   

           let promise = new Promise(function(resolve, reject) {
           unirest.post(requestString)
           .header("X-RapidAPI-Key", API_KEY)
           .attach("files", fs.createReadStream(imgURL))
           .field("album", ALBUM_NAME)
           .field("albumkey", ALBUM_KEY)
           .end(result => {
               console.log("successfully recognized image");
               resolve(result.body) // giving response back
           });
        });

       return promise;  
    }

标签: javascriptnode.jsangularapibase64

解决方案


您应该尝试添加x-rapidapi-hostcontent-type标题。

.headers({
    "content-type": "application/x-www-form-urlencoded",
    "x-rapidapi-host": "lambda-face-recognition.p.rapidapi.com",
    "x-rapidapi-key": "",
    "useQueryString": true
})

推荐阅读