Facedetect Imagemagick
Just working on adapting Facedetect/Imagemagick to paste a head onto a body. This can be used to for example set up accurate compositing of images.
Code:
for file in facedetect/*.jpg; doname=$(basename "$file")i=0facedetect "$file" | while read -r x y w h; doconvert "$file" smileface.png -geometry "${w}x${h}+${x}+${y}" -composite "faces/${name%.*}_${i}.${name##*.}" i=$((i+1))donedoneExample:
Problem:
First solution:
"${w+400}x${h+400}+${x}+${y}"Problem:
"${w+400}x${h+400}+${x-200}+${y-200}"Original images:
Suggestion from helpful coder:
xul=255yul=175xc=`convert smiley.png +repage -format "%[fx:$xul + w/2]\n" info:`yc=`convert smiley.png +repage -format "%[fx:$yul + h/2]\n" info:`offx=`convert actor.jpg -format "%[fx:$xc-w/2]\n" info:`offy=`convert actor.jpg -format "%[fx:$yc-h/2]\n" info:`convert actor.jpg smiley.png +repage -gravity center -geometry +${offx}+${offy} -compose over -composite result1.jpgCurrently working on applying to batch though:for file in facedetect/*.jpg; doname=$(basename "$file")i=0facedetect "$file" | while read -r x y w h; doxc=`convert smileface.png +repage -format "%[fx:$xul + w/2]\n" info:`yc=`convert smileface.png +repage -format "%[fx:$yul + h/2]\n" info:`offx=`convert "$file" -format "%[fx:$xc-w/2]\n" info:`offy=`convert "$file" -format "%[fx:$yc-h/2]\n" info:`convert "$file" smileface.png +repage -gravity center -geometry ${w+300}x${h+300}+${offx}+${offy} -compose over -composite "faces/${name%.*}_${i}.${name##*.}" i=$((i+1))donedoneResult:convert-im6.q16: missing an image filename `-composite' @ error/convert.c/ConvertImageCommand/3260.bash: faces/clooney_0.jpg: Permission deniedconvert-im6.q16: missing an image filename `-composite' @ error/convert.c/ConvertImageCommand/3260.bash: faces/dfsd_0.jpg: No such file or directoryconvert-im6.q16: missing an image filename `-composite' @ error/convert.c/ConvertImageCommand/3260.bash: faces/ghgh_0.jpg: No such file or directorySecond round. This worked:for file in facedetect/*.jpg; do name=$(basename "$file") i=0 facedetect "$file" | while read -r x y w h; do xul=255 yul=175 xc=`convert smileface.png +repage -format "%[fx:$xul + w/2]\n" info:` yc=`convert smileface.png +repage -format "%[fx:$yul + h/2]\n" info:` offx=`convert "$file" -format "%[fx:$xc-w/2]\n" info:` offy=`convert "$file" -format "%[fx:$yc-h/2]\n" info:` convert "$file" smileface.png +repage -gravity center -geometry 300x300+${offx}+${offy} -compose over -composite "faces/${name%.*}_${i}.${name##*.}" i=$((i+1)) donedoneHowever, some of the pictures were off center. There is clearly more to do to make this generally consistent across all jpgs being used (of different dimensions)