Case study — mobile · computer vision · on-device ML

ISHARA

إشارة

Arabic Sign Language Recognition — a Flutter mobile app.

Ishara home screen — choose between Sign to Text and Text to Sign
The product

Arabic Sign Language recognition using on-device machine learning

Ishara is a Flutter mobile app exploring Arabic Sign Language recognition with on-device machine learning. It works in two directions, and the recognition pipeline is designed to run locally — without depending on a network connection. The current model recognizes 31 Arabic sign classes, including the compound signs ال and لا.

SIGN → TEXT

Point the camera at a hand sign, receive an Arabic letter.

The camera captures the hand, the pipeline predicts the corresponding letter, and the user builds it into a sentence.

Sign to text recognition screen with hand landmark overlay and predicted letter
TEXT → SIGN

Type Arabic text, see it signed letter by letter.

Typed text is broken into letters, each shown as its sign image, with playback to move through the sequence.

Text to sign screen showing Arabic text input and the corresponding hand sign
Runs locally — the app itself reads يعمل بدون إنترنت ("works without internet").
Product flow

Two recognition directions: sign-to-text and text-to-sign

Here's the same idea broken into its steps — a hand becomes a letter, or a letter becomes a hand.

SIGN → TEXT

✋

Hand

Presented to the camera.

📷

Camera

Captures the live frame.

◎

Hand detection

The hand is located in frame.

✦

Landmarks

Key points on the hand are extracted.

→

Prediction

The model predicts a letter.

ض

حرف عربي

الحرف المتوقع.

✎

Sentence

Confirmed letters build a sentence.

TEXT → SIGN

Tt

Arabic text

The user types a word or phrase.

✂

Letters

Text is broken into individual letters.

✋

Sign images

Each letter maps to a sign image.

▶

Playback

The sequence can be reviewed and navigated.

Playback screen showing a sign, letter, and progress
Deep dive — recognition

Sign-to-text recognition interface

The interface doesn't ask the user to blindly trust one prediction. It surfaces the prediction alongside correction options, so the user can confirm the intended letter before continuing.

Hand detection
System confirms a hand is in frame
Landmark overlay
Detected key points on the hand
Predicted letter
The model's current best guess
Sentence & letter count
Where the user is in the sentence
Sign to text recognition screen, annotated
Alternative candidates
Other letters to choose instead
Add letter
Confirms the letter into the sentence
Space / clear
Sentence-editing controls
Deep dive — translation

Text-to-sign translation interface

The reverse interaction: text becomes letters, letters become signs, and the whole sequence can be reviewed at the user's pace.

TYPE
TRANSLATE
SEE
NAVIGATE
Text input showing typed Arabic word and resulting sign
Playback screen with progress and transport controls

Left: typed text ("منار") returns its first sign, ready to translate. Right: the sequence in review, with a progress bar, letter chips, and transport controls to step through it.

The technology

From camera to prediction

What happens between the camera seeing a hand and a letter appearing on screen.

📷

Camera input

The camera captures the frame containing the user's hand.

◎

Hand detection

The hand is located within the frame.

✦

Landmark extraction

Key points on the hand are identified.

▦

Feature processing

Landmark points are prepared for the classifier.

▣

TensorFlow Lite

An on-device model classifies the sign from 21 hand landmarks.

✓

Prediction

An Arabic letter is predicted.

⏱

Temporal stabilization

Consecutive predictions are checked for consistency before a letter is accepted.

▤

Flutter UI

The result is shown to the user.

Landmark and prediction stages shown in the real interface

The landmark and prediction stages, as they appear in the real interface.

On-device

On-device recognition pipeline

The recognition pipeline runs on the device rather than depending on a server round trip.

ON DEVICE
✦
Hand landmarks
+
▣
TensorFlow Lite
→
✓
Arabic letter prediction
يعمل بدون إنترنت — works without internet
Design decisions

UI design decisions

Clear primary actions

Two obvious directions on Home — the user should never wonder which mode to pick.

Immediate feedback

A "hand detected" badge makes system state visible before a prediction is trusted.

Correctable predictions

Alternative candidates give the user a way to recover from a wrong prediction.

Progress visibility

Letter counts and a progress bar always show where the user is in the sequence.

Arabic / RTL

The interface follows Arabic reading direction throughout, not translated after the fact.

Architecture

Application architecture

Only the components genuinely required to make both directions work — no backend, no database, no unnecessary layers.

▤

Flutter UI

Renders the interface and captures user input.

⚙

Application logic

Coordinates camera input, recognition, and UI state.

📷

Camera / image input

Provides the live hand image.

◎

MediaPipe Hand Landmarker

Detects the hand and extracts landmark points.

✦

Processed landmarks

Landmark data is prepared for the model.

▣

TensorFlow Lite

Runs the on-device classification model.

✓

Prediction

Produces the predicted Arabic letter.

⏱

Temporal stabilizer

Accepts a letter only once consecutive predictions agree.

▤

Flutter UI

Displays the result back to the user.

Engineering

Engineering challenges

Recognizing hand shape

CHALLENGE
Turning a raw camera frame into something a model can classify.
APPROACH
MediaPipe Hand Landmarker for hand detection and landmark extraction.

Running ML on-device

CHALLENGE
Classifying a sign without a server round trip.
APPROACH
Local inference with TensorFlow Lite.

Turning predictions into usable UX

CHALLENGE
A single prediction is never guaranteed to be right.
APPROACH
Prediction shown with alternative candidates and clear feedback.

Managing multi-step interaction

CHALLENGE
Sentence building and sign playback both need reliable state.
APPROACH
Explicit sentence controls, playback state, and progress feedback.

Keeping predictions stable

CHALLENGE
Raw predictions can fluctuate between consecutive camera frames.
APPROACH
A temporal stabilization layer that only accepts consistent, stable predictions.
My role

Flutter development and ML integration

Flutter Developer — the work spanned the interface and the recognition pipeline itself.

Flutter UI development Camera integration MediaPipe integration Hand landmark processing TensorFlow Lite integration ML-to-UI integration Recognition stabilization logic Unit testing core recognition logic Material 3 design system Recognition interaction design Sentence-building logic Sign playback Debugging Performance considerations
Reflection

Technical and design learnings

ML + UI

A prediction only becomes useful when it's communicated clearly.

Computer vision

Landmarks provide a structured representation of hand pose.

On-device inference

Local inference changes how feedback should feel.

Correctable predictions

A prediction should be correctable, not blindly trusted.

Arabic / RTL

Language direction affects both layout and interaction, from the start.

State management

Recognition, sentence building, and playback all need reliable UI state.

Temporal stability

Raw predictions fluctuate frame to frame — only consistent signals should reach the UI.

Outcome

Outcome and current scope

WHAT I BUILT

A working Flutter prototype combining Arabic Sign Language interaction, computer vision, hand landmark extraction, TensorFlow Lite classification, text-to-sign interaction, sign playback, and offline / on-device recognition.

WHAT I LEARNED

How to connect a real-time recognition pipeline to a mobile product experience — while keeping the interaction understandable and usable.

Ishara is a prototype — a focused exploration of computer vision, on-device ML, and mobile product design.
Final showcase

Application screens

Home
Sign to text
Text to sign
Playback