0

こんにちは、私はグーグルビジョンapiに新しいです。私はImage上の顔を検出したい、私はnode.jsを使用しています10人以上の顔を含むローカル画像。 10個の顔のみを返すビジョンAPI。このVision APIを使用してすべての顔を検出する方法はありますか? vision node apiを参照してください。 とあなたが参照ここenter image description hereグーグルビジョンのapisで10人以上の顔を検出する方法

としてこの画像を撮ることができますが、私のコードです念のために誰もが、擬似コードより多くの結果を返すためにAPIを強制する解決策を考え出すだろう

function findFaceontheImage(req, res, next) { 
     var vision = Vision(); 
     var inputfile = 'NASA_Astronaut_Group_15.jpg'; 
     var outputFile = 'out.png'; 
     vision.faceDetection({source: {filename: inputfile}}) 
      .then(function (results) { 

      const faces = results[0].faceAnnotations; 
      console.log('Faces:'); 

      req.body['faces']=results; 
      var numFaces = faces.length; 
      console.log('Found ' + numFaces + (numFaces === 1 ? ' face' : ' faces')); 

      highlightFaces(inputfile, faces, outputFile, Canvas, function (err) { 
       if (err) { 
        next() 
       } 
       console.log("Finished!"); 
       next() 
      }); 


     }) 
     .catch(function (err) { 
      console.error('ERROR:', err); 
     }); 

} 

function highlightFaces(inputFile, faces, outputFile, Canvas, callback) { 
    fs.readFile(inputFile, function (err, image) { 
     if (err) { 
      return callback(err); 
     } 

     var Image = Canvas.Image; 
     // Open the original image into a canvas 
     var img = new Image(); 
     img.src = image; 
     var canvas = new Canvas(img.width, img.height); 
     var context = canvas.getContext("2d"); 
     context.drawImage(img, 0, 0, img.width, img.height); 

     // Now draw boxes around all the faces 
     context.strokeStyle = "rgba(0,255,0,0.8)"; 
     context.lineWidth = "5"; 

     faces.forEach(function (face) { 
      context.beginPath(); 
      var origX = 0; 
      var origY = 0; 
      face.boundingPoly.vertices.forEach(function (bounds, i) { 
       if (i === 0) { 
        origX = bounds.x; 
        origY = bounds.y; 
       } 
       context.lineTo(bounds.x, bounds.y); 
      }); 
      context.lineTo(origX, origY); 
      context.stroke(); 
     }); 

     // Write the result to a file 
     console.log("Writing to file " + outputFile); 
     var writeStream = fs.createWriteStream(outputFile); 
     var pngStream = canvas.pngStream(); 

     pngStream.on("data", function (chunk) { 
      writeStream.write(chunk); 
     }); 
     pngStream.on("error", console.log); 
     pngStream.on("end", callback); 
    }); 
} 
+0

まず、10個の結果しか返されない理由を調べる(または自分の情報を共有する)べきです。 ** A **:通話に制限がありますか?** B **:10人の顔しか検出されていませんか?私はAPI-docsが好きではありませんが、ケースAではいくつかの制限があります(デフォルト値ではありません)。また、ケースBに必要な確実性を制御するためのしきい値もあります。 – sascha

答えて

0

def process(image) 
    faces = process image 
    return faces if faces.size < 10 
    split image into two a bit overlapping half1 and half2 
    # we do overlapping because splitting may split a face 
    a = process(half1) 
    b = process(half2) 
    return a + b - intersection(a + b) 

交差点の関数は、同じ(画像の可能な+/-少数のピクセル誤差を考慮して)座標に加えて、画像にhalf1とhalf2の間にあったシフトを加えなければなりません。

関連する問題