我正在尝试使用JavaScript SDK通过AWS识别功能在照片中找到人的鼻子的x,y坐标,并使用图片的大小比例返回值。文档中对此进行了明确说明,对此我没有任何问题。

我需要的是一个从整个图像而不是边界框的角度查找鼻子“地标”的确切x,y的公式。以下是我的认可结果。

{ FaceDetails:
   [ { BoundingBox:
        { Width: 0.6399999856948853,
          Height: 0.47999998927116394,
          Left: 0.1644444465637207,
          Top: 0.17666666209697723 },
       Landmarks:
        [ { Type: 'eyeLeft',
            X: 0.36238425970077515,
            Y: 0.3900916874408722 },
          { Type: 'eyeRight', X: 0.5580493807792664, Y: 0.362303763628006 },
          { Type: 'nose', X: 0.4164798855781555, Y: 0.4511926472187042 },
          { Type: 'mouthLeft',
            X: 0.42259901762008667,
            Y: 0.5591621994972229 },
          { Type: 'mouthRight',
            X: 0.5580134391784668,
            Y: 0.5394133925437927 } ],
       Pose:
        { Roll: -9.781778335571289,
          Yaw: -20.029239654541016,
          Pitch: 10.893087387084961 },
       Quality: { Brightness: 59.32780456542969, Sharpness: 99.9980239868164 },
       Confidence: 99.99403381347656 } ] }


我有一张2576x1932的图像,这里可以应用一些公式,只给我图片中鼻子的x,y。目前,它从边界框内给出鼻子的x,y(我认为)。我的数学技能并不完全符合这一要求。

从文档中:

边界框:


  返回的顶部和左侧的值是整个图像尺寸的比率。
  例如,如果输入图像是700x200像素,则左上角
  边框的坐标为350x50像素,API返回
  左值为0.5(350/700),最大值为0.25(50/200)。


里程碑:


  从地标左上角的x坐标表示为比率
  图像的宽度。例如,如果图像为700x200,
  界标的x坐标为350像素,此值为0.5。

最佳答案

Rekognition返回的X / Y值只是图像宽度/高度的百分比。根据Rekognition API文档,界标位置是相对于整个图像而不是边界框的。

因此,您要做的就是将图像的宽度乘以地标的X值,以获取该地标的X位置(然后将图像的高度乘以地标的Y位置,以获取Y位置地标的像素数)。

Rekognition这样做的原因是,无论图像的像素大小如何,鼻子的位置(例如)都相同。在上面的示例中,鼻子位于:

 { Type: 'nose', X: 0.4164798855781555, Y: 0.4511926472187042 },


这仅表示图像的宽度从左边界开始为图像宽度的41.6%,图像的高度从顶部边界开始为图像高度的45.1%。将这些百分比乘以实际的宽度和高度即可得到像素坐标。

看到:
http://docs.aws.amazon.com/rekognition/latest/dg/API_Landmark.html

07-24 20:19