web-dev-qa-db-fra.com

Comment utiliser le code de traitement des images de test?

Je travaille dans le traitement de l'image (principalement OCR) et je me demande comment je devrais intégrer des tests unitaires dans mon développement.

J'utilise déjà des tests d'unités pour plus de types de code "commun", mais lorsque vous traitez avec le code de traitement de l'image, je ne sais pas comment y faire face. Ce type de code a toujours besoin d'une entrée/sortie de données d'image et de moquer cela n'est pas évident. Pour l'instant, je fais principalement des tests d'intégration, mais ils prennent un certain temps à courir et je voudrais des idées sur la façon de décomposer ce type de code dans des tests d'unité afin que je puisse les exécuter plus rapidement.

EDIT: L'analyse d'un personnage peut passer par de nombreuses étapes impliquant plusieurs opérations de rotation, de mise à l'échelle et de morphologie. Ces étapes changent souvent comme l'élaboration de l'algorithme. Ainsi, l'entrée et la sortie attendue peuvent évoluer beaucoup pendant le test. Chaque caractère peut être 100x100 pixels, donc les plus codés dans le code ou le fonctionnement avec des données générées est hors de question.

14
rold2007

Je travaille avec l'enregistrement vidéo/l'analyse/le logiciel de streaming et nous avons fait face à un problème très similaire. Vous trouverez ci-dessous notre solution, je ne sais pas comment cela va travailler à long terme, mais pour l'instant, il semble fonctionner.

Enregistrez des images d'entrée/sortie comme des ressources dans votre projet de test de l'unité. Avoir un test d'unité vérifie que lorsqu'une entrée spécifique est donnée, cette sortie spécifique est produite.

9/10 fois lorsque vous refactorisez le code et ajoutez d'autres fonctionnalités, vous vous attendriez à ce que le comportement de vos routines de manutention d'image ne changez pas, de sorte que si toutes les tests d'unité soudains commencent à défaillance, c'est probablement due à une erreur.

D'autre part, si vous apportez des changements dans l'algorithme réel, cela entraînera également une défaillance des tests d'unités. Dans ce cas, vous devez vérifier manuellement/vérifier visuellement que les résultats sont corrects et s'ils ont l'air bien, mettez à jour les ressources d'image pour que le test de l'unité passe à nouveau.

Dans notre projet, nous avons fini par développer "faux" (ou simulacté si vous voulez) des sources vidéo, qui peuvent nourrir des données américaines à la fois pour l'entrée et la sortie. Mais les données elles-mêmes ne sont pas fausses, elles ont été effectivement capturées à l'aide de classes d'enregistrement de données d'assistant à partir d'un système en cours d'exécution lorsque nous avons exécuté des tests manuels et vérifié que tout fonctionnait.

12
DXM