Allerdings bekomme ich nun immer eine Fehlermeldung beim Skript Durchlauf... wenn ich compare ausführe bekomme ich zwei Rückgabewerte:
|
Quellcode
|
1
|
tga # compare -extract 1200x900+120+0 -metric mae vid00005.tga reference.bmp deleteme.png
|
|
Quellcode
|
1
|
391.195 (0.00596925)
|
Du solltest in diesem Fall einfach 391 (oder einfach 400) als Threshold nehmen. In Shellskripten lässt sich nur umständlich mit Fliesskommaeinheiten rechnen.
Ist es richtig, dass dann zu viele Argumente an $value übergeben werden? Gibt es eine Möglichkeit nur die 391 in $value zu schreiben?
"value" sollte eigentlich automatisch berechnet werden. Auch sieht es mir irgendwie so aus, als ob deine extract-geometry falsch ist. 1200x900+120+0 bedeutet, dass du einen grauen Bereich der Größe 1200x900 hast, der innerhalb des Bildes an der Position 120x0 beginnt. Ist das bei dir wirklich der Fall?
Ich habe das mal in ein Shellskript gepackt welches ein wenig robuster ist. Getestet habe ich es aber im Moment nur unter Linux, nicht aufm Mac:
|
Quellcode
|
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
41
42
43
44
45
46
47
|
#!/bin/sh
THIS_PATH="$(readlink -e "$0")"
THIS_NAME="$(basename "$THIS_PATH")"
if [ $# -lt 4 ] ; then
echo
echo "Usage: $THIS_NAME <image-directory> <reference-image> <extraxt-geometry> <threshold>"
echo
echo "Example: $THIS_NAME /path/to/directory /path/to/reference.png 50x50+800+600 50"
echo
exit 1
fi
COMP_DIR="$1"
COMP_REFERENCE="$(readlink -e "$2")"
COMP_GEOMETRY="$3"
COMP_THRESHOLD="$(echo "$4" | sed 's/[\. ].*//g')"
[ ! -f "$COMP_REFERENCE" ] && echo "Could not find reference image '$COMP_REFERENCE'!" && exit 1
cd "$COMP_DIR"
[ $? -ne 0 ] && echo "Could not change to directory '$COMP_DIR'!" && exit 1
TMP_IMG="$(mktemp).png"
for bild in * ; do
[ ! -f "$bild" ] && continue
echo -n "Comparing image '$bild'..."
value="$(compare -extract "$COMP_GEOMETRY" -metric mae "$bild" "$COMP_REFERENCE" "$TMP_IMG" 2>&1)"
[ $? -ne 0 ] && echo "[ERROR] $value" && continue
[ "$(echo "$value" | wc -l )" -ne 1 ] && echo "[ERROR] $value" && continue
value="$(echo "$value" | sed 's/[\. ].*//g')"
echo -n "[$value]"
if [ $value -lt $COMP_THRESHOLD ] ; then
echo " => [DELETED]"
mv "$bild" "$bild.DELETEME"
else
echo
fi
done
rm "$TMP_IMG"
|
Das Skript einfach in eine Datei "compare-images.sh" kopieren, die Datei ausführbar machen und dann aufrufen:
chmod 755 compare-images.sh
./compare-images.sh
Parameter:
- "image-directory" sollte ein Verzeichnis sein, welches NUR die Bilder enthält.
- "reference-image" sollte das Referenzbild sein, welches den grauen Kasten enthält. Dieses sollte nicht im image-directory liegen, da es sonst gelöscht wird.
- "extract-geometry" ist der Bereich in dem der graue Kasten innerhalb des Bildes zu finden ist
- "threshold" ist der compare Schwellwert
Bilder die den grauen Kasten enthalten werden in <bildname>.DELETEME umbenannt.