Metadata-Version: 2.4
Name: afrik-fingerprint
Version: 0.1.4
Summary: Une boîte à outils Python légère pour interagir avec les capteurs d'empreintes digitales optiques ou capacitifs AS608, R307, R503 et compatibles.
Project-URL: Homepage, https://github.com/bigdahaut/afrik-fingerprint
Author: Bigdahaut
License: MIT
License-File: LICENSE
Keywords: africa,as608,biometrics,fingerprint,iot,r307,r503,uart
Classifier: Development Status :: 3 - Alpha
Classifier: Intended Audience :: Developers
Classifier: License :: OSI Approved :: MIT License
Classifier: Programming Language :: Python :: 3
Classifier: Topic :: System :: Hardware :: Hardware Drivers
Requires-Python: >=3.8
Requires-Dist: pyserial>=3.5
Description-Content-Type: text/markdown

# 🌍 afrik-fingerprint

Un toolkit Python open-source conçu par et pour les développeurs africains, permettant de tester, configurer et communiquer facilement avec les capteurs d'empreintes digitales compatibles (AS608, R307, R503, etc.) via une liaison série (UART).

![Python Version](https://img.shields.io/badge/python-3.8%2B-blue)
![License](https://img.shields.io/badge/license-MIT-green)
![PyPI Status](https://img.shields.io/pypi/v/afrik-fingerprint)

## 🎯 Fonctionnalités

- **Agnostique et multi-capteurs** : Support unifié pour la gamme de capteurs Grow Technology (AS608, R307, R503, etc.).
- **Gestion simplifiée du protocole** : Encapsulation des trames binaires, calcul automatique des checksums et gestion des erreurs UART.
- **Workflow complet** : Capture d'images, extraction des caractéristiques (minutiae), fusion de gabarits et recherche dans la base de données interne.
- **Prêt pour l'intégration** : Idéal pour vos prototypes de contrôle d'accès locaux, de bornes de pointage (time-and-attendance) et de solutions fintech en Afrique.

## 🚀 Installation

Installez simplement le package via pip :

```bash
pip install afrik-fingerprint
```

Note : Assurez-vous d'avoir configuré les permissions d'accès au port série (par exemple, /dev/ttyUSB0 ou /dev/ttyS0 sur Linux/Raspberry Pi) et d'utiliser un convertisseur de niveau logique 3.3V si nécessaire.

## 💻 Exemples d'Utilisation

Le package gère nativement les différents modèles de capteurs de la gamme (AS608, R307, R503, etc.) qui partagent le protocole Grow Technology.

### 1. Initialisation selon votre modèle de capteur

```python
from afrik_fingerprint import AS608, R307, R503

# Pour un capteur optique standard AS608
sensor_as = AS608(port="/dev/ttyUSB0", baudrate=57600)

# Pour un capteur R307 (boîtier rectangulaire avec câble de raccordement)
sensor_r307 = R307(port="/dev/ttyUSB0", baudrate=57600)

# Pour un capteur R503 (modèle encastrable circulaire avec anneau LED lumineux)
sensor_r503 = R503(port="/dev/ttyUSB0", baudrate=57600)

print(f"Capteur initialisé avec succès.")
```

### 2. Enrôlement d'une empreinte digitale (Exemple avec le R503)

Processus complet en deux captures pour enregistrer une nouvelle empreinte dans la mémoire flash du module :

```python
from afrik_fingerprint import R503
import time

# Connexion au capteur circulaire R503
sensor = R503(port="/dev/ttyUSB0")

print("Placez votre doigt sur le capteur R503...")
# Capture de la première image et conversion en buffer 1
if sensor.capture_and_generate(buffer_id=1):
    print("Première capture réussie. Retirez votre doigt.")
    time.sleep(2)
    
    print("Remplacez le même doigt...")
    if sensor.capture_and_generate(buffer_id=2):
        print("Seconde capture réussie. Fusion et enregistrement...")
        # Fusion des buffers 1 & 2 et stockage à l'ID 1
        if sensor.register_and_store(storage_id=1):
            print("Empreinte enregistrée avec succès à l'ID 1 !")
        else:
            print("Erreur lors de l'enregistrement en mémoire flash.")
    else:
        print("Échec de la seconde capture.")
else:
    print("Aucun doigt détecté ou échec de la première capture.")
```

### 3. Recherche 1:N (Identification avec un R307)

Identifier à qui appartient une empreinte présentée face à la base de données interne :

```python
from afrik_fingerprint import R307

sensor = R307(port="/dev/ttyUSB0")

print("Présentez votre doigt pour l'identification...")
# Capture et conversion dans le buffer 1
if sensor.capture_and_generate(buffer_id=1):
    # Recherche dans la base de données (IDs de 0 à 1000)
    match_found, template_id, score = sensor.search_database(buffer_id=1, start_page=0, page_num=1000)
    
    if match_found:
        print(f"Correspondance trouvée ! ID utilisateur : {template_id} (Score : {score})")
    else:
        print("Aucune correspondance trouvée dans la base de données.")
```

🤝 Contribution

Les contributions de la communauté sont les bienvenues pour étendre la compatibilité avec d'autres modules biométriques ! N'hésitez pas à ouvrir une Pull Request sur GitHub.