Cv
view release on metacpan or search on metacpan
sample/facedetect.pl view on Meta::CPAN
#!/usr/bin/perl
# -*- mode: perl; coding: utf-8; tab-width: 4; -*-
use strict;
use warnings;
use lib qw(blib/lib blib/arch);
use Cv;
use File::Basename;
my $haarDir = "/usr/local/share/OpenCV/haarcascades";
sub help {
die << "----";
This program demonstrates the haar cascade recognizer this classifier
can recognize many ~rigid objects, it\'s most known use is for faces.
Usage:
\$ .\/facedetect
[--cascade=<cascade_path>]
this is the primary trained classifier such as frontal face
[--nested-cascade[=<nested_cascade_path>]]
this an optional secondary classifier such as eyes
[--scale=<image scale greater or equal to 1, try 1.3 for example>]
[filename|camera_index]
see facedetect.cmd for one call:
\$ .\/facedetect
--cascade=$haarDir/haarcascade_frontalface_alt.xml
--nested-cascade=$haarDir/haarcascade_eye.xml
--scale=1.3
Hit any key to quit.
----
;
}
my $cascadeName = "$haarDir/haarcascade_frontalface_alt.xml";
my $nestedCascadeName = "$haarDir/haarcascade_eye_tree_eyeglasses.xml";
my $scale = 1;
use Getopt::Long;
unless (GetOptions(
"--cascade=s" => \$cascadeName,
"--nested-cascade=s" => \$nestedCascadeName,
"--scale=s" => \$scale,
)) {
help();
}
my $inputName = shift(@ARGV);
my $cascade = Cv->Load($cascadeName);
unless ($cascade) {
die "ERROR: Could not load classifier cascade";
}
my $nestedCascade = Cv->Load($nestedCascadeName);
unless ($nestedCascade) {
warn "WARNING: Could not load classifier cascade for nested objects\n";
}
my $capture;
my $image;
if (defined $inputName && $inputName =~ /^\d$/) {
$capture = Cv->captureFromCAM($inputName);
unless ($capture) {
warn "Capture from CAM $inputName didn't work\n";
}
} elsif ($inputName) {
$image = Cv->loadImage($inputName);
unless ($image) {
$capture = Cv->captureFromFile($inputName);
unless ($capture) {
warn "Capture from AVI $inputName didn't work\n";
}
}
}
( run in 0.609 second using v1.01-cache-2.11-cpan-5735350b133 )