AWS 重新识别 x,y 公式

AWS rekognition x,y formula

我正在尝试使用 AWS 识别在照片中找到人的鼻子的 x、y 坐标,我使用的是 javascript SDK,并且正在返回值与大小的比率图片。这在文档中有明确说明,我对此没有异议。

我所追求的是从整个图像而不是边界框的角度找到鼻子 "landmark" 的确切 x,y 的公式。下面是我 rekognition 的输出。

{ 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(我认为)。我的数学水平真的达不到这个水平。

来自文档:

边界框:

The top and left values returned are ratios of the overall image size. For example, if the input image is 700x200 pixels, and the top-left coordinate of the bounding box is 350x50 pixels, the API returns a left value of 0.5 (350/700) and a top value of 0.25 (50/200).

地标:

x-coordinate from the top left of the landmark expressed as the ration of the width of the image. For example, if the images is 700x200 and the x-coordinate of the landmark is at 350 pixels, this value is 0.5.

Rekognition returns 的 X/Y 值只是图像 width/height 的百分比。根据 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

使用来自识别数据的边界框来索引或标签。我已经为面孔做了

#python
widtho = 717 #width of the given image
heighto = 562 #height of the given image
width = faceDetail['BoundingBox'].get('Width')
height = faceDetail['BoundingBox'].get('Height')
left = faceDetail['BoundingBox'].get('Left')
top = faceDetail['BoundingBox'].get('Top')
w = int(width * widtho)
h = int(height * heighto)
x = int(left * widtho)
y = int(top * heighto)
cv2.rectangle(imagere, (x, y), (x + w, y + h), (255, 0, 0), 2)

这将得到边界框..希望我能提供一些关于公式的线索