0

我的服务器在端点接收到一个列表 base64 图像,例如 [img1,img2....]。

我有获取图像并返回对象的函数 getPoses(img)。

我希望能够将图像映射到 getPoses() 并为每个图像并行取回对象。

我已经尝试过 Async.each 函数,但我注意到它并不是真正的 Parallel。可能是因为它在单个线程/核心中运行。

我也尝试过使用集群,这样我就可以利用所有内核在多个内核中运行 getPoses()。但是我觉得卡住了,因为我不清楚大师如何获得工人找到的姿势。

我将非常感谢社区的任何帮助。

异步代码:

//END POINT
app.post('/postImage' ,async function(req,res){
    const imgBase64List = req.body.imgBase64.split('next');
    const imgBase64IndexList = []
    imgBase64List.map((imgBase64,index)=>{
        imgBase64IndexList.push([index,imgBase64])
    })
    async.each(imgBase64IndexList , getPoseDetection , function(err){
        if(err){
            console.log("Error occured when feteching one of the pose")
            console.log(err)       
        }else{
            console.log('Sending Poses!')
            res.send(JSON.stringify(poseDetectionResults))
        }

    })



});//End of app.post and asyn function
const getPoseDetection = async (imgBase64Index, callback) => {
    //console.log('start');

    const img = new Image();
    img.src = imgBase64Index[1];
    const imgIndex = imgBase64Index[0]


    const canvas = createCanvas(img.width, img.height);
    const ctx = canvas.getContext('2d');
    ctx.drawImage(img, 0, 0);
    const input = tf.browser.fromPixels(canvas);
    const imageScaleFactor = 0.3;
    const flipHorizontal = false;
    const outputStride = 8;

    const poses = await net.estimateMultiplePoses(input, {
        flipHorizontal: false,
        maxDetections: 2,
        minPoseConfidence: 0.15,
        minPartConfidence:0.1,
        nmsRadius:20,
        });

    boundingBoxes = [] //reset the boundingBoxese
    poses.forEach(pose => {
        var box = posenet.getBoundingBoxPoints(pose.keypoints);
        boundingBoxes.push(box)
    });  

    poseDetectionResults[imgIndex] = {detectionList:poses}
    //console.log(poses)

}

谢谢你

4

0 回答 0