Skip to content

User image analysis v3

POST
/analyzeImage/
curl --request POST \
--url 'https://partner-test.revieve.com/api/3/analyzeImage/?skintone=0&gender=unknown&hairtype=-1' \
--header 'Content-Type: multipart/form-data' \
--form image=@file \
--form partner_id=jmlv6b2qtS

The endpoint for uploading a user image for skin analysis.

components
Array<string>
Allowed values: eyes wrinkles wrinkles_visualization redness redness_visualization redness_absolute shine shine_visualization acne acne_visualization acne_normalized_visualization texture texture_visualization smoothness hyperpigmentation hyperpigmentation_visualization hyperpigmentation_adjusted makeup melasma melasma_visualization freckles freckles_visualization dark_spots dark_spots_visualization dark_spots_adjusted dull_skin radiance radiance_adjusted uneven_skin_tone uneven_skin_tone_visualization pore_dilation pore_dilation_visualization masks skin_sagging skin_sagging_visualization skin_firmness hair skin_age skin_type skin_type_visualization

This parameter lets calculate some specific metrics instead all of them.

  • For example a CV API call with &components=redness,eyes would only calculate redness and eye area findings.

  • If a user wants makeup and they need masks also, they would call the API with &components=makeup,masks.

  • If components list is undefined, all the metrics are calculated.

Full list of possible components user can manually enable are:

  • eyes
  • wrinkles
  • redness
  • redness_absolute
  • shine
  • acne
  • texture
  • smoothness
  • hyperpigmentation
  • hyperpigmentation_adjusted
  • makeup
  • melasma
  • freckles
  • dark_spots
  • dark_spots_adjusted
  • dull_skin
  • radiance
  • radiance_adjusted
  • uneven_skin_tone
  • pore_dilation (requires enough face area resolution to succeed)
  • masks
  • skin_sagging
  • skin_firmness
  • skin_type

Hair data:

  • hair

Skin Age data:

  • skin_age

If you want to visualize the individual findings for the metric, use these to include them in the API response (only the following visualizations are supported currently):

  • acne_visualization (visualization using legacy scale [0-2500] acne visualization data output)
  • acne_normalized_visualization (visualization using normalized scale [0-1] acne visualization data output)
  • texture_visualization
  • wrinkles_visualization
  • redness_visualization
  • shine_visualization
  • hyperpigmentation_visualization
  • freckles_visualization
  • dark_spots_visualization
  • melasma_visualization
  • uneven_skin_tone_visualization
  • skin_sagging_visualization
  • pore_dilation_visualization
  • skin_type_visualization

If both acne_visualization and acne_normalized_visualization are requested, the API response will include acne_normalized_visualization.

skintone
required
integer
Allowed values: 0 1 2 3 4 5 6

User’s skintone to help Revieve CV estimate lighting conditions.

  • 0 - No user input (automatic)
  • 1 - Light
  • 2 - Fair
  • 3 - Medium
  • 4 - Olive
  • 5 - Brown
  • 6 - Dark Brown
gender
required
string
Allowed values: unknown female male

User’s gender (default unknown)

hairtype
integer
Allowed values: -1 0 1 2 3 4

User’s hair type to help Revieve CV analyze the hair.

  • -1 - No user input (automatic)
  • 0 - Coily Hair
  • 1 - DEPRECATED: CV will ignore this value
  • 2 - Curly Hair
  • 3 - Straight Hair
  • 4 - Wavy Hair
skintone_rgb
string
/^\d{3},\d{3},\d{3}$/

User’s approximate skin tone RGB to help Revieve CV analyze foundation color. String with the unsigned integer data for the RGB values, range 0-255 example 200,145,167 When provided, will override skintone input internally to guide the CV with regards to foundation color estimation. This input should not be provided if the skintone input use is preferred.

Media type multipart/form-data
object
image
required

A JPEG file with minimum dimensions of 600x600 pixels.

string format: binary
partner_id
required

Partner ID (if you don’t have one, use jmlv6b2qtS for testing)

string
default: jmlv6b2qtS

Image Analysis output

Media type application/json
object
face_area
object
bounding_box

Box coordinates that determine where the face is in picture 0 - top x box coordinate 1 - top y box coordinate 2 - bottom x box coordinate 3 - bottom y box coordinate

Array<number>
rotation

Degrees that face is rotated from vertical

number format: float
inverse_color_balance_rb

Data to white balance correction. You must apply in a RGB original colour this algorithm -> Resultant RGB = [Rinverse_color_balance_rb[0]**inverse_color_balance_rb[2], Ginverse_color_balance_rb[2], B*inverse_color_balance_rb[1]*inverse_color_balance_rb[2]]

Array<number>
message
  • OK means the image sent had no issues
  • Warning means there were some quality issues but CV processing was done.
  • Error means the image had serious issues that prevented the CV processing.
string
Allowed values: OK Warning Error
results
Array
Any of:
object
description

Name of the finding

string
Allowed values: eyes wrinkles redness redness_absolute texture smoothness Makeup LandmarkData melasma dull_skin radiance radiance_adjusted uneven_skin_tone Skin shine hyperpigmentation hyperpigmentation_adjusted acne freckles dark_spots dark_spots_adjusted pore_dilation skin_sagging skin_firmness hair skin_age skin_type
local_warnings
Array<object>
object
idx

All available codes, whether they result in error or warning and their descriptions:

General codes:

  • 99 (Error) [custom context] undefined failure. [NEW]

Image Preprocessor codes:

  • 100 (Error) Unable to process: image must be in RGB color format.
  • 101 (Error) Unable to process: Image resolution too small.
  • 102 (Error) Unable to downsample image resolution: Image aspect ratio too extreme.
  • 103 (Warning) Image too dark. Increase exposure.
  • 104 (Warning) Image is overexposed. Find more diffuse lighting.

Face Detection codes:

  • 201 (Error) Unable to detect a face
  • 202 (Warning) Multiple faces detected. Only the best fit face is analyzed.
  • 203 (Warning) Face detection is uncertain. Analysis quality is compromized.
  • 204 (Warning) Face detection is very uncertain. Analysis quality is unreliable.
  • 205 (Warning) More margin space around the face needed. Results might be compromised. Take the picture a bit further away.
  • 206 (Error) Facial landmarks are invalid. Aborting processing.

Normalizer codes:

  • 301 (Error) The detected face resolution is too small. Take a photo closer to the target.
  • 302 (Error) Face is too much tilted to the side. Face straight at the camera.
  • 303 (Warning) Face is possibly tilted to the side. Face straight at the camera.
  • 304 (Error) Face is too much tilted down. Face straight at the camera.
  • 305 (Warning) Face is possibly tilted down. Face straight at the camera.
  • 306 (Warning) Face is possibly tilted up. Face straight at the camera.
  • 307 (Warning) Image too dark at the face area. Increase exposure/light to the face.
  • 308 (Warning) Image is overexposed at the face area. Find more diffuse lighting or reduce exposure.
  • 309 (Warning) The face area blue channel is clipping (overexposed). Reduce exposure or adjust color balance.
  • 310 (Warning) The face area green channel is clipping (overexposed). Reduce exposure or adjust color balance.
  • 311 (Warning) The face area red channel is clipping (overexposed). Reduce exposure or adjust color balance.
  • 312 (Warning) The face has unsymmetric exposure. Find even illumination.
  • 313 (Warning) The face area has hard shadows. Find more diffuse lighting.
  • 314 (Warning) Eyeglasses detected. Remove eyeglasses before taking the photo. Results are unreliable.
  • 315 (Error) Forehead is partially outside the image. Make sure the whole face fits the image. Aborting processing.
  • 316 (Error) Lower face is partially outside the image. Make sure the whole face fits the image. Aborting processing.
  • 317 (Error) Face right side is partially outside the image. Make sure the whole face fits the image. Aborting processing.
  • 318 (Error) Face left side is partially outside the image. Make sure the whole face fits the image. Aborting processing.
  • 319 (Warning) Face is too tightly framed in the image. Leave more space around the face.

Skin masking codes:

  • 401 (Warning) Unable to sample skin. Acne/Hyperpigmentation results are unreliable.

Miscellaneous global codes:

  • 500 (Error) All metrics had an error.

Makeup analysis codes:

  • 1000 (Error) Skin tone input not defined. Unable to proceed.
  • 1101 (Error) Eyes look too much closed. Keep eyes open. Eye color analysis aborted.
  • 1102 (Warning) Eyes look quite closed. Keep eyes open.
  • 1111 (Error) Eyes region is too dark. Improve lighting on the eyes. Eye color analysis aborted.
  • 1112 (Warning) Eyes region is quite dark. Improve lighting on the eyes.
  • 1121 (Error) Eyes whites have a heavy color cast. Correct white balance settings on the camera. Eye color analysis aborted. [OBSOLETE]
  • 1122 (Warning) Eyes whites have a significant color cast. Correct white balance settings on the camera.
  • 1191 (Error) Eye color detection processing error 1. Eye area has no color information.
  • 1192 (Error) Eye color detection processing error 2. Eye area is too dark.
  • 1200 (Warning) Color balance not corrected due to eye area low image quality. Skin foundation color analysis might be unreliable

Pore dilation:

  • 2000 (Error) Image resolution for the face area is too low. Face at the image has to be at minimum 1200 pixels wide. [Outdated description: The limit is not necessarily 1200 pixels anymore]
  • 2001 (Warning) Image resolution for the face area is low.

Local metric codes:

  • 3000 (Error) Acne measurement aborted due to image quality concerns.
  • 3001 (Error) Cannot analyze skin sagging since eyebag analysis had failed.
  • 3002 (Error) Cannot analyze skin sagging since wrinkle analysis from required locations had failed.
  • 4000 (Warning) Skin firmness not analyzed due to error in skin sagging analysis.
  • 5000 (Error) Hair analysis aborted due to image quality concerns or internal error.
  • 5002 (Error) No hair detected. Hair analysis aborted.
  • 5003 (Error) Not enough hair detected. Hair analysis aborted.
  • 7000 (Error) Skin Age analysis aborted due to image quality concerns or internal error.
integer
description
string
isError
  • 1 - this status entry is an Error
  • 0 - informational
integer
measurement_locations
Array<object>

Individual location specific measurements

object
AOI_radius_o

Radius of the measurement

number
AOI_x_o

X position of the measurement in the original coordinates

number
AOI_y_o

Y position of the measurement in the original coordinates

number
ut_zone

Label telling if the area belongs to the so called U or T zones.

string
Allowed values: none mixed u-zone t-zone
description

Location name

string
Allowed values: Global nose chin left cheek right cheek left lower face right lower face forehead left eye right eye forehead worry lines between-brows frown lines noseline bunny lines left side eye crow's feet right side eye crow's feet left side tearline right side tearline left side nasolabial line right side nasolabial line vertical lip lines left side around the eye right side around the eye left side around mouth right side around mouth left side marionette line right side marionette line left under-the-eye region right under-the-eye region Lips Eyebrows Skin Liplines Eyelines Eyeshadow Nose Left cheek Right cheek forehead left forehead center forehead right u-zone t-zone
mask_shapes

Mask shapes for visualizing findings and rendering AR. How to draw the final shape of an area?

  • First, you need to draw all the shapes contained into “shapes” array in the same order you find them. Please take note that you must take care of color parameter to know if you need to add or remove it to prior shapes.
  • Then, if there is a value in “masks” property, you need to “mask” the final shape geted after draw all the shapes in “shapes” array.
object
coordinates
string
Allowed values: original
masks
object
color

1 to draw and 0 to erase mask

integer
params

Parameters to pass on to polygon and ellipse mask drawing functions

  • Ellipse parameters - x, y, radius x, radius y, rotation degrees, start angle degrees, end angle degrees
  • Polygon parameters - [[x0, y0], [x1, y1], …]
Array<Array<number>>
shapes
Array<object>
object
color

1 to draw and 0 to erase mask

integer
type

Type of mask drawing function to use

string
Allowed values: polygon unrestricted_polygon ellipse
params

Parameters to pass on to polygon and ellipse mask drawing functions

  • Ellipse parameters - x, y, radius x, radius y, rotation degrees, start angle degrees, end angle degrees
  • Polygon parameters - [[x0, y0], [x1, y1], …]
measures
Array<object>

Measures calculated from measurement_locations.

More detailed information on how to interpret the value in cases when the value is categorical or array instead of a scalar number below.

In case of Makeup finding we can find here information about face shape, skin tone and eye colour.

In case of “Face shape” sum_measures, we will find a value between 1 and 6 with this meaning:

  • 1: Diamond
  • 2: Heart
  • 3: Long
  • 4: Oval
  • 5: Round
  • 6: Square

In case of “Eye color” we will find a value between 1 and 3 with this meaning:

  • 1: Brown
  • 2: Blue
  • 3: Green

In case of “Skin undertone” we can find values between -1 and 1 with this meaning:

  • -1: Cool
  • 0: Neutral
  • 1: Warm

In case of “Skin foundation RGB” we can find two values inside The first one is the RGB colour reference detected by the CV module and the second one is a string description variable that communicates three possible states of analysis:

  • Foundation rgb is a valid skin tone.: the estimated skin tone is within valid skin tone range
  • Foundation rgb output was limited to be a valid skin tone.: the estimated skin tone was forced to be a valid skin tone (original estimate was unrealistic for a skin tone)
  • Foundation rgb is invalid.: skin tone is invalid, estimation failed.

In case of “Skin foundation raw RGB”; Same as above but the rgb values have not been corrected by skin type input parameters (skintone, skintone_rgb). String descriptions begin with “Raw foundation…” in contrast to above.

And the last one is “Skin Fitzpatrick type” that has the Fitzpatrick value detected by CV.

In case of Hair finding we can find here information about color, volume, type and frizziness.

Inside the “Hair color”, we can find two values. The first one is the actual color structure and the second one is a message (e.g. ‘Ok’). The color structure is an array of zero or more detected colors. For each color, we have an array that contains 1) index of color, 2) name of color, 3) number between zero and one that tells how common the color was in the detected hair, 4) RGB value of the closest color in our color dictionary.

Full list of color names available in our dictionary:

  • Pitch_Black
  • charcoal_Blackish_Brown
  • Navy_Brownish_gray
  • Light_Brownish
  • Light_Gray_Soonstone
  • Light_Gray_Icy
  • Light_Gray_Silver
  • White
  • Dark_Brownish_Black
  • Dark_Blackish_Brown
  • Brown
  • Pinkish_Brown
  • Darker_Pink
  • Coral_Pink
  • Pink
  • Lighter_Pink
  • Lightest_Pink
  • Dark_Megenta_Black
  • Darker_Megenta
  • Dark_Megenta
  • Coral_Megenta
  • Megenta
  • fine_Megenta
  • finer_Megenta
  • Lighter_Megenta
  • Lightest_Megenta
  • Darkest_Purple_Black
  • Darker_Purple_Black
  • Fine_Dark_Purple
  • Finer_Dark_Purple
  • Purple
  • Coral_Purple
  • Light_Purple
  • Lighter_Purple
  • Lightest_Purple
  • Darkest_Navy_Blue_Black
  • Darker_Navy_Blue_Black
  • Fine_Dark_Navy_Blue
  • Finer_Dark_Navy_Blue
  • Navy_Blue
  • Coral_Navy_Blue
  • Light_Navy_Blue
  • Lighter_Navy_Blue
  • Lightest_Navy_Blue
  • Darkest_Sky_Blue_Black
  • Darker_Sky_Blue_Black
  • Fine_Dark_Sky_Blue
  • Finer_Dark_Sky_Blue
  • Sky_Blue
  • Coral_Sky_Blue
  • Light_Sky_Blue
  • Lighter_Sky_Blue
  • Lightest_Sky_Blue
  • Darkest_Greenish_Cyan_Black
  • Darker_Greenish_Cyan
  • Fine_Dark_Greenish_Cyan
  • Finer_Dark_Greenish_Cyan
  • Cyan
  • Coral_Cyan
  • Light_Cyan
  • Lighter_Cyan
  • Lightest_Cyan
  • Darkest_Aqua_Greenish_Black
  • Darker_Aqua_Greenish
  • Fine_Dark_Aqua_Green
  • Finer_Dark_Aqua_Green
  • Aqua_Green
  • Coral_Aqua_Green
  • Light_Aqua_Green
  • Lighter_Aqua_Green
  • Lightest_Aqua_Green
  • Darkest_Greenish_Black
  • Darker_Green
  • Fine_Dark_Green
  • Finer_Dark_Green
  • Green
  • Coral_Green
  • Light_Green
  • Lighter_Green
  • Lightest_Green
  • Darkest_Lime_Greenish_Black
  • Darker_Lime_Green
  • Fine_Dark_Lime_Green
  • Finer_Dark_Lime_Green
  • Lime_Green
  • Coral_Lime_Green
  • Light_Lime_Green
  • Lighter_Lime_Green
  • Lightest_Lime_Green
  • Darkest_Yellowish_Black
  • Darker_Yellow
  • Fine_Dark_Yellow
  • Finer_Dark_Yellow
  • Yellow
  • Lime_Yellow
  • Coral_Light_Yellow
  • Lighter_Yellow
  • Lightest_Yellow
  • Darkest_Chocolate_Brown
  • Darker_Chocolate_Brown
  • Fine_Brown
  • Finer_Brick_Orange
  • Orange
  • Lite_Orange
  • Coral_Light_Orange
  • Lighter_Orange
  • Lightest_Orange
  • Darkest_Brownish_Black
  • Darker_Blackish_Brown
  • Fine_Brown
  • Finer_Brick_Red
  • Red
  • Lite_Red
  • Coral_Light_Red
  • Lighter_Red
  • Lightest_Red
  • Peachy_Blonde
  • Vanilla_Blonde
  • light_Blonde
  • Chestnut_Blonde
  • Butter_Blonde
  • Icy_Blonde
  • Golden_Blonde
  • Barbie_Blonde
  • Caramel_Blonde
  • Golden_Brown
  • Caramel_Brown
  • Toffee_Brown
  • Neutral_Brown
  • Bronze_Brown
  • Ash_Brown
  • Dark_Brown
  • Deep_Brown
  • Natural_Dark_Brown
  • Metallic_Gray
  • Soft_Silver_Gray
  • Feathery_Gray
  • Cool_Grey
  • Frosted_Grey
  • Dark_Blackish_Gray
  • Shiny_Blackish_Gray
  • Natural_Shiny_Gray

In case of “Hair volume”, we will find the hair volume value (number between 0 and 1).

In case of “Hair type” we will find a value between 0 and 4 with this meaning:

  • 0: Coily Hair
  • 1: DEPRECATED: CV will not output this anymore
  • 2: Curly Hair
  • 3: Straight Hair
  • 4: Wavy Hair

In case of “Hair frizziness” we will find an integer label of 0 or 1 with this meaning:

  • 0: Low frizziness
  • 1: High frizziness

In case of “Hair frizziness ranged”, we will find the hair frizziness value (number between 0 and 1).

In case of Skin age finding, we will find the skin age value (number between 0 and 100).

For “skin_type”, the value can be any of the following:

  • 0: none
  • 1: normal
  • 2: dry
  • 3: oily
  • 4: combination
  • 5: sensitive
  • 6: dry sensitive
  • 7: oily sensitive
  • 8: combination sensitive
object
description

Name of the measurement

string
value
One of:
array
value

Global value for this finding & location

number
visualization_data
Array
Any of:

Only available when requesting wrinkles_visualization

object
intensity
Array<number>
length

Total number of points that defines the wrinkle. In case of hyperpigmentation, it will always be 1 (because we are defining a spot not a line).

number
mean_intensity

Average intensity for this wrinkle / hyperpigmented spot

number
<= 1
median_intensity

Median value of intensity for this wrinkle / hyperpigmented spot

number
<= 1
length_weighted_intensity

A custom norm for a wrinkle that combines the length and the intensities of the wrinkle location. Longer and deeper wrinkles give a higher value.

number
<= 1
x
Array<number>
y
Array<number>
sum_measures
Array<object>

Measures calculated from measurement_locations.

More detailed information on how to interpret the value in cases when the value is categorical or array instead of a scalar number below.

In case of Makeup finding we can find here information about face shape, skin tone and eye colour.

In case of “Face shape” sum_measures, we will find a value between 1 and 6 with this meaning:

  • 1: Diamond
  • 2: Heart
  • 3: Long
  • 4: Oval
  • 5: Round
  • 6: Square

In case of “Eye color” we will find a value between 1 and 3 with this meaning:

  • 1: Brown
  • 2: Blue
  • 3: Green

In case of “Skin undertone” we can find values between -1 and 1 with this meaning:

  • -1: Cool
  • 0: Neutral
  • 1: Warm

In case of “Skin foundation RGB” we can find two values inside The first one is the RGB colour reference detected by the CV module and the second one is a string description variable that communicates three possible states of analysis:

  • Foundation rgb is a valid skin tone.: the estimated skin tone is within valid skin tone range
  • Foundation rgb output was limited to be a valid skin tone.: the estimated skin tone was forced to be a valid skin tone (original estimate was unrealistic for a skin tone)
  • Foundation rgb is invalid.: skin tone is invalid, estimation failed.

In case of “Skin foundation raw RGB”; Same as above but the rgb values have not been corrected by skin type input parameters (skintone, skintone_rgb). String descriptions begin with “Raw foundation…” in contrast to above.

And the last one is “Skin Fitzpatrick type” that has the Fitzpatrick value detected by CV.

In case of Hair finding we can find here information about color, volume, type and frizziness.

Inside the “Hair color”, we can find two values. The first one is the actual color structure and the second one is a message (e.g. ‘Ok’). The color structure is an array of zero or more detected colors. For each color, we have an array that contains 1) index of color, 2) name of color, 3) number between zero and one that tells how common the color was in the detected hair, 4) RGB value of the closest color in our color dictionary.

Full list of color names available in our dictionary:

  • Pitch_Black
  • charcoal_Blackish_Brown
  • Navy_Brownish_gray
  • Light_Brownish
  • Light_Gray_Soonstone
  • Light_Gray_Icy
  • Light_Gray_Silver
  • White
  • Dark_Brownish_Black
  • Dark_Blackish_Brown
  • Brown
  • Pinkish_Brown
  • Darker_Pink
  • Coral_Pink
  • Pink
  • Lighter_Pink
  • Lightest_Pink
  • Dark_Megenta_Black
  • Darker_Megenta
  • Dark_Megenta
  • Coral_Megenta
  • Megenta
  • fine_Megenta
  • finer_Megenta
  • Lighter_Megenta
  • Lightest_Megenta
  • Darkest_Purple_Black
  • Darker_Purple_Black
  • Fine_Dark_Purple
  • Finer_Dark_Purple
  • Purple
  • Coral_Purple
  • Light_Purple
  • Lighter_Purple
  • Lightest_Purple
  • Darkest_Navy_Blue_Black
  • Darker_Navy_Blue_Black
  • Fine_Dark_Navy_Blue
  • Finer_Dark_Navy_Blue
  • Navy_Blue
  • Coral_Navy_Blue
  • Light_Navy_Blue
  • Lighter_Navy_Blue
  • Lightest_Navy_Blue
  • Darkest_Sky_Blue_Black
  • Darker_Sky_Blue_Black
  • Fine_Dark_Sky_Blue
  • Finer_Dark_Sky_Blue
  • Sky_Blue
  • Coral_Sky_Blue
  • Light_Sky_Blue
  • Lighter_Sky_Blue
  • Lightest_Sky_Blue
  • Darkest_Greenish_Cyan_Black
  • Darker_Greenish_Cyan
  • Fine_Dark_Greenish_Cyan
  • Finer_Dark_Greenish_Cyan
  • Cyan
  • Coral_Cyan
  • Light_Cyan
  • Lighter_Cyan
  • Lightest_Cyan
  • Darkest_Aqua_Greenish_Black
  • Darker_Aqua_Greenish
  • Fine_Dark_Aqua_Green
  • Finer_Dark_Aqua_Green
  • Aqua_Green
  • Coral_Aqua_Green
  • Light_Aqua_Green
  • Lighter_Aqua_Green
  • Lightest_Aqua_Green
  • Darkest_Greenish_Black
  • Darker_Green
  • Fine_Dark_Green
  • Finer_Dark_Green
  • Green
  • Coral_Green
  • Light_Green
  • Lighter_Green
  • Lightest_Green
  • Darkest_Lime_Greenish_Black
  • Darker_Lime_Green
  • Fine_Dark_Lime_Green
  • Finer_Dark_Lime_Green
  • Lime_Green
  • Coral_Lime_Green
  • Light_Lime_Green
  • Lighter_Lime_Green
  • Lightest_Lime_Green
  • Darkest_Yellowish_Black
  • Darker_Yellow
  • Fine_Dark_Yellow
  • Finer_Dark_Yellow
  • Yellow
  • Lime_Yellow
  • Coral_Light_Yellow
  • Lighter_Yellow
  • Lightest_Yellow
  • Darkest_Chocolate_Brown
  • Darker_Chocolate_Brown
  • Fine_Brown
  • Finer_Brick_Orange
  • Orange
  • Lite_Orange
  • Coral_Light_Orange
  • Lighter_Orange
  • Lightest_Orange
  • Darkest_Brownish_Black
  • Darker_Blackish_Brown
  • Fine_Brown
  • Finer_Brick_Red
  • Red
  • Lite_Red
  • Coral_Light_Red
  • Lighter_Red
  • Lightest_Red
  • Peachy_Blonde
  • Vanilla_Blonde
  • light_Blonde
  • Chestnut_Blonde
  • Butter_Blonde
  • Icy_Blonde
  • Golden_Blonde
  • Barbie_Blonde
  • Caramel_Blonde
  • Golden_Brown
  • Caramel_Brown
  • Toffee_Brown
  • Neutral_Brown
  • Bronze_Brown
  • Ash_Brown
  • Dark_Brown
  • Deep_Brown
  • Natural_Dark_Brown
  • Metallic_Gray
  • Soft_Silver_Gray
  • Feathery_Gray
  • Cool_Grey
  • Frosted_Grey
  • Dark_Blackish_Gray
  • Shiny_Blackish_Gray
  • Natural_Shiny_Gray

In case of “Hair volume”, we will find the hair volume value (number between 0 and 1).

In case of “Hair type” we will find a value between 0 and 4 with this meaning:

  • 0: Coily Hair
  • 1: DEPRECATED: CV will not output this anymore
  • 2: Curly Hair
  • 3: Straight Hair
  • 4: Wavy Hair

In case of “Hair frizziness” we will find an integer label of 0 or 1 with this meaning:

  • 0: Low frizziness
  • 1: High frizziness

In case of “Hair frizziness ranged”, we will find the hair frizziness value (number between 0 and 1).

In case of Skin age finding, we will find the skin age value (number between 0 and 100).

For “skin_type”, the value can be any of the following:

  • 0: none
  • 1: normal
  • 2: dry
  • 3: oily
  • 4: combination
  • 5: sensitive
  • 6: dry sensitive
  • 7: oily sensitive
  • 8: combination sensitive
object
description

Name of the measurement

string
value
One of:
array
message
  • Ok means the metric was correctly calculate
  • Invalid means the image had serious issues that prevented the metric being calculated
string
Allowed values: Ok Invalid
value

Global value for this finding

number format: float
<= 1
value_raw

Global value for this finding before normalization. DEPRECATED.

number format: float
visualization_data
Array
One of:

Only available when requesting wrinkles_visualization

object
intensity
Array<number>
length

Total number of points that defines the wrinkle. In case of hyperpigmentation, it will always be 1 (because we are defining a spot not a line).

number
mean_intensity

Average intensity for this wrinkle / hyperpigmented spot

number
<= 1
median_intensity

Median value of intensity for this wrinkle / hyperpigmented spot

number
<= 1
length_weighted_intensity

A custom norm for a wrinkle that combines the length and the intensities of the wrinkle location. Longer and deeper wrinkles give a higher value.

number
<= 1
x
Array<number>
y
Array<number>
status
Array<object>
object
idx

All available codes, whether they result in error or warning and their descriptions:

General codes:

  • 99 (Error) [custom context] undefined failure. [NEW]

Image Preprocessor codes:

  • 100 (Error) Unable to process: image must be in RGB color format.
  • 101 (Error) Unable to process: Image resolution too small.
  • 102 (Error) Unable to downsample image resolution: Image aspect ratio too extreme.
  • 103 (Warning) Image too dark. Increase exposure.
  • 104 (Warning) Image is overexposed. Find more diffuse lighting.

Face Detection codes:

  • 201 (Error) Unable to detect a face
  • 202 (Warning) Multiple faces detected. Only the best fit face is analyzed.
  • 203 (Warning) Face detection is uncertain. Analysis quality is compromized.
  • 204 (Warning) Face detection is very uncertain. Analysis quality is unreliable.
  • 205 (Warning) More margin space around the face needed. Results might be compromised. Take the picture a bit further away.
  • 206 (Error) Facial landmarks are invalid. Aborting processing.

Normalizer codes:

  • 301 (Error) The detected face resolution is too small. Take a photo closer to the target.
  • 302 (Error) Face is too much tilted to the side. Face straight at the camera.
  • 303 (Warning) Face is possibly tilted to the side. Face straight at the camera.
  • 304 (Error) Face is too much tilted down. Face straight at the camera.
  • 305 (Warning) Face is possibly tilted down. Face straight at the camera.
  • 306 (Warning) Face is possibly tilted up. Face straight at the camera.
  • 307 (Warning) Image too dark at the face area. Increase exposure/light to the face.
  • 308 (Warning) Image is overexposed at the face area. Find more diffuse lighting or reduce exposure.
  • 309 (Warning) The face area blue channel is clipping (overexposed). Reduce exposure or adjust color balance.
  • 310 (Warning) The face area green channel is clipping (overexposed). Reduce exposure or adjust color balance.
  • 311 (Warning) The face area red channel is clipping (overexposed). Reduce exposure or adjust color balance.
  • 312 (Warning) The face has unsymmetric exposure. Find even illumination.
  • 313 (Warning) The face area has hard shadows. Find more diffuse lighting.
  • 314 (Warning) Eyeglasses detected. Remove eyeglasses before taking the photo. Results are unreliable.
  • 315 (Error) Forehead is partially outside the image. Make sure the whole face fits the image. Aborting processing.
  • 316 (Error) Lower face is partially outside the image. Make sure the whole face fits the image. Aborting processing.
  • 317 (Error) Face right side is partially outside the image. Make sure the whole face fits the image. Aborting processing.
  • 318 (Error) Face left side is partially outside the image. Make sure the whole face fits the image. Aborting processing.
  • 319 (Warning) Face is too tightly framed in the image. Leave more space around the face.

Skin masking codes:

  • 401 (Warning) Unable to sample skin. Acne/Hyperpigmentation results are unreliable.

Miscellaneous global codes:

  • 500 (Error) All metrics had an error.

Makeup analysis codes:

  • 1000 (Error) Skin tone input not defined. Unable to proceed.
  • 1101 (Error) Eyes look too much closed. Keep eyes open. Eye color analysis aborted.
  • 1102 (Warning) Eyes look quite closed. Keep eyes open.
  • 1111 (Error) Eyes region is too dark. Improve lighting on the eyes. Eye color analysis aborted.
  • 1112 (Warning) Eyes region is quite dark. Improve lighting on the eyes.
  • 1121 (Error) Eyes whites have a heavy color cast. Correct white balance settings on the camera. Eye color analysis aborted. [OBSOLETE]
  • 1122 (Warning) Eyes whites have a significant color cast. Correct white balance settings on the camera.
  • 1191 (Error) Eye color detection processing error 1. Eye area has no color information.
  • 1192 (Error) Eye color detection processing error 2. Eye area is too dark.
  • 1200 (Warning) Color balance not corrected due to eye area low image quality. Skin foundation color analysis might be unreliable

Pore dilation:

  • 2000 (Error) Image resolution for the face area is too low. Face at the image has to be at minimum 1200 pixels wide. [Outdated description: The limit is not necessarily 1200 pixels anymore]
  • 2001 (Warning) Image resolution for the face area is low.

Local metric codes:

  • 3000 (Error) Acne measurement aborted due to image quality concerns.
  • 3001 (Error) Cannot analyze skin sagging since eyebag analysis had failed.
  • 3002 (Error) Cannot analyze skin sagging since wrinkle analysis from required locations had failed.
  • 4000 (Warning) Skin firmness not analyzed due to error in skin sagging analysis.
  • 5000 (Error) Hair analysis aborted due to image quality concerns or internal error.
  • 5002 (Error) No hair detected. Hair analysis aborted.
  • 5003 (Error) Not enough hair detected. Hair analysis aborted.
  • 7000 (Error) Skin Age analysis aborted due to image quality concerns or internal error.
integer
description
string
isError
  • 1 - this status entry is an Error
  • 0 - informational
integer
Example
{
"face_area": {
"bounding_box": [
599.276392063823,
193.01919020926903,
1445.276392063823,
1207.019190209269
],
"rotation": -7.943472
},
"message": "OK",
"results": [
{
"description": "eyes",
"local_warnings": [
{
"idx": 308,
"description": "Image is overexposed at the face area. Find more diffuse lighting or reduce exposure.",
"isError": 0
}
],
"measurement_locations": [
{
"AOI_radius_o": 113.2046222948142,
"AOI_x_o": 590.2353768319389,
"AOI_y_o": 1026.3631232435266,
"ut_zone": "none",
"description": "Global",
"mask_shapes": {
"coordinates": "original",
"masks": {
"color": 1,
"params": [
[
154.30033286045997,
747.3805463094317
],
[
521.4668465690055,
737.1814764841944
],
[
491.6876895399641,
860.1568234387048
],
[
166.96841450785098,
1203.4314856155102
]
]
},
"shapes": [
{
"color": 1,
"type": "polygon",
"params": ""
}
]
},
"measures": [
{
"description": "eyebags",
"value": "0.112"
}
],
"value": 0.8713174414298542,
"visualization_data": [
{
"intensity": "",
"length": 27,
"mean_intensity": 0.24008360411190074,
"median_intensity": 0.24880123111804126,
"length_weighted_intensity": 0.24880123111804126,
"x": [
288.77660561081603,
287.2933463712191
],
"y": [
51.61554565114869,
51.600719797776975
]
}
]
}
],
"sum_measures": [
{
"description": "eyebags",
"value": "0.112"
}
],
"message": "Ok",
"value": 0.23211,
"value_raw": 3.21,
"visualization_data": [
{
"intensity": "",
"length": 27,
"mean_intensity": 0.24008360411190074,
"median_intensity": 0.24880123111804126,
"length_weighted_intensity": 0.24880123111804126,
"x": [
288.77660561081603,
287.2933463712191
],
"y": [
51.61554565114869,
51.600719797776975
]
}
]
}
],
"status": [
{
"idx": 308,
"description": "Image is overexposed at the face area. Find more diffuse lighting or reduce exposure.",
"isError": 0
}
]
}