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.
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.
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
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
Partager