Bonjour à tous,

J'ai réaliser (enfin j'ai plutôt compiler les infos) un petit script avec un hash perceptuelle (Dhash) afin de reconnaitre si une image est semblable à une autre.

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
#!/bin/bash
#passage des variables en dehors de la boucle while
shopt -s lastpipe
#recherche des images dans le répertoire
for image in /tmp/seb/deux/test/*
        do
#initialisation des variables
        hash=""
        i=0
#convertir l'image et récupérer la couleur
        convert "$image" -resize 9X8\! -colorspace Gray txt:- |
        tail -n +2 | tr -cs '0-9.\n'  ' ' |
                while read x y r g junk; do
#algorythme DHASH
                        case $i in
                                "0") precedent=$r
                                ((i++));;
                                [1-7]) if [ "$precedent" -gt "$r" ]
                                                then hash=$hash"1"
                                                else hash=$hash"0"
                                        fi
                                        precedent=$r
                                        ((i++));;
                                "8") if [ "$precedent" -gt "$r" ]
                                                then hash=$hash"1"
                                                else hash=$hash"0"
                                        fi
                                        i=0;;
                        esac
                done
#calcul de la distance de Hamming entre 2 images
distance=0
left=$hash
#image à comparer à :
right="0101110100000000010110000000000000000000000000000000000000000001"
for ((j=0; j<${#left}; j++));do
        [[ "${left:j:1}" == "${right:j:1}"  ]] || (( "distance++"))
done
echo "difference est ${distance}"
done
Le code fonctionne mais j'ai un problème de performance. Pour analyser 2800 images (qui se trouvent en mémoire vive "/tmp/ ..." ) cela me prend +/- 1m20 soit 35 images à la seconde.

Y-a-t-il moyen optimiser cela ou dois-je changer de langage de programmation? Lequel? Le but étant que ce petit script soit le plus rapide possible.

Bonne soirée