Conditions for a good measurement
What the camera has to see for a pulse to be readable, how the widget guides a person into position, and what a recorded file must satisfy.
Saphere reads a change of colour far too small for the eye. The conditions that make it readable are not preferences. Below them there is no signal to read, and no amount of computing brings one back.
This page lists the four conditions, and says what to do when they are not met.
The four conditions
Light must fall on the face. Daylight or room light, reasonably even, coming from the front. The usual mistake is the opposite arrangement: someone sitting with a bright window behind them appears as a dark shape, and a dark shape carries no signal. Harsh direct light and near-darkness fail for the same reason, at the two other ends of the range.
The person must stay still. Movement changes how much light reaches the skin, far more than a heartbeat does, and hides it. Breathing and small adjustments are fine. Turning, talking and walking are not.
The face must be uncovered. The measurement reads skin. Scarves, high collars, hats pulled down and masks remove exactly the areas it reads.
The face must be in the frame, at the right distance, with the upper chest visible. Roughly 40 to 60 cm from the camera, the camera at about face height, the person upright and facing it. The upper chest matters for the breathing rate, which is read from its movement.
Design for these conditions, do not merely state them
The widget’s first screens exist to explain these four points before the camera opens, in ten languages. If you replace those screens with your own wording, keep what they say. Once the camera is open, it also guides the person into position: see guiding the person into position.When you send a recorded file
The API accepts a file you recorded yourself. Everything above still applies, with one difference that matters: nobody is guiding the person. Whatever framing was used is the framing you get, and a file that misses the conditions produces a measurement that fails at the end rather than a correction at the beginning.
| Requirement | Value |
|---|---|
| Duration | 30 seconds recommended; under 10 seconds the file is refused, and only about the first 30 seconds are read |
| Frame rate | 13 to 35 images per second; outside that range the file is refused |
| Size | Up to 100 MB |
| Framing | Upright, facing the camera, camera at face height, upper chest visible — from the very first image, which is where the face is looked for |
| Distance | 40 to 60 cm |
| Light | Even, neither harsh nor dim |
| Movement | As little as possible for the whole recording |
The accepted file formats are listed on the measurements page.
When a measurement disappoints
A finished measurement carries its own explanation: a variable that could not be computed comes back with an error code naming the reason, rather than with a silent absence. That is the first place to look. The codes that point at the conditions above are these:
| Code | What it says | What to change |
|---|---|---|
CONFORMITY_FACE_PRESENCE, CONFORMITY_FACE_SIZE | The face was not found, or not properly in the frame | Centre the face, fully visible, at the right distance |
CONFORMITY_POOR_LIGHT, CONFORMITY_ONDULATIONS | The light was not good enough | More light, falling on the face |
CONFORMITY_MUCH_VARIATIONS | Too much changed during the capture | Stay still, and keep the light steady |
CONFORMITY_LOW_FPS | The camera delivered too few images per second | Charge the device, turn energy saving off, close other applications |
CONFORMITY_MISSING_SIGNAL | No usable signal came out of the capture | Measure again |
The widget turns each of them into a short explanation on its result screen, in the person’s language.