Assistant visuel pour étudiants malvoyants : Intégration de YOLO de la sélection du modèle au déploiement

Pourquoi choisir YOLO pour un assistant visuel

Dans les écoles spécialisées, les étudiants malvoyants renconrtent des difficultés pour lire le tableau ou les manuels scolaires. Un assistant basé sur YOLO permet de détecter en temps réel les zones de texte, graphiques et objets importants, puis de les restituer vocalement ou visuellement. Les dernières versions de YOLO offrent des performances suffisantes pour fonctionner sur du matériel grand public.

Sélection du modèle et préparation des données

Critères de choix du modèle

YOLOv8n est préféré pour sa latence réduite (moins de 500ms). Dans ce contexte spécifique, seules 5 catégories principales sont nécessaires :

  • Blocs de texte
  • Zones graphiques
  • Visages
  • Mains
  • Objets pédagogiques

Annotation des données

Utilisation de labelImg pour annoter 800-1200 images couvrant différentes distances de lecture. Exemple de script de vérification :

def verifier_annotations(repertoire):
    erreurs = []
    for fichier in os.listdir(repertoire):
        if fichier.endswith('.txt'):
            with open(os.path.join(repertoire, fichier)) as f:
                for ligne in f:
                    valeurs = ligne.strip().split()
                    if len(valeurs) != 5:
                        erreurs.append(fichier)
    return erreurs

Entraînement du modèle

Configuraton recommandée pour data.yaml :

chemin: ./donnees
train: images/entrainement  
val: images/validation
nc: 5
noms: ["bloc_texte", "graphique", "visage", "main", "objet"]

Paramètres d'entraînement critiques :

  • Taille d'image : 640px minimum
  • Taux d'apprentissage : 0.005 à 0.008
  • Patience : 30 epochs

Post-traitement et interface utilisateur

Filtrage des résultats

Adaptation des seuils de confiance par catégorie :

seuils = {
    "bloc_texte": 0.15,
    "graphique": 0.15, 
    "visage": 0.3,
    "main": 0.3,
    "objet": 0.25
}

Priorisation des éléments

Algorithme de tri des détections :

def trier_detections(detections):
    priorites = {"bloc_texte":0, "graphique":1, "objet":2, "visage":3, "main":4}
    return sorted(detections, key=lambda x: (priorites[x.classe], -x.surface, x.position_y))

Optimisation pour matériel embarqué

Conversion en ONNX et quantificatino INT8 :

from onnxruntime.quantization import quantize_static

quantize_static(
    "modele.onnx",
    "modele_quantifie.onnx",
    calibration_data_reader=lecteur_calibration
)

Problèmes courants et solutions :

  • Perte de FPS : Quantification et réduction de la résolution
  • Sauts de détection : Désactivation de l'autofocus
  • Surdétection : Ajustement du seuil NMS

Étiquettes: YOLOv8 vision_artificielle assistance_handicap edge_computing ONNX

Publié le 15 octobre à 23h22