Gesture Recognition System: From MediaPipe to Production

Gesture recognition pilots often fail under real-world conditions: lighting, angles, different operators. We develop turnkey gesture recognition systems — from problem definition to on-site deployment. Our engineers bring the solution to stable operation in a workshop, warehouse, or sales floor, and the client receives a ready-to-use tool with clear support guidelines.
Frequently Asked Questions

Gesture recognition: where the pilot breaks and why

A gesture recognition prototype almost always works in a demo: one hand in frame, even lighting, the operator repeats the gesture according to the script.

Under real workload the picture is different — several people in the field of view, occlusions, varying palm scale, changing lighting throughout the day.

Recognition accuracy on a demo stand and on a real stream diverge by orders of magnitude, and this is exactly where the pilot stalls: the gesture either triggers or it doesn't, and the operator stops trusting the gesture interface.

Let's break down exactly where the transition from prototype to production breaks. The first failure point is data: the model was trained on recordings of one person and one room, so on new people and angles it makes predictably wrong predictions.

The second is labeling: gestures that are similar in hand trajectory but different in meaning are labeled with a single class, and the classifier physically cannot distinguish them.

The third is latency: a heavy model on weak hardware responds slower than a person moves their hand, and the interface "drifts."

The fourth point is boundary behavior: when the hand leaves the frame, gets occluded, or the person is simply resting, the system should stay silent rather than emit a random gesture.

The fifth is the lack of feedback: the user doesn't understand whether the gesture was recognized or not, and repeats the motion, accumulating false triggers.

The sixth is the lack of metrics: without event logging and a correct-trigger rate, it's impossible to tell whether things improved after the rework.

A gesture prototype answers the question "can this be recognized." Production answers a different question — "does this work reliably on real people every day." Between them lie the collection and labeling of real data, calibration of trigger thresholds, latency control, and clear indication for the user. Below we break down how this is solved engineering-wise.

What industrial gesture recognition delivers

An industrial system differs from a demo not by average accuracy on a test set, but by its behavior on the worst frame: backlight from a window, a cluttered warehouse background, a hand in a glove, several people in the frame at once.

That is why we measure the metric not "overall," but by slices — separately by lighting conditions, by gesture types, and by the false positive rate on a background where there are no gestures at all.

Robustness to light and background comes from a combination: frame normalization before feeding it into the model, training on an extended set with artificially degraded lighting, and cutting off regions by depth or by hand tracking.

As a result, gesture recognition does not fall apart when the time of day changes or equipment is rearranged, and the confidence threshold is tuned to the task — in some cases it is more important not to miss a gesture, in others not to catch an extra one.

Response latency stops "drifting": we build the pipeline so that processing runs in a streaming fashion, with a fixed per-frame budget, and heavy stages do not block the output.

In practice, this means a stable 60–100 ms from gesture to interface reaction — enough for control to feel instantaneous rather than laggy.

We reduce false positives with three techniques: temporal confirmation (the gesture must hold for several frames), spatial anchoring to the interaction zone, and a separate classifier for "similar but non-target" movements.

The false positive rate drops from dozens per shift to a handful, and the operator stops fighting the system.

We assemble models on MediaPipe and train them for a specific scenario — the customer's gestures, angles, and background, not an abstract set.

Next comes measurement on your data: we capture reference recordings, calculate accuracy by slices, and only after that do we fix the thresholds.

Approaches to gesture recognition and their limitations

The choice of gesture recognition method is determined not by how "trendy" a model is, but by the shooting conditions: background, lighting, number of cameras, acceptable response latency.

Below are the working options that are realistically chosen between at the start of a project, and their boundaries of applicability.

Option When it fits Limitations
Classic hand tracking by keypoints One camera, frontal angle, hand gestures framed close-up Loses the hand when fingers overlap, during fast movement, with low contrast against the background
Skeletal model on a video stream Dynamic gestures and motion trajectory are needed Sensitive to angle, requires calibration for the scene
Depth-based classification (depth sensor) Poor lighting, complex background, multiple hands Tied to a specific sensor, limited by distance
Hybrid: tracking + neural network classifier Production with a stream of users and varying conditions Harder to maintain, requires data collection for the customer's scene

The difference shows up over the long run: recognition methods that deliver accuracy in a demo often degrade when lighting or angle changes. That is why we build in a margin for data and scenarios already at the prototype stage, not after launch.

The key question is not which method to choose, but how to connect hand tracking with the application logic: where gesture recognition ends and the interface reaction begins. Errors at this boundary cause false triggers more often than the model itself.

How we run a gesture recognition project

Work on a gesture recognition system begins not with choosing a model, but with pinning down which gesture is considered correct and under what conditions it is recognized.

That is why the first stage is requirements gathering: a list of gestures, the acceptable response latency, usage scenarios, and constraints on lighting and camera angle.

The output is an agreed-upon gesture vocabulary and acceptance criteria against which every subsequent iteration is checked.

Project stages

  1. Problem definition and gesture vocabulary. We fix the list of gestures, their visual differences, and conflicting pairs (for example, similar finger positions). We define the target accuracy and acceptable false positives.
  2. Data collection and labeling. We record video from real angles and lighting conditions, and label the frames. Separately, we prepare "hard" examples: partially occluded hands, motion, different skin types and clothing.
  3. Prototype on MediaPipe. We build a quick prototype on off-the-shelf hand tracking models to assess whether the accuracy is sufficient without training our own network. This is a cheap way to weed out unrealistic requirements before investing in labeling.
  4. Model training and fine-tuning. If the prototype is not sufficient, we train a classifier on the collected data, select the architecture and confidence thresholds. We test the model on a holdout set, not on the frames used during training.
  5. Model validation. We run the system on recordings the model has not seen: different people, different lighting, a different camera. We calculate accuracy for each gesture separately — an average metric hides failures on individual classes.
  6. Integration and optimization. We embed the model into the target application, configure streaming frame processing and behavior when tracking is lost. We achieve a stable response without degradation during long runs.
  7. Handover of the system to the client. We hand over the code, model weights, and instructions for deployment and fine-tuning on new data. We train the team and document the procedure for updating the gesture vocabulary.

Each stage ends with an artifact that can be verified: a gesture vocabulary, a labeled dataset, an accuracy report, a working prototype.

This makes it possible to stop the project at an early stage if the requirements do not match reality, and to avoid spending resources on a solution that is bound to be weak.

Artifacts and settings that remain with the customer

We hand over not "source files on a disk," but a working system with reproducible behavior.

Below is what physically remains with the customer after gesture recognition is launched: configurations, diagrams, operational procedures, and documentation that allow the system to be developed without us.

  • Model configuration — the weights of the trained network, inference hyperparameters, confidence thresholds for each gesture, and the class dictionary. With this set, retraining on new gestures is reproduced exactly, rather than "however it turned out last time."
  • Integration diagrams — flow diagrams from the camera to the event consumer: where frame capture happens, where inference happens, where buffering happens, and how the result reaches your system. With explicit failure points and behavior when frames are lost.
  • System documentation — architecture description, input and output data formats, hardware and network requirements, and instructions for running the test bench locally for debugging.
  • Operational procedures — the procedure for updating the model, rules for rolling back to the previous version, monitoring of accuracy drift in gesture recognition, and the frequency of recalibration for new lighting or camera placement.
  • Set of test scenarios — reference video sequences with annotations, used to verify that accuracy has not degraded after any change.
  • Deployment scripts — automated installation into the target environment and repeatable builds, so that the test bench comes up identically on your side and on ours.
  • Access and role matrix — who can change thresholds, who can update the model, who can only view metrics; with a change log.

Every artifact is verifiable: we run the deployment on your side and make sure the team reproduces the result from the documentation without our hints. If something remains only in correspondence, that is not a handover but a dependency on the contractor.

Case: gesture recognition on a production line

An operator on the line controlled the roller conveyor from a control panel: to feed a workpiece, they had to take their hands off the part, find the right button, and return to position.

Seconds were lost on these switches, and with protective gloves the buttons only responded intermittently — the operator pressed harder, the panel wore out, and the line went down for unplanned downtime.

The pilot was built on a camera above the workstation and a gesture recognition model. The first version on the test bench gave about 70% correct triggers: glare from shop-floor lighting and the similar gestures "stop" and "feed" got in the way.

The dataset was rebuilt for the real conditions of the shop floor, a second angle was added, and the command set was limited to six unambiguous gestures.

MediaPipe at the prototyping stage made it possible to quickly validate the hypothesis on recordings from the line, but for production the inference was moved to a local compute module next to the camera — frames do not go to an external network, and the response does not depend on the communication channel.

Metrics before and after

Indicator Before After
Share of recognized gestures ~70% on the bench 96-98% per shift
Response latency 400-600 ms on the panel up to 150 ms
False triggers 1 per 8-10 commands 1 per 200+ commands
Line downtime on switches regular stops isolated cases

Gesture control covered the main scenario — feeding and stopping without taking hands off the part. False triggers were eliminated through a confidence threshold: a command is executed only when a gesture is held steadily, not from a single frame.

Fallback to the panel remained as a backup mode — the operator switches to it with one button if the camera gets dirty or shifts.

The recognition case showed the main thing: deployment metrics are decided not by the model, but by the shooting conditions and the discipline of dataset collection for a specific production line.

How is gesture recognition different from hand tracking?

Hand tracking answers the question "where is the hand and how are the fingers positioned," while gesture recognition answers "what does the person want to say with it." The first provides geometry: the coordinates of the hand and joints in the frame, the pose of the palm, the motion vector.

The second turns that geometry into a discrete label — "stop," "ok," "point," "swipe." These are different tasks with different costs of error, and confusing them is the most common reason a prototype works in a demo and falls apart in the field.

Tracking is a continuous stream of coordinates that updates on every frame. It knows nothing about meaning: a hand in the frame is already a result.

Gesture classification works on top of it and solves an image recognition task: it takes a sequence of poses over a time window and assigns it a class.

Hence the key difference in requirements — tracking needs stability and a high update rate of coordinates, while the classifier needs labeling and robustness to variability: different people perform the same gesture differently, with different amplitude and speed.

In practice, these are two layers of a single pipeline. The lower one is hand tracking: it provides normalized coordinates that are invariant to the person's position in the frame and to scale.

The upper one is classification: over a temporal window of poses and trajectories, it determines the gesture and filters out false positives.

If you remove the lower layer, the classifier would have to be trained on raw pixels — that requires many times more data and transfers worse to a new scene, lighting, and camera.

If you remove the upper layer, you get a nice skeleton visualization but not gesture input that can be tied to an action in the interface.

The difference in approaches also shows up in the metrics. For tracking, we measure the share of frames with a correctly detected hand and the stability of coordinates — jitter at the boundaries and when fingers overlap.

For classification — per-class precision, recall, and a confusion matrix: which gestures the system confuses with one another.

The "point" and "swipe" gestures differ not by pose but by dynamics, so the classifier needs a temporal window rather than a single frame.

This also leads to different debugging: tracking is fixed at the level of the camera, lighting, and preprocessing, while classification is fixed at the level of labeling, class balance, and confidence thresholds.

For the client, this boils down to one question: what should happen at the output of the system. If you need a visualization of hand position or cursor control by coordinates, hand tracking is enough.

If you need gesture input as a command — "confirm," "cancel," "switch" — you can't do without a gesture classification layer, and it is precisely this layer that determines the accuracy and predictability of the product.

Common technical concerns about gesture recognition

Gesture recognition breaks down not on the model, but on the input data: changing lighting, hand angle, background, and synchronization of streams from multiple cameras.

Therefore, the first question to a contractor is not "which framework," but "how do you measure gesture accuracy in our scenario." The metric must be calculated on your material: the share of correctly recognized gestures, the share of missed triggers, and the delay between a gesture and the system's response. Without this, any discussion of accuracy remains theoretical.

How much does accuracy drop in poor lighting, and what is done about it?

The degradation depends on whether we are working with an RGB stream or with depth. In backlight and twilight, hand contours blur, and the model begins to confuse similar gestures.

This is solved not by "improving the model," but by preparing the input: infrared illumination, a polarizing filter, exposure calibration for the scene, and, where possible, switching to a depth camera.

We capture a test set in your real conditions in advance and determine at which lighting the accuracy remains acceptable.

Which cameras are suitable, and can we get by with the ones already installed?

Often you can — if the existing cameras have a stable stream and predictable exposure. For gestures, frame rate and the absence of heavy compression are critical: codec artifacts eat up fine finger motor skills.

We test your cameras on a test bench and state plainly where the current fleet is sufficient and where replacement is needed. This removes the risk of buying equipment that does not solve the task.

How is gesture recognition integrated into our product?

Integration goes through a service interface: your product sends a stream or frames and receives events with the recognized gesture and a confidence level. The reaction logic remains on your side — we do not hard-code business rules into the model.

Such a contour survives model replacement and does not require rewriting the product at the next update.

What if the accuracy in our scenario turns out to be lower than expected?

We fix the target metrics before the start and verify them on your material, not on public datasets. If the threshold is not reached, there are clear levers: fine-tuning on your data, changing the sensor, narrowing the set of gestures to those that are reliably recognized. You see which of them produces results and decide whether to move forward or stop.

Let's discuss the gesture recognition task

To keep the conversation concrete rather than "tell us about the task in general terms," four inputs are enough at the start: which gestures and how many we recognize, what hardware the system runs on (camera, depth, infrared sensors), in what mode — offline on the device or via a server, and what happens when recognition fails.

That is enough to estimate the project and put together a work plan without going into premature prototyping.

Next, we fix the scope and come back with an estimate and a plan. What we will need from you to start:

  • Video recordings or a live stream from real shooting conditions — lighting, background, angle, gesture speed.
  • A list of gestures with a description of which are critical and which can be recognized with lower accuracy.
  • The use case of the gesture interface: who gives a gesture and at what moment, and what the system should do in response.
  • Response latency requirements — how quickly the interface must react to a gesture.
  • Hardware and environment constraints: where the camera is placed, whether there are bystanders in the frame, whether the lighting changes.
  • The acceptable error rate and what to do when a gesture is not recognized — ignore, ask again, or roll back the action.
  • Integration points: which system we connect recognition to and over which channel we transmit the result.

Based on these inputs, we estimate the volume of data annotation, the complexity of the model, and the timelines. Describe the task — we will come back with an estimate and a work plan.

AI Development Areas

Latest works

  • Development of a web application for FEEDME
    Development of a web application for FEEDME
    1393
  • Development of an online store for the company FURNORO
    Development of an online store for the company FURNORO
    1368
  • B2B Advance company logo design
    B2B Advance company logo design
    815
  • Development of a web application for Enviok
    Development of a web application for Enviok
    1139
  • AIDER company logo development
    AIDER company logo development
    1057
  • CRM development for Chasseurs
    CRM development for Chasseurs
    1152