Author Topic: Face detection  (Read 3772 times)

Phil Harvey

  • ExifTool Author
  • Administrator
  • ExifTool Freak
  • *****
  • Posts: 6519
    • ExifTool Home Page
Face detection
« on: March 01, 2011, 08:03:24 AM »
Attached is a script I wrote to test the face detection information written by Canon, FujiFilm, Nikon, Olympus, Panasonic, Pentax and Sony cameras.

The script draws a box around each face, and outputs a set of reduced-size JPEG images (see sample below).  It works well with all of my test images, but I haven't tested it with all models.  It requires ExifTool 8.50 or later.

I am providing this script to serve as an example of how to use the face detection information, since I thought it might be useful for other developers.

- Phil



Code: [Select]
#!/usr/bin/perl -w
#
# File:         facetest.pl
#
# Syntax:       facetest.pl [MAKE|DIR|FILE]...
#
# Description:  test face detection decoding
#
# Revisions:    2011/02/26 - P. Harvey created
#
# Face Colors:  Red/Blue - basic face area from newer/older format metadata
#               Green    - primary face(s)?
#
# Notes:      - requires imagemagick 'convert' to be installed
#             - draws rectangles around faces and writes output files to tmp
#             - defaults to DIR of '../testpics/facedetect/Olympus'
#             - processes only JPG images
#             - output imags are written to 'tmp' directory
#
use strict;

BEGIN { unshift @INC, 'lib' }
use Image::ExifTool;

sub Found($@);
sub Rectangle($$$$);
sub Line($$$$);

my $resize = 640;   # maximum width of rescaled images
my $dstdir = 'tmp';

my @files = @ARGV;
@files or push @files, '../testpics/facedetect/Olympus';
my $et = new Image::ExifTool;

mkdir $dstdir;      # make sure destination directory exists

my $file;
foreach $file (@files) {
    unless (-e $file) {
        my $f = "../testpics/facedetect/$file";
        unless (-e $f) {
            warn("Can't open $file\n");
            next;
        }
        $file = $f;
    }
    if (-d $file) {
        # read all files in directory (recursively)
        opendir DIR, $file or warn("Error opening $file\n"), next;
        my @f = readdir DIR;
        closedir DIR;
        foreach (@f) {
            next if /^\./;
            push @files, "$file/$_";
        }
        next;
    }
    next unless $file =~ /\.jpg$/i; # only process JPEG images
       
    my $info = $et->ImageInfo($file);
    next unless $$info{ImageWidth} and $$info{ImageHeight};
    my $aspect = $$info{ImageHeight} / $$info{ImageWidth};

    # calculate dimensions for a resized image with a max width of $resize pixels
    my ($rw, $rh) = ($resize, $resize * $aspect);

    my ($tag, $make);
    foreach $tag ('FacesDetected', 'ValidAFPoints') {
        next unless defined $$info{$tag};
        $make = $et->GetGroup($tag, 1);
        last;
    }
    print "==== $file ";
    my $model = $$info{Model} || '';
    if ($make) {
        print "[$make]\n";
    } else {
        print "[no recognized face information]\n";
        next;
    }
    # initialize 'convert' command with default drawing parameters
    my $cmd = "convert '$file' -fill none -strokewidth 2 -stroke red";

    if ($make eq 'Sony') {

        next unless Found($info, 'FacesDetected', 'Face1Position');
        $cmd .= " -resize ${rw}x$rh";
        # calculate scaling factors for face detect area coordinates
        my ($sx, $sy) = ($rw/$$info{ImageWidth}, $rh/$$info{ImageHeight});
        for (my $i=1; ; ++$i) {
            my $tag = "Face${i}Position";
            last unless $$info{$tag};
            my @a = split ' ', $$info{$tag};
            last unless @a >= 4;
            my ($x1, $y1) = ($a[1]*$sx, $a[0]*$sy);
            my ($x2, $y2) = ($x1+$a[3]*$sx, $y1+$a[2]*$sy);
            $cmd .= Rectangle($x1,$y1,$x2,$y2);
        }

    } elsif ($make eq 'FujiFilm') {

        next unless Found($info, 'FacesDetected', 'FacePositions');
        my $n = $$info{FacesDetected} or print("No faces\n"), next;
        my @a = split ' ', $$info{FacePositions};
        my $s = int(2 * $$info{ImageWidth} / $rw + 0.5);
        $cmd .= " -strokewidth $s";
        for (my $i=0; $i<$n; ++$i) {
            $cmd .= Rectangle($a[$i*4], $a[$i*4+1], $a[$i*4+2], $a[$i*4+3]);
        }
        $cmd .= " -resize ${rw}x$rh";

    } elsif ($make eq 'Nikon') {

        next unless Found($info, 'FacesDetected', 'FaceDetectFrameSize', 'Face1Position');
        my ($fw,$fh) = split ' ', $$info{FaceDetectFrameSize};
        # (note: have seen crazy $fh for S550, so scale Y by same factor as X)
        my ($sx,$sy) = ($rw/$fw, $rw/$fw);
        $cmd .= " -resize ${rw}x$rh";
        for (my $i=1; ; ++$i) {
            my $val = $$info{"Face${i}Position"} or last;
            my @a = split ' ', $val;
            # (have seen high bit set in a S550 sample, so reset it just in case)
            my ($x1,$y1) = (($a[0]&0x7fff)*$sx, ($a[1]&0x7fff)*$sy);
            my ($x2,$y2) = ($x1+$a[2]*$sx, $y1+$a[3]*$sy);
            $cmd .= Rectangle($x1,$y1,$x2,$y2);
        }

    } elsif ($make eq 'Panasonic') {

        next unless Found($info, 'FacesDetected', 'Face1Position');
        $cmd .= " -resize ${rw}x$rh";
        # face detect frame is 320 pixels wide
        my ($fw, $fh) = (320, 320 * $aspect);
        my ($sx, $sy) = ($rw/$fw, $rh/$fh);
        for (my $i=1; ; ++$i) {
            my $val = $$info{"Face${i}Position"} or last;
            my @a = split ' ', $val;
            my ($x1,$y1) = (($a[0]-$a[2]/2)*$sx, ($a[1]-$a[3]/2)*$sy);
            my ($x2,$y2) = ($x1+$a[2]*$sx, $y1+$a[3]*$sy);
            $cmd .= Rectangle($x1,$y1,$x2,$y2);
        }

    } elsif ($make eq 'Pentax') {

        next unless Found($info, 'FacesDetected');
        my $n = $$info{FacesDetected};
        $n or print("No faces\n"), next;
        $cmd .= " -resize ${rw}x$rh";
        if ($$info{'FacePosition'}) {
            my ($x,$y) = split ' ', $$info{FacePosition};
            my $w = 100; # TEST how big is the face?
            my ($x1,$y1) = ($x*$rw/100-$w/2, $y*$rh/100-$w/2);
            my ($x2,$y2) = ($x1+$w, $y1+$w);
            # draw the primary face in green
            $cmd .= ' -stroke green -strokewidth 4';
            $cmd .= Rectangle($x1,$y1,$x2,$y2);
        }
        $cmd .= ' -stroke red -strokewidth 2';
        my ($sx,$sy) = ($rw/$$info{ImageWidth}, $rh/$$info{ImageHeight});
        for (my $i=1; $i<=$n; ++$i) {
            my $val = $$info{"Face${i}Position"} or last;
            my ($x,$y) = split ' ', $val;
            $val = $$info{"Face${i}Size"} or last;
            my ($w,$h) = split ' ', $val;
            my ($x1,$y1) = (($x-$w/2)*$sx, ($y-$h/2)*$sy);
            my ($x2,$y2) = ($x1+$w*$sx, $y1+$h*$sy);
            $cmd .= Rectangle($x1,$y1,$x2,$y2);
        }

    } elsif ($make eq 'Canon') {

        # older models store face detect information
        if ($$info{FacesDetected} and $$info{FaceDetectFrameWidth}) {
            print("No faces\n"), next unless $$info{FacesDetected};
            my ($fw, $fh) = @$info{'FaceDetectFrameWidth', 'FaceDetectFrameHeight'};
            $fw or ($fw,$fh) = (320,240);
            # draw older Canon face detect information in blue
            $cmd .= " -resize ${rw}x$rh -stroke blue";
            my ($sx,$sy) = ($rw/$fw, $rh/$fh);
            my $facewid = $$info{FaceWidth} || 35;
            for (my $i=1; ; ++$i) {
                my $val = $$info{"Face${i}Position"} or last;
                my @a = split ' ', $val;
                my ($x1,$y1) = (($a[0]+$fw/2-$facewid)*$sx, ($a[1]+$fh/2-$facewid)*$sy);
                my ($x2,$y2) = ($x1+$facewid*2*$sx, $y1+$facewid*2*$sy);
                $cmd .= Rectangle($x1,$y1,$x2,$y2);
            }
        } else { # newer models use AF points
            next unless Found($info, 'ValidAFPoints', 'AFImageWidth', 'AFImageHeight',
                              'AFAreaXPositions', 'AFAreaYPositions', 'PrimaryAFPoint');
            # test for face detect mode
            unless ($$info{AFAreaMode} and $$info{AFAreaMode} =~ /Face/) {
                print "Face detect off\n";
                next;
            }
            my ($width, $height) = @$info{'AFImageWidth', 'AFImageHeight'};
            my @x = split ' ', $$info{AFAreaXPositions};
            my @y = split ' ', $$info{AFAreaYPositions};
            # sometimes widths are stored separately for each AF area
            my (@w, @h);
            if ($$info{AFAreaWidths}) {
                @w = split ' ', $$info{AFAreaWidths};
                @h = split ' ', $$info{AFAreaHeights};
            } elsif ($$info{AFAreaWidth}) {
                @w = ($$info{AFAreaWidth}) x (scalar @x);
                @h = ($$info{AFAreaHeight}) x (scalar @x);
            } else {
                print("No AF area size\n");
                next;
            }
            # convert to positive coordinates
            $_ += $width/2 foreach @x;
            $_ += $height/2 foreach @y;
            # EOS models have Y flipped
            if ($model =~ /EOS/) {
                $_ = $height - $_ foreach @y;
            }
            $cmd .= " -resize ${rw}x$rh";
            # calculate scaling factors for AF area coordinates
            my ($sx,$sy) = ($rw/$width, $rh/$height);
            for (my $i=0; $i<$$info{ValidAFPoints}; ++$i) {
                my ($x1,$y1) = (($x[$i]-$w[$i]/2)*$sx, ($y[$i]-$h[$i]/2)*$sy);
                my ($x2,$y2) = ($x1+$w[$i]*$sx, $y1+$h[$i]*$sy);
                $cmd .= Rectangle($x1,$y1,$x2,$y2);
            }
        }

    } elsif ($make eq 'Olympus') {

        # Olympus stores 1 or 2 (or maybe more in the future) sets of face-detect data.
        # I'm not sure why, but the 2nd set (drawn in green) seems to be more accurate.
        next unless Found($info, 'FacesDetected', 'FaceDetectArea');
        my @f = split ' ', $$info{FacesDetected};
        unless ($f[0] or $f[1]) {
            print "No faces detected\n";
            next;
        }
        my @a = split ' ', ${$$info{FaceDetectArea}};
        my (@m, $type, @col);
        if ($$info{MaxFaces}) {
            @m = split ' ', $$info{MaxFaces};
            $type = 'new';
            # draw the first set of faces in red, and
            # the second set in green (what is the difference?)
            push @col, 'red', 'green';
        } else {
            push @m, 0;
            # draw older face detect info in blue
            push @col, 'blue';
        }
        my ($max, $face);
        my $pos = 0;
        my $aspect = $$info{ImageHeight}/$$info{ImageWidth};

        # get face detect frame size
        my ($frame_w, $frame_h);
        if ($$info{FaceDetectFrameSize} and
            $$info{FaceDetectFrameSize} =~ /^(\d+) (\d+)/)
        {
            ($frame_w, $frame_h) = ($1, $2);
        } else {
            ($frame_w, $frame_h) = (240, 180);  # empirically determined for older models
        }

        # get width/height of largest resized image that fits into face detect frame
        my ($crop_w, $crop_h, $crop_x, $crop_y);
        if ($$info{FaceDetectFrameCrop} and
            $$info{FaceDetectFrameCrop} =~ /^(\d+) (\d+) (\d+) (\d+)/)
        {
            ($crop_x, $crop_y, $crop_w, $crop_h) = ($1, $2, $3, $4);
        } else {
            if ($aspect < 1) {
                $crop_w = $frame_w;
                $crop_h = $frame_w * $aspect;
                if ($crop_h > $frame_h) {
                    $crop_w = $frame_h / $aspect;
                    $crop_h = $frame_h;
                }
            } else {
                $crop_w = $frame_w;
                $crop_h = $frame_w / $aspect;
                if ($crop_h > $frame_h) {
                    $crop_w = $frame_h * $aspect;
                    $crop_h = $frame_h;
                }
            }
            ($crop_x, $crop_y) = (($frame_w - $crop_w) / 2, ($frame_h - $crop_h) / 2);
        }
        my $rot = 270; # default rotation angle to landscape
        my $orient;
        $orient = $1 if $$info{Orientation} and $$info{Orientation} =~ /(\d+)/;
        # swap resized width/height if image will be rotated
        # (probably just necessary if post-processing rotation was applied)
        if ($rh > $rw) {
            my $t = $rw;
            $rw = $rh;
            $rh = $t;
        }
        my $draw = '';
        my ($sx, $sy) = ($rw/$crop_w, $rh/$crop_h);
        foreach $max (@m) {
            my $faces = shift @f;
            my $col = shift @col;
            $draw .= " -stroke $col" if $faces;
            for (my $face=0; $face<$faces; ++$face) {
                last if $pos + 4 > scalar @a;
                my $n = $pos + $face * ($type ? 4 : 8);
                my ($x1,$y1,$x2,$y2,$xc,$yc,$xr,$yr);
                if ($type) {
                    my ($x,$y,$w,$r) = @a[$n..($n+3)];
                    if (defined $orient) {
                        # the angle depends on orientation for some models (doh!)
                        $r -= $orient if $model eq 'u-7050';
                    } else {
                        # rotate by 90 if any face orientation if 90 degrees
                        $rot = 90 if $r == 90;
                        # again, angle depends on orientation for some models
                        $r += $rot if $aspect > 1 and $model =~ /^FE4030/;
                    }
                    my $hx = $w * $sx / 2;
                    my $hy = $w * $sy / 2;
                    # adjust coordinates for cropped border and scale to resized image
                    $xc = ($x - $crop_x) * $sx;
                    $yc = ($y - $crop_y) * $sy;
                    ($x1, $y1) = ($xc - $hx, $yc - $hy);
                    ($x2, $y2) = ($x1 + $w * $sx, $y1 + $w * $sy);
                    ($xr, $yr) = ($xc + $hx * sin($r * 3.14159/180),
                                  $yc - $hy * cos($r * 3.14159/180));
                } else {
                    # adjust coordinates for cropped image
                    for (my $i=$n; $i<$n+8; $i+=2) {
                        $a[$i] = ($a[$i] - $crop_x) * $sx;
                        $a[$i+1] = ($a[$i+1] - $crop_y) * $sy;
                    }
                    my ($x3,$y3,$x4,$y4);
                    ($x1,$y1,$x2,$y2,$x3,$y3,$x4,$y4) = @a[$n..($n+7)];
                    ($xr, $yr) = (($x1+$x2)/2, ($y1+$y2)/2);
                    $x2 = $x3 if $x2 == $x1;
                    $y2 = $y3 if $y2 == $y1;
                    ($xc, $yc) = (($x1+$x2)/2, ($y1+$y2)/2);
                }
                # draw the face rectangle and line pointing to the top of the face
                $draw .= Rectangle($x1,$y1,$x2,$y2);
                $draw .= Line($xc,$yc,$xr,$yr);
            }
            $pos += $max * 4;
        }
        # rotate image if necessary
        $cmd .= " -rotate $rot" if $aspect > 1 and not defined $orient;
        # resize the image to the face detect frame size and draw the face detect areas
        $cmd .= " -resize ${rw}x$rh $draw";

    } else {

        warn "Sorry: $make images not yet supported by this script\n";

    }
    $cmd =~ /-draw/ or print("No face\n"), next;
    my $name = $file;
    $name =~ s/.*\///; # remove directory name
    $cmd .= " '$dstdir/$name'";
    print "$cmd\n";
    system $cmd;
}

# check to see if all specified tags were found
# Inputs: 0) tag info hash, 1-N) tag names
sub Found($@)
{
    local $_;
    my $info = shift;
    foreach (@_) {
        next if defined $$info{$_};
        print "Missing $_\n";
        return 0;
    }
    return 1;
}

# return 'convert' argument for drawing a rectangle
# Inputs: 0) left, 1) top, 2) right, 3) bottom
sub Rectangle($$$$)
{
    local $_;
    my @a = @_;
    # round off to 1 decimal place
    $_ = int($_ * 10 + ($_ < 0 ? -0.5 : 0.5)) / 10 foreach @a;
    return " -draw 'rectangle $a[0],$a[1] $a[2],$a[3]'";
}

# return 'convert' argument for drawing a line
# Inputs: 0) x1, 1) y1, 2) x2, 3) y2
sub Line($$$$)
{
    local $_;
    my @a = @_;
    # round off to 1 decimal place
    $_ = int($_ * 10 + ($_ < 0 ? -0.5 : 0.5)) / 10 foreach @a;
    return " -draw \"path 'M $a[0],$a[1] L $a[2],$a[3]'\"";
}

# end

P.S.  Thanks to Jeffrey Friedl for the sample images.


Edit: An updated version of this script is available, and may be downloaded here: facetest.pl

This new version supports more camera makes, and provides a portable FaceList() function to use in other scripts. It requires ExifTool 8.53 or later. The following makes are now supported:

Canon, Casio, FujiFilm, Nikon, Olympus, Panasonic, Pentax, Ricoh, Sanyo and Sony

« Last Edit: March 27, 2011, 02:55:17 PM by Phil Harvey »

evilaro

  • Sr. Member
  • ****
  • Posts: 114
    • EvilFOTO
Re: Face detection
« Reply #1 on: March 03, 2011, 06:15:55 PM »
Phil:

This seems very very very interesting...  ;) but I really do not
know anythig regarding Perl...

So... would it be posible just to have a parameter using Exiftool
that detects if a file has one ore more of this squares, boxes, faces or whatever.

Then it will be simple just to look at the images that has faces.

Thanks

Emilio


www.evilfoto.eu
*************

Phil Harvey

  • ExifTool Author
  • Administrator
  • ExifTool Freak
  • *****
  • Posts: 6519
    • ExifTool Home Page
Re: Face detection
« Reply #2 on: March 03, 2011, 07:00:53 PM »
Hi Emilio,

For 90% of the models you can just check to see if FacesDetected exists and is non-zero.

The 10% are newer Canon models which use the AF areas to store the face positions.  For these you must check AFAreaMode to see if it is "Face Detect AF", then check ValidAFPoints to see if it is non-zero.

- Phil

Edit: But note that this will only work for images where the camera was set to face detection mode.
« Last Edit: March 03, 2011, 07:08:47 PM by Phil Harvey »

evilaro

  • Sr. Member
  • ****
  • Posts: 114
    • EvilFOTO
Re: Face detection
« Reply #3 on: March 04, 2011, 06:37:16 AM »
Hi Phil:

I have scaned 60 000 images ;) in order to find
some faces. Very few anyway found... I do not use it to much

The compact cameras are the ones that have it most.

I use this format which show the file wanted code

      run(false, 'exiftool.exe -r -FacesDetected "&DIR"  > result.csv' )    

But the result is always (when there is a face) Face Detected = 0
And I never get more than 0.


But if I look at that file, there is a face

I understood reading your comment that it should state at least 1...

Am I doing something wrong?

This is what I see on the exif file

Face Detect Frame Width         : 0
Face Detect Frame Height        : 0
Faces Detected                       : 0



-other point
Also while doing this big scanning, on the CMD (DOS) windows, there was many errors showing,
regarding to printing or problems with the file....

I would like in order to see what are this errors to see them on the result.csv file
is this possible?


Thanks

« Last Edit: March 04, 2011, 06:59:01 AM by evilaro »
www.evilfoto.eu
*************

Phil Harvey

  • ExifTool Author
  • Administrator
  • ExifTool Freak
  • *****
  • Posts: 6519
    • ExifTool Home Page
Re: Face detection
« Reply #4 on: March 04, 2011, 07:15:43 AM »
You can use the -T option to generate a tab-delimited output file, and extract the Error and Warning tags if you want too:

exiftool -r -T -FacesDetected -Warning -Error "&DIR" > out.csv

It is not surprising that FacesDetected is always zero.  As I said, the camera must be in face detect mode, and with random sample images I find that most people do not seem to use this mode.

- Phil

evilaro

  • Sr. Member
  • ****
  • Posts: 114
    • EvilFOTO
Re: Face detection
« Reply #5 on: March 07, 2011, 10:59:33 AM »
Phil:

This week-nd I have taken 2 compact camera with the Face mode detection activated

Canon G11 (2 years old) and Casio Exilin EX-H20G (the one that comes with GPS) its a this year camera.

When I am taking pictures I see the Boxes around the faces, moving and following the faces.
So all is as expected ;)

a) The Canon camera comes with the Face information on The exif.

Using
exiftool.exe -r -AFAreaMode "&DIR"  > resultado.csv


I get this on the images that have faces...

AF Area Mode                : Face Detect AF


which is near perfect.
But there is one image that has Faces but is not detected with this tag

But looking at the AF Point shows this.
AF Point                        : Face Detect

How can I get this AF Point ? .... or to make the question more general, if using Exiftool I get
a tag, on the list How can get the -  value to put on the equation

-AFPoint  doe not work.

b) On the Casio Images I have tried the previos system and this one

    'exiftool.exe -r -FacesDetected "&DIR"  > resultado.csv


Unfourtunatelly the result is Nill.

I have looked at the exif of the images that I know have faces and there is nothing that would indicate that
data regarding faces has been addedto the exifdata.
Comparing this exif with one of a image without faces seemsequal..

So I do not know if this data is placed some other place or Casio only uses the face boxes to
focus the image but does not add the exif data.

I could send you a few files if yo want.

Thanks

Emilio

www.evilfoto.eu
*************

Phil Harvey

  • ExifTool Author
  • Administrator
  • ExifTool Freak
  • *****
  • Posts: 6519
    • ExifTool Home Page
Re: Face detection
« Reply #6 on: March 07, 2011, 12:14:20 PM »
Hi Emilio,

But looking at the AF Point shows this.
AF Point                        : Face Detect

How can I get this AF Point ?

I think this is what happens if face detection is on but the camera doesn't detect any faces (which can happen even if there are faces in the image).

Quote
So I do not know if this data is placed some other place or Casio only uses the face boxes to
focus the image but does not add the exif data.

I could send you a few files if yo want.

Yes, the Casio faces are not yet decoded.  I have some samples but need more to be able to decode this (if it exists).  If you could send samples it would be great (send them to phil at owl.phy.queensu.ca).  Samples with different numbers and multiple faces would be best.  Also, some with the camera rotated.

Thanks

- Phil

evilaro

  • Sr. Member
  • ****
  • Posts: 114
    • EvilFOTO
Re: Face detection
« Reply #7 on: March 16, 2011, 11:40:45 AM »
Phil:

I have visited some friends that had
2 cameras with face detection... (not activated.. of course)

Image Description               : OLYMPUS DIGITAL CAMERA
Make                                : OLYMPUS IMAGING CORP.
Camera Model Name            : E-P2

and

Make                                  : Panasonic
Camera Model Name              : DMC-GH1



After activating the face mode detection we took a few pictures.

I run
         exiftool.exe -r -FacesDetected -AFAreaMode "&DIR"  > resultado.csv

and did not find anythig

I looked into the EXIF... and in all cases there was a FACE wording... so Exif has the
information but -FacesDetected -AFAreaMode   does not find it.

I understand that this camera would requiere ANOTHER parameter... but this is getting complicated (I should not tell you this.. you know it already)
if you have to have a special parameter for each cámera...


So I have done another aproach... LIST all the EXif and search for the Word FACE, it takes longer
but it seems FACE is the word used, and is not used in any other context...
So the faces are found


I can send you if you want the files if you want

Any other suggestion?

Emilio




www.evilfoto.eu
*************

Phil Harvey

  • ExifTool Author
  • Administrator
  • ExifTool Freak
  • *****
  • Posts: 6519
    • ExifTool Home Page
Re: Face detection
« Reply #8 on: March 16, 2011, 01:23:36 PM »
Hi Emilio,

Please send me the files and I'll take a look.  It sounds like my script may not work for these models.

- Phil

Phil Harvey

  • ExifTool Author
  • Administrator
  • ExifTool Freak
  • *****
  • Posts: 6519
    • ExifTool Home Page
Re: Face detection
« Reply #9 on: March 16, 2011, 02:18:41 PM »
Hi Emilio,

I got the samples, thanks.

Perhaps you are using an old version of ExifTool (before 8.50), because the current version returns FacesDetected, and my script works just fine for all of the samples you sent.

- Phil

evilaro

  • Sr. Member
  • ****
  • Posts: 114
    • EvilFOTO
Re: Face detection
« Reply #10 on: March 16, 2011, 04:41:53 PM »
Phil:

Yes.... Sorry, since It was working with my Canon Camara I did not think
it was a Exiftool version problem.

Now its working

Thanks

Emilio


Hi Emilio,

I got the samples, thanks.

Perhaps you are using an old version of ExifTool (before 8.50), because the current version returns FacesDetected, and my script works just fine for all of the samples you sent.

- Phil
www.evilfoto.eu
*************