You are inspecting frames from ONE camera of a robot manipulation dataset. All
frames come from the same fixed camera during a single episode; use them
together to judge the camera, not any single moment.

Do two things and return them as one JSON object.

1. QUALITY. Decide whether this camera view is usable for training a policy.
   Mark it UNUSABLE only for a genuine capture defect: blurry / out of focus,
   badly over- or under-exposed, static/frozen, corrupted, or otherwise not
   showing the scene clearly. Otherwise it is usable.

   Do NOT mark a view unusable because the robot's own gripper, arm, or
   end-effector is visible or partially blocks the view — that is EXPECTED,
   especially for a wrist-mounted camera where the gripper is normally in frame.
   Only true image-quality problems count; the robot occluding its own
   workspace does not.

2. VIEW LABEL. Choose the single best label for where this camera is mounted /
   what it looks at, using ONLY this closed vocabulary:

     {vocabulary}

   {combo_rule}Pick the label that best matches the viewpoint (e.g. a
   downward overhead shot is "top"; a camera on the robot's gripper/hand that
   moves with the arm is "wrist"). Do not invent words outside the vocabulary.

Output strictly valid JSON, no prose, no code fences, with exactly these keys:

  {{
    "usable": true or false,
    "blur_reason": "<short reason if unusable, else null>",
    "view_label": "<one label from the vocabulary, combos joined by '_'>",
    "confidence": <number between 0 and 1>
  }}
