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
- Une session MediaProjection active — obtenue via
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 :
- Vérifier la projection active : lève
MEDIA-PROJ-002(NOT_ACTIVE) siAskProjectionPermissionn'a pas réussi plus tôt. - Capturer : prend une image de l'écran courant via la projection. Lève
MEDIA-PROJ-002(CAPTURE_FAILED) si l'image revient nulle. - Reconnaître : lance le reconnaisseur de texte embarqué de ML Kit sur l'image.
- Attendre : bloque jusqu'à la fin de la reconnaissance ou l'expiration de
timeout_ms(lève un timeout sinon). - Construire le résultat : collecte chaque bloc de texte non vide dans un objet JSON
{"0": "...", "1": "...", ...}. - 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
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.