# Opérations OCR

Ce chapitre vous présente comment utiliser l'OCR (Reconnaissance Optique de Caractères) pour assister les opérations d'interface. Dans des situations telles que les applications de jeu, les sélecteurs d'interface conventionnels peuvent ne pas être utilisables. Dans ce cas, vous pouvez choisir d'utiliser les méthodes OCR pour effectuer des opérations. La méthode de reconnaissance OCR ne prend en charge que des opérations telles que la vérification de l'existence d'un élément, le clic, la capture d'écran, etc. La bibliothèque backend OCR prend en charge l'utilisation de paddleocr, easyocr, ainsi que des interfaces backend HTTP personnalisées.

## Configuration du backend OCR

Avant d'utiliser la méthode de reconnaissance OCR, vous devez d'abord configurer le backend OCR. Vous devez **installer vous-même les bibliothèques de dépendances à l'avance**.

```{attention}
S'il s'agit d'un cluster, c'est-à-dire que vous devez contrôler plusieurs appareils sur le même ordinateur, assurez-vous de l'encapsuler vous-même en une interface HTTP OCR. L'utilisation directe de paddleocr ou easyocr consommera une grande quantité de mémoire locale ou de ressources de calcul, car chaque processus les rechargera.
```

Utiliser paddleocr comme backend, avec une qualité de capture d'écran de 80 pour la reconnaissance et l'accélération GPU.

```python
d.setup_ocr_backend("paddleocr", quality=80, use_gpu=True, drop_score=0.85, use_space_char=True)
```

Utiliser easyocr comme backend, avec une qualité de capture d'écran de 80, pour reconnaître le chinois simplifié et l'anglais.

```python
d.setup_ocr_backend("easyocr", ["ch_sim", "en"], quality=80)
```

Les paramètres supplémentaires dans `setup_ocr_backend` doivent être les paramètres d'initialisation de cette instance. Si vous ne comprenez pas comment les paramètres ci-dessus sont écrits, veuillez consulter les paramètres d'instanciation officiels ci-dessous et les comparer avec ceux ci-dessus.

```python
paddleocr.PaddleOCR(use_gpu=True, drop_score=0.85, use_space_char=True)
easyocr.Reader(["ch_sim", "en"])
```

Backend OCR personnalisé, principalement utilisé pour le contrôle d'un grand nombre d'appareils ou lorsque la machine locale ne dispose pas d'accélération GPU. Vous pouvez déployer la reconnaissance que vous avez écrite en tant que service HTTP et demander une reconnaissance à distance depuis le backend personnalisé. Vous devez hériter et écrire vous-même `MyCustomOcrBackend` et formater les résultats de la reconnaissance selon le format requis. Vous pouvez également trouver la définition du format de réponse dans le fichier `paddle_ocr_http_backend.py` que nous fournissons. Vous pouvez aussi le modifier légèrement et déployer ce service directement.

```python
class HttpOcrBackend(CustomOcrBackend):
    def __init__(self, url, auth):
        self.auth = auth
        self.url = url
    def ocr(self, image: bytes):
        r = requests.post(url, headers={"X-Auth": self.auth},
                                                    data=image)
        return r.json()
```

Ensuite, il suffit de définir le service backend de reconnaissance OCR sur la classe de service personnalisée.

```python
d.setup_ocr_backend(HttpOcrBackend, "http://server/ocr", "Secret")
```

## Sélecteurs OCR

Actuellement, le sélecteur de reconnaissance OCR ne prend en charge que les types suivants.

### text

Correspondance avec le texte complet.

```python
element = d.ocr(text="我的")
```

### textContains

Correspondance si le texte contient.

```python
element = d.ocr(textContains="我的")
```

### textMatches

Correspondance par expression régulière sur le texte.

```python
element = d.ocr(textMatches=".*?我的")
```

## Opérations OCR

Actuellement, le sélecteur de reconnaissance OCR ne prend en charge que les opérations suivantes.

### click

Clique sur l'élément sélectionné.

```python
element.click()
```

### click_exists

Clique sur l'élément sélectionné s'il existe.

```python
element.click_exists()
```

### exists

Vérifie si l'élément existe.

```python
element = d.ocr(textMatches=".*?我的")
```

### screenshot

Prend une capture d'écran de l'élément correspondant.

```python
element.screenshot(100, ).save("element.png")
```

### info

Obtient les informations OCR correspondantes.

```python
element.info()
```

```{tip}
Si l'OCR ne parvient toujours pas à résoudre votre problème, vous pouvez également essayer d'utiliser l'interface de correspondance de caractéristiques d'image pour la correspondance d'images.
```