Skip to content

Smart Glasses Form Reader #126

Description

@seehorne

Feature Description
Tool that assists a blind or low vision user wearing smart glasses to read and fill out paper forms using a finger or pen.

Problem It Solves
Difficulty in reading and filling out paper forms using assistive technology with smart glasses.

Proposed Solution
Develop a visual assistance tool that provides real-time audio guidance to read text and direct the user's pen to the correct input fields.

Implementation details
The tool uses visual cues to switch between reading text and providing spatial directions for writing, identifying text or labels under the finger, and aligning the pen with the correct input fields.
Assume each generated tool implements one user-facing task. If this issue enumerates multiple stages, execute one ordered copilot_llm_call(...) per stage, pass useful structured artifacts to later calls with metadata={"previous_stage_artifact": ...}, and pass the original image to every later visual stage. If an earlier result is empty, failed, or low-confidence, pass only the original image—not the failed response or artifact—so the next model can inspect it independently. Use the stage capability as capability. Choose only from these capabilities: general_reasoning, ocr, object_detection_localization, structured_visual_understanding, spatial_reasoning, navigation, camera_motion, or temporal_reasoning. Never use visual_reasoning. The backend may evaluate and escalate reasoning capabilities according to the execution policy. Generated tools must not choose implementations, models, providers, detector backends, fallback order, retries, or verification logic. Do not implement detection, OCR, VLM, LLM, model loading, or provider calls inside generated tool files. Generated tools must not create routers, capability registries, detector/OCR/LLM wrappers, new model-router clients, provider-specific DEFAULT_MODEL constants, COCO_CLASSES, .pt model loading/discovery logic, or direct provider calls.

Alternatives Considered
None

Example usage
{'reading_mode': {'actions': [{'action': "Finger points to 'CSE' at the top of the form", 'output': 'Reading CSE.'}, {'action': 'Finger points to the document title', 'output': 'Reading Notification of Advisor Change/Update.'}, {'action': "Finger points to the 'STUDENT NAME' label", 'output': 'Reading field student name.'}, {'action': "Finger points to the 'ID' label", 'output': 'Field ID.'}]}, 'writing_mode': {'actions': [{'action': "Pen is held slightly to the left of the 'STUDENT NAME' line", 'output': 'Slightly left to field student name.'}, {'action': "Pen is centered directly over the 'STUDENT NAME' line", 'output': 'Writing centered on field student name, ready to write.'}]}}

Live Mode
yes

Live Query

Additional Context
None.

Brainstorming Session

Q: What specific challenges might the user face when filling out forms in environments with varying levels of lighting, and how could the Smart Glasses Form Reader be designed to adapt to or mitigate these challenges?
A: If it cannot read the form for whatever reason, such as due to lighting, tell the user that the form cannot be read and the reason it cannot be read, in this case, lighting

Q: How would the Smart Glasses Form Reader behave if the user is trying to fill out a form with complex, intricate or multi-column layouts that may be challenging for the tool to accurately navigate and direct the user's actions?
A: As the video shows, if there are multiple fields in a single row, it reads aloud both/all of them in left to right order

Q: How would the Smart Glasses Form Reader behave if the user is trying to fill out a form with complex, intricate or multi-column layouts that may be challenging for the tool to accurately navigate and direct the user's actions?
A: As the video shows, if there are multiple fields in a single row, it reads aloud both/all of them in left to right order
Unless otherwise specified, in streaming mode, any verbal/text response should be limited to 15 words. No such limit applies to one-shot output.

Video Summary

In this video, a person demonstrates how a hypothetical visual assistance tool would function when interacting with a paper form. The tool operates in two distinct modes—reading and writing—determined by the objects visible in the camera's view.

Reading Mode (Finger Pointing)
When only a finger is used to point at the document, the tool enters reading mode. In this mode, the system identifies and speaks the text or labels under the finger.

  • Action: Finger points to "CSE" at the top of the form.
    • Output: "Reading CSE."
  • Action: Finger points to the document title.
    • Output: "Reading Notification of Advisor Change/Update."
  • Action: Finger points to the "STUDENT NAME" label.
    • Output: "Reading field student name."
  • Action: Finger points to the "ID" label.
    • Output: "Field ID."

Writing Mode (Pen and Finger)
When a pen is brought into view along with the user's hand, the tool switches to writing mode. This mode provides spatial feedback to help the user align their pen with the correct input fields.

  • Action: The pen is held slightly to the left of the "STUDENT NAME" line.
    • Output: "Slightly left to field student name."
  • Action: The pen is centered directly over the "STUDENT NAME" line.
    • Output: "Writing centered on field student name, ready to write."

The tool uses visual cues to provide real-time audio guidance, switching between reading text and providing spatial directions for writing based on whether a pen is present in the frame.

Write the code for this tool inside the tools folder. Assume the tool implements one user-facing task. For a Task Stages section, make one ordered copilot_llm_call(...) per stage and explicitly pass useful artifacts to later calls. Use only these capabilities: general_reasoning, ocr, object_detection_localization, structured_visual_understanding, spatial_reasoning, navigation, camera_motion, temporal_reasoning. Never use visual_reasoning. Do not import litellm, call litellm.completion(), create new model-router clients, create ModelRouter classes, resolve model names, resolve API keys, import detector libraries/provider SDKs/YOLO, define COCO_CLASSES, hardcode model names, load .pt files, or call YOLO(...). Do not select implementations, providers, fallback order, retries, or verification logic in generated tools.

Metadata

Metadata

Labels

enhancementNew feature or request

Type

No type

Projects

No projects

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions