Aller au contenu

OCR d'écran

Résumé

  • Nom interne : ocr_task
  • Catégorie : Media Projection
  • Objectif : Capturer l'écran actuellement projeté et en extraire tout le texte visible via OCR embarqué (ML Kit Text Recognition).
  • Type de tâche : Normale

Compatibilité

  • Version minimale AndroMate : 1.1.0

  • Version maximale AndroMate : 1.1.0

  • Android minimum : Android 13 (API 33)

  • Android maximum testé : Android 16 (API 36)

  • Constructeurs supportés :

    • ✅ Tous les constructeurs
  • Permissions requises :

    • Une session MediaProjection active — obtenue via AskProjectionPermission, exécutée plus tôt dans le même workflow

Description détaillée

La tâche OCR d'écran capture une image de l'écran via la session MediaProjection active et lance la reconnaissance de texte embarquée (Google ML Kit) dessus, retournant chaque bloc de texte détecté.

Cette tâche nécessite une projection active — exécutez toujours AskProjectionPermission plus tôt dans le workflow. Appeler ocr_task sans projection active lève immédiatement une exception.

La sortie est un objet JSON où chaque clé est un index (à partir de 0) et chaque valeur est un bloc de texte reconnu (dans l'ordre de détection de ML Kit — approximativement de haut en bas, de gauche à droite, mais non garanti pour des mises en page complexes). Les blocs vides ou ne contenant que des espaces sont ignorés.


Paramètres d'entrée

Paramètre Type Obligatoire Valeurs possibles Compatibilité Android Compatibilité AndroMate Défaut
timeout_ms Integer Non Millisecondes à attendre la fin de la reconnaissance OCR Android 13 (API 33) → Android 16 (API 36) 1.1.0 → 1.1.0 5000

Paramètres de sortie

Paramètre Type Condition Compatibilité Android Compatibilité AndroMate Défaut
value_output String (objet JSON) Toujours, en cas de succès Android 13 (API 33) → Android 16 (API 36) 1.1.0 → 1.1.0 <ANDROMATE_NULL_VALUE>

value_output

Une chaîne JSON représentant un objet associant un index (depuis 0) à chaque bloc de texte reconnu, ex. {"0": "Paramètres", "1": "Wi-Fi", "2": "Bluetooth"}.


Exceptions

Code Nom de l'exception Description
MEDIA-PROJ-002 Projection non active Aucune session MediaProjection active — exécutez d'abord AskProjectionPermission.
MEDIA-PROJ-002 Échec de la capture Impossible de capturer l'image de l'écran depuis la projection active.
Timeout La reconnaissance OCR n'a pas terminé dans le délai timeout_ms.

Diagramme d'exécution

flowchart TD
    Start([▶ ocr_task]) --> CheckActive{Projection\nactive ?}
    CheckActive -->|Non| E1[❌ MEDIA-PROJ-002\nNOT_ACTIVE]
    CheckActive -->|Oui| Capture[📸 Capturer l'image de l'écran]
    Capture --> CheckBitmap{Image\ncapturée ?}
    CheckBitmap -->|Non| E2[❌ MEDIA-PROJ-002\nCAPTURE_FAILED]
    CheckBitmap -->|Oui| Recognize[🔍 Lancer la reconnaissance ML Kit]
    Recognize --> Wait{Terminée dans\ntimeout_ms ?}
    Wait -->|Non| E3[❌ Timeout]
    Wait -->|Oui| Build[📋 Construire index-vers-texte JSON]
    Build --> StoreResult[💾 Stocker value_output]
    StoreResult --> Success([✅ StrTaskResult])

    E1 --> Error([❌ Exception])
    E2 --> Error
    E3 --> Error

    style Start fill:#e3f2fd
    style Success fill:#c8e6c9
    style Error fill:#ffcdd2
    style Recognize fill:#fff9c4
    style StoreResult fill:#c8e6c9

Comment ça fonctionne :

  1. Vérifier la projection active : lève MEDIA-PROJ-002 (NOT_ACTIVE) si AskProjectionPermission n'a pas réussi plus tôt.
  2. Capturer : prend une image de l'écran courant via la projection. Lève MEDIA-PROJ-002 (CAPTURE_FAILED) si l'image revient nulle.
  3. Reconnaître : lance le reconnaisseur de texte embarqué de ML Kit sur l'image.
  4. Attendre : bloque jusqu'à la fin de la reconnaissance ou l'expiration de timeout_ms (lève un timeout sinon).
  5. Construire le résultat : collecte chaque bloc de texte non vide dans un objet JSON {"0": "...", "1": "...", ...}.
  6. Stocker : écrit la chaîne JSON dans value_output.

Détails des paramètres d'entrée

1. Paramètre d'entrée : timeout_ms

Durée d'attente de la fin de reconnaissance ML Kit, en millisecondes.

Exemple

"timeout_ms": 8000

Détails

  • Optionnel — vaut 5000 (5 secondes) par défaut si omis.
  • Non résolu comme une $variable — lu comme un entier littéral depuis le JSON.

Exemple JSON complet

{
  "AskProjectionPermission": [
    { "id": "1", "timeout_ms": 8000 }
  ],
  "ocr_task": [
    {
      "id": "2",
      "title": "Lire le texte de l'écran",
      "timeout_ms": 5000,
      "value_output": "$SCREEN_TEXT"
    }
  ]
}