The identity follows the person, the pace follows the situation
- Log
- 9 of 25
- Date
- Reading
- 2 min read
Skills in this log
The evening of 20 October ended with a clear diagnosis: the robot computed a fingerprint of my face on every image, and looked for faces at full speed even when nothing happened. On 23 October I changed both.

Inside the machine
A track instead of a verdict. Until then, each image gave a verdict: me, someone unknown, nobody. Now, when a face appears, the program opens a track: this face, here, moving like this. It computes the fingerprint once, names the track, and from then on checks the name only every three seconds.
The name stays with the track when the face turns to profile, when it is cut by the edge of the image, or when it disappears for up to 20 seconds. Before, turning my head was enough to make me a stranger for a moment.
A pace that follows the situation. The program now looks at 3 images per second when someone is there and awake, 1 when the room is drowsy, and 0.5 when it is asleep. The box of the face is only refined when the face is small, under 100 pixels. And the main loop now runs at the rhythm of the sound, every 50 milliseconds, so the ears never wait for the eyes.
Every minute, the program writes a line in its log with what it spent. If it gets greedy again, I will see it.
What the numbers said
Measured on the robot over 60 seconds:
| Situation | My program | Whole robot |
|---|---|---|
| Old version, me in view | 1.31 cores | 68% |
| New version, nobody in view | 0.79 core | 48% |
| New version, me in view | 0.86 core | 54% |
With me in view, my program used 34% less processor, and the whole robot went from 68% to 54%. The program looked at 2.6 images per second and computed 13 fingerprints per minute instead of one per image. The time from image to verdict fell to a median of 158 ms over 66 minutes, against 471 ms for the old version, measured in different conditions, so I would not lean on that comparison.
What did not work, or not yet
My target was half a core. Awake, I did not reach it. The drowsy and asleep paces were not measured yet. And the loop runs 10 to 14 times per second instead of 20, because one image costs more than its 50 milliseconds. It does not hurt the listening: a sound peak stays visible for half a second, longer than one turn of the loop.
Before installing it, a fresh reviewer read the code with no context. Two important flaws came back and were fixed: a new track seen badly just after a jump of the head now gets three tries before being called “unknown”, and three refusals in a row from three-quarter view remove a name that was wrong.
Next
With the load under control, I could finally decide how the robot should behave on the desk, which is a different question entirely.
