Class: Google::Cloud::Vision::Annotation::Face::Features

Inherits:
Object
  • Object
show all
Defined in:
lib/google/cloud/vision/annotation/face.rb

Overview

# Features

Represents facial landmarks or features. Left and right are defined from the vantage of the viewer of the image, without considering mirror projections typical of photos. So ‘face.features.eyes.left` typically is the person’s right eye.

See Google::Cloud::Vision::Annotation::Face.

Examples:

require "google/cloud/vision"

vision = Google::Cloud::Vision.new

image = vision.image "path/to/face.jpg"
face = image.face

face.features.to_h.count #=> 9
face.features.eyes.left.pupil
#=> #<Landmark (x: 190.41544, y: 84.4557, z: -1.3682901)>
face.features.chin.center
#=> #<Landmark (x: 233.21977, y: 189.47475, z: 19.487228)>

See Also:

Defined Under Namespace

Classes: Chin, Ears, Eye, Eyebrow, Eyebrows, Eyes, Landmark, Lips, Mouth, Nose

Instance Attribute Summary collapse

Class Method Summary collapse

Instance Method Summary collapse

Constructor Details

#initializeFeatures

Returns a new instance of Features.



353
354
355
# File 'lib/google/cloud/vision/annotation/face.rb', line 353

def initialize
  @grpc = nil
end

Instance Attribute Details

#grpcObject



349
350
351
# File 'lib/google/cloud/vision/annotation/face.rb', line 349

def grpc
  @grpc
end

Class Method Details

.from_grpc(grpc) ⇒ Object

object.



523
524
525
# File 'lib/google/cloud/vision/annotation/face.rb', line 523

def self.from_grpc grpc
  new.tap { |f| f.instance_variable_set :@grpc, grpc }
end

Instance Method Details

#[](landmark_type) ⇒ Landmark

Returns the facial landmark for the provided type code.

Examples:

require "google/cloud/vision"

vision = Google::Cloud::Vision.new

image = vision.image "path/to/face.jpg"
face = image.face

face.features["RIGHT_EAR_TRAGION"]
#=> #<Landmark (x: 303.81198, y: 88.5782, z: 77.719193)>

Parameters:

Returns:

See Also:



389
390
391
392
393
394
395
# File 'lib/google/cloud/vision/annotation/face.rb', line 389

def [] landmark_type
  landmark = Array(@grpc.landmarks).detect do |l|
    l.type == landmark_type
  end
  return nil if landmark.nil?
  Landmark.from_grpc landmark
end

#chinChin

The landmarks of the chin.

Returns:



402
403
404
405
406
# File 'lib/google/cloud/vision/annotation/face.rb', line 402

def chin
  @chin ||= Chin.new self[:CHIN_LEFT_GONION],
                     self[:CHIN_GNATHION],
                     self[:CHIN_RIGHT_GONION]
end

#confidenceFloat

The confidence of the facial landmarks detection.

Returns:

  • (Float)

    A value in the range [0,1].



362
363
364
# File 'lib/google/cloud/vision/annotation/face.rb', line 362

def confidence
  @grpc.landmarking_confidence
end

#earsEars

The landmarks of the ears.

Returns:



413
414
415
416
# File 'lib/google/cloud/vision/annotation/face.rb', line 413

def ears
  @ears ||= Ears.new self[:LEFT_EAR_TRAGION],
                     self[:RIGHT_EAR_TRAGION]
end

#eyebrowsEyebrows

The landmarks of the eyebrows.

Returns:



423
424
425
426
427
428
429
430
431
432
433
# File 'lib/google/cloud/vision/annotation/face.rb', line 423

def eyebrows
  @eyebrows ||= begin
    left = Eyebrow.new self[:LEFT_OF_LEFT_EYEBROW],
                       self[:LEFT_EYEBROW_UPPER_MIDPOINT],
                       self[:RIGHT_OF_LEFT_EYEBROW]
    right = Eyebrow.new self[:LEFT_OF_RIGHT_EYEBROW],
                        self[:RIGHT_EYEBROW_UPPER_MIDPOINT],
                        self[:RIGHT_OF_RIGHT_EYEBROW]
    Eyebrows.new left, right
  end
end

#eyesEyes

The landmarks of the eyes.

Returns:



440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
# File 'lib/google/cloud/vision/annotation/face.rb', line 440

def eyes
  @eyes ||= begin
    left = Eye.new self[:LEFT_EYE_LEFT_CORNER],
                   self[:LEFT_EYE_BOTTOM_BOUNDARY],
                   self[:LEFT_EYE], self[:LEFT_EYE_PUPIL],
                   self[:LEFT_EYE_TOP_BOUNDARY],
                   self[:LEFT_EYE_RIGHT_CORNER]
    right = Eye.new self[:RIGHT_EYE_LEFT_CORNER],
                    self[:RIGHT_EYE_BOTTOM_BOUNDARY],
                    self[:RIGHT_EYE], self[:RIGHT_EYE_PUPIL],
                    self[:RIGHT_EYE_TOP_BOUNDARY],
                    self[:RIGHT_EYE_RIGHT_CORNER]
    Eyes.new left, right
  end
end

#foreheadLandmark

The landmark for the forehead glabella.

Returns:



461
462
463
# File 'lib/google/cloud/vision/annotation/face.rb', line 461

def forehead
  @forehead ||= self[:FOREHEAD_GLABELLA]
end

#inspectObject



516
517
518
# File 'lib/google/cloud/vision/annotation/face.rb', line 516

def inspect
  "#<Features #{self}>"
end

#lipsLips

The landmarks of the lips.

Returns:



470
471
472
# File 'lib/google/cloud/vision/annotation/face.rb', line 470

def lips
  @lips ||= Lips.new self[:UPPER_LIP], self[:LOWER_LIP]
end

#mouthMouth

The landmarks of the mouth.

Returns:



479
480
481
482
# File 'lib/google/cloud/vision/annotation/face.rb', line 479

def mouth
  @mouth ||= Mouth.new self[:MOUTH_LEFT], self[:MOUTH_CENTER],
                       self[:MOUTH_RIGHT]
end

#noseNose

The landmarks of the nose.

Returns:



489
490
491
492
493
494
# File 'lib/google/cloud/vision/annotation/face.rb', line 489

def nose
  @nose ||= Nose.new self[:NOSE_BOTTOM_LEFT],
                     self[:NOSE_BOTTOM_CENTER], self[:NOSE_TIP],
                     self[:MIDPOINT_BETWEEN_EYES],
                     self[:NOSE_BOTTOM_RIGHT]
end

#to_hHash

Deeply converts object to a hash. All keys will be symbolized.

Returns:

  • (Hash)


501
502
503
504
505
506
# File 'lib/google/cloud/vision/annotation/face.rb', line 501

def to_h
  { confidence: confidence, chin: chin.to_h, ears: ears.to_h,
    eyebrows: eyebrows.to_h, eyes: eyes.to_h,
    forehead: forehead.to_h, lips: lips.to_h, mouth: mouth.to_h,
    nose: nose.to_h }
end

#to_sObject



509
510
511
512
513
# File 'lib/google/cloud/vision/annotation/face.rb', line 509

def to_s
  # Keep console output low by not showing all sub-objects.
  "(confidence, chin, ears, eyebrows, eyes, " \
    "forehead, lips, mouth, nose)"
end