Documentos de Académico
Documentos de Profesional
Documentos de Cultura
Deteccion de Objetos Mediante HaarFeatures Basados en Clasificadores en Cascada
Deteccion de Objetos Mediante HaarFeatures Basados en Clasificadores en Cascada
Tabla de contenido
Tabla de contenido.............................................................................................. 2 Introduccin........................................................................................................ 3 Instalar OpenCV-2.3.1 en un ambiente indo!s " indo!s #$............................%
&eali'ar pruebas con clasificadores Haar............................................................( )ntrenar * usar clasificadores Haar..................................................................10 )+perimentos de ,etecciones...........................................................................1% -alsos positi.os "/o caras clasificadas como caras.- 02.10 1$.........................1# -alsos ne2ati.os "Caras clasificadas como no caras.- 2.33 1$.........................1( Conclusiones..................................................................................................... 14 &eferencias ...................................................................................................... 20 5ne+o 5 ............................................................................................................ 21 5ne+o 6............................................................................................................. 23
20
Introduccin
Caractersticas aar basadas en una cascada de clasi!icadores.
)ste m7todo para la deteccin de ob8etos fue propuesto por 9aul Viola * me8orado por &ainer :ien;art. <n clasificador "es decir= una cascada de clasificadores es impulsado a traba8ar con caractersticas ;aar-li>e$ se entrena con cientos de im?2enes @ue contienen el determinado ob8eto "por e8emplo= una cara o un coc;e$= llamados e8emplos positi.os= @ue se adaptan al mismo tamaAo "por e8emplo 20 + 20 pi+eles$= * e8emplos ne2ati.os= im?2enes arbitrarias del mismo tamaAo. ,espu7s de @ue un clasificador se entrena= se puede aplicar a una determinada re2in de inter7s "del mismo tamaAo @ue se ;a utili'ado durante el entrenamiento$ en una ima2en de entrada. )l clasificador 2enera un B1C si la re2in es probable @ue conten2a muestre el ob8eto "es decir la cara el coc;e$= * B0C en caso contrario. 9ara buscar el ob8eto en toda la ima2en se puede mo.er la .entana de bDs@ueda a tra.7s de la ima2en * comprobar todas la localidades con el clasificador. )l clasificador est? diseAado para @ue pueda ser modificado de tamaAo f?cilmente con el fin de ser capa' de encontrar el ob8eto de inter7s en diferentes tamaAos= @ue es m?s eficiente @ue cambiar el tamaAo de la ima2en en s. 9or lo tanto para encontrar un ob8eto de un tamaAo desconocido en la ima2en el procedimiento de barrido debe ;acerse .arias .eces a diferentes escalas. :a palabra BcascadaC en el nombre del clasificador si2nifica @ue el clasificador resultante se compone de .arios clasificadores simples "etapas$ @ue se aplican posteriormente a una re2in de inter7s ;asta @ue en al2Dn momento el candidato es rec;a'ado o ;a aprobado todas las todas las etapas. :a palabra BimpulsoC si2nifica @ue los clasificadores en cada etapa de la cascada son comple8os ellos mismo * se constru*en a partir de los clasificadores b?sicos utili'ando una de las cuatro t7cnicas diferentes de BboostC. 5ctualmente 5da6oost ,iscreto= 5da6oost &eal= 5da6oost Eua.e= 5da6oost :o2ico son los soportados. :os clasificadores b?sicos son ?rboles de decisin= clasificadores con 2 ;o8as. :as caractersticas Haar-:i>e son las entradas de los clasificadores b?sicos= * se calculan como se describe a continuacin. )l al2oritmo actual utili'a los si2uientes caractersticas Haar-:i>eF
20
:as caractersticas a utili'ar en un clasificador se especifican por su forma "1a= 2a= etc.$= la posicin dentro de la re2in de inter7s * de la escala "esta escala no es la misma @ue la escala utili'ada en la etapa de deteccin= aun@ue estas dos escalas son multiplicado$. 9or e8emplo= en el caso de la caracterstica lineal "2c$ la respuesta se calcula como la diferencia entre la suma de los pi+eles de la ima2en en rect?n2ulo @ue abarcan la funcin de con8unto "las dos fran8as blancas * la fran8a de ne2ro del centro$ * la suma de los pi+eles de la ima2en en la fran8a de ne2ro= multiplicado por 3 en el fin de compensar las diferencias en el tamaAo de la ?reas. :a suma de los .alores de los pi+eles en una re2in rectan2ular se calcula r?pidamente usando las im?2enes inte2rales.
20
indo!s
1.- ,escar2ar el arc;i.o "#enC$%2.&.1%'in%su#er#ack de la si2uiente direccinF ;ttpFGGsourcefor2e.netGpro8ectsGopenc.librar*GfilesGopenc.-!inG2.3.1G 2. ,espu7s de ;aber descar2ado el arc;i.o "#enC$%2.&.1%'in%su#er#ack lo e8ecutamos= seleccionamos la unidad C * presionamos el botn )+tract como se muestra en la si2uiente ima2en.
3.- 5;ora descar2amos la librera e+tra tbb&0(20110)2*oss de la si2uiente direccinF ;ttpFGGt;readin2buildin2bloc>s.or2G.er.p;pHfidI1#1 Eeleccionamos la librera correspondiente a tbb&0(20110)2*oss('in.+i# indo!sJ
,espu7s de ;aber descar2ado la librera= la descomprimimos en la si2uiente rutaF C:\opencv\build\common 3.- 5;ora .amos a las propiedades del e@uipo - confi2uracin a.an'ada del sistema= debe poder .isuali'ar una pantalla similar a la si2uiente ima2en.
20
0.- 9resionamos el botn Variables de entorno * editamos la .ariable del sistema ,AT a la cual le aAadimos las si2uientes rutasF
C:\opencv\build\x86\vc10\bin;C:\opencv\build\common\tbb30_20110427oss\bin\i 32\vc10
20
20
- si p"e&ie"e puede desc "% " un .it con est s cl ses con l lib"e"/ neces "i s p " empe# " t" b 0 " de l si%uiente di"ecci'n: http://www.iem.pw.edu.pl/~domanskj/haarkit.rar1 p " este p"o2ecto desc "% mos el 3it1 poste"io"mente lo descomp"imimos en l c "pet $ " en el disco C,
2.- ,escomprimimos el arc;i.o tools.rar= ;asta a;ora debemos tener los si2uientes arc;i.osF Cascade2+ml Temp TestKreco2nition Haar>it.rar HaarTrainin2.bat &)5,KTHIEK-I&ET.t+t EamplesKcreation.bat Tools.rar
3,4 !o" $o" solo nos inte"es l c "pet Test_recognition= na.e2amos dentro de ella *
debemos .isuali'ar los si2uientes arc;i.osF c.04#.dll c+core04#.dll dane.+ml facedetect.e+e ;i2;2ui04#.dll start.bat
9ara reali'ar las pruebas ;aremos uso del comando !acedetect.e-e= para m?s detalle de este comando podemos editar el arc;i.o start.bat. 0.- Eeleccionamos im?2enes @ue conten2an rostros= a;ora copiamos dic;as im?2enes en la carpeta Test(recognition. %. )ntramos a la lnea de comandos "ms-dos$= * na.e2amos ;asta la direccin de la carpeta Test(recognition= tecleamos lo si2uienteF
20
50emplo de detecci'n:
6,4 7i 8ue"emos "e li# " ot" s p"ueb s1 po" e0emplo detecci'n de o0os podemos $ ce" uso de cl si&ic do"es p"opo"cion dos po" l lib"e"/ OpenCV- .!."; p " ello nos di"i%imos l si%uiente di"ecci'n C:\opencv\data\haarcascades si usted descomp"imi' -penC)42,3,1 en l unid d C, 5n dic$ di"ecci'n podemos encont" " dive"sos cl si&ic do"es,
20
aar
1. Colecciones de im;%enes positiv s 2 ne% tiv s p " el ent"en miento, 3. C"e " el "c$ivo vector.vec us ndo createsamples.cpp 0. 5nt"en " el cl si&ic do" us ndo haartrainin#.cpp %. Co""e" el cl si&ic do" us ndo l &unci'n cvHaarDetectObjects$%,
=od s est s cl ses se encuent" n en l si%uiente "ut : C:\opencv\modules\$ "t" inin% si usted descomp"imi' l lib"e"/ en l unid d C con excepci'n de l cl se objectmarker.cpp ()e" *nexo >+, - si p"e&ie"e puede desc "% " un .it con tod s est s cl ses 2 p"ep " d s p " empe# " t" b 0 " de l si%uiente di"ecci'n: http://www.iem.pw.edu.pl/~domanskj/haarkit.rar1 p " este p"o2ecto desc "% mos el 3it1 poste"io"mente lo descomp"imimos en l c "pet haar el disco C, < "c " l s im;%enes positiv s us ndo objectmarker.cpp
2.- ,escomprimimos el arc;i.o tools.rar= ;asta a;ora debemos tener los si2uientes arc;i.osF Cascade2+ml Temp TestKreco2nition Haar>it.rar HaarTrainin2.bat &)5,KTHIEK-I&ET.t+t EamplesKcreation.bat Tools.rar
3.- )n la carpeta B..MtempMne2ati.eC 2uardamos las im?2enes @ue no conten2an el Bob8etoC @ue deseamos sea reconocido. Creamos la lista de im?2enes para posteriormente 2uardarlo en el arc;i.o in!o!ile.t-t )l arc;i.o in!o!ile.t-t debe contener lneas comoF o ima2e2314.6N9 o ima2e2320.6N9 9odemos usar el arc;i.o create(list.bat para crear la lista de im?2enes.
0.- )n la carpeta B..MtempMpositi.esMra!dataC 2uardamos las im?2enes @ue contienen el ob8eto deseado.
20
<samos la ;erramienta ..MtempMpositi.eMob0ect1arker.e-e= esta ;erramienta nos permite especificar las coordenadas += *= el anc;o * alto del ob8eto determinado dentro de la ima2enJ a su .e' crea un arc;i.o in!o.t-t el cual especifica la informacin antes mencionada de la ima2en. /otaF :a ;erramienta ob0ect1arker.e-e solo traba8a con im?2enes bmp. %.- 9ara el entrenamiento usaremos la ;erramienta createsa1#les.e-e <tili'amos el si2uiente comandoF Bcreatesa1#les.e-e -info positi.eGinfo.t+t -.ec dataG.ector..ec -num 103 -! 20 -; 20C )l cual creara un arc;i.o vector.vec en la carpeta MtempMdata. :os par?metros sonF num 1(00 nDmero de im?2enes positi.as. ! 20 L; 20 )8emplo de tamaAo.
3.- ,espu7s de crear el arc;i.o vector.vec podemos iniciar con el entrenamiento= e8ecutamos el si2uiente comandoF B2aartraining.e-e -data dataGcascade -.ec dataG.ector..ec -b2 ne2ati.eGinfofile.t+t -npos 103 -nne2 3% -nsta2es 20 -mem 1000 -mode 5:: -! 20 -; 20 Lnons*mC :os par?metros sonF data dataGcascade &uta de los arc;i.os de cascada. Cada etapa completada creara un arc;i.o en MtempMdataMcascadeM0../M5da6oostC5&THaarClassifier.t+t .ec dataG.ector..ec createsamples.e+e b2 ne2ati.eGinfofile.t+t MtempMne2ati.eM npos 103 nne2 3% nsta2es 20 mem 1000 pro2rama 5rc;i.o @ue se creo con :ista de las im?2enes ne2ati.as /Dmero de im?2enes positi.as /Dmero de im?2enes ne2ati.as /Dmero de etapas para completar Cantidad de memoria disponible asi2nada al
20
Vea la literatura para m?s detalles de este )8emplo de tamaAo )ste par?metro no es necesario si el ob8eto es
9odemos usar el arc;i.o 2aarTraining.bat. 5l correr el comando 2aartraining.e-e obtenemos una salida similar a la si2uienteF KKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKK 9arent nodeF 1# OOO 1 cluster OOO 9OEF 13%3 1#44 0.420%11 /)PF 2010 1.4#2(4e-00% 65CQP&O</, 9&OC)EEI/P TIN)F 12#4.34 9recalculation timeF 33.20 R----R----R-R---------R---------R---------R---------R S / S1EN9S-S ET.TH& S H& S -5 S )T9. )&&S R----R----R-R---------R---------R---------R---------R S 1S1001S-S-0.312%40S 1.000000S 1.000000S 0.2%32#2S R----R----R-R---------R---------R---------R---------R S 2S1001S-S-0.%3#003S 1.000000S 1.000000S 0.24033(S R----R----R-R---------R---------R---------R---------R S 3S1001S-S-0.##30(4S 1.000000S 1.000000S 0.23(0#2S R----R----R-R---------R---------R---------R---------R S 0S1001S-S-1.01%23#S 1.000000S 1.000000S 0.230(#4S R----R----R-R---------R---------R---------R---------R S %S 431S-S-1.120303S 0.4434(1S 0.434#10S 0.2022%3S R----R----R-R---------R---------R---------R---------R S 3S (01S-S-1.0#1341S 0.4434(1S 0.4%3032S 0.21((((S R----R----R-R---------R---------R---------R---------R S #S (21S-S-1.1(#230S 0.4434(1S 0.4044%4S 0.230434S R----R----R-R---------R---------R---------R---------R S (S (31S-S-1.204344S 0.44%##3S 0.(4#%10S 0.2133#%S R----R----R-R---------R---------R---------R---------R S 4S (31S-S-1.1(#14%S 0.44%134S 0.(0(%0(S 0.143#%0S R----R----R-R---------R---------R---------R---------R S 10S (11S-S-1.332130S 0.44%134S 0.((004(S 0.1#(032S R----R----R-R---------R---------R---------R---------R S 11S (31S-S-1.%24%((S 0.44%##3S 0.((132(S 0.140113S R----R----R-R---------R---------R---------R---------R S 12S (11S-S-1.%24243S 0.44%134S 0.(%4#%1S 0.1#(%%0S R----R----R-R---------R---------R---------R---------R S 13S (01S-S-1.0#1133S 0.44%134S 0.(20332S 0.13%#3%S
20
R----R----R-R---------R---------R---------R---------R S 10S (01S-S-1.034(%#S 0.44%134S 0.#4#04%S 0.1%#(4%S R----R----R-R---------R---------R---------R---------R S 1%S #41S-S-1.333(3(S 0.44%134S 0.#%%302S 0.1042(#S R----R----R-R---------R---------R---------R---------R S 13S ##1S-S-1.3%#24#S 0.44%134S 0.#24003S 0.10(303S R----R----R-R---------R---------R---------R---------R S 1#S ##1S-S-1.3%0420S 0.44%134S 0.34(#%%S 0.102(42S R----R----R-R---------R---------R---------R---------R S 1(S ##1S-S-1.2(3(#3S 0.44%134S 0.3%#231S 0.1001(#S R----R----R-R---------R---------R---------R---------R S 14S #31S-S-1.300#43S 0.44%134S 0.3034(3S 0.13#233S R----R----R-R---------R---------R---------R---------R S 20S #%1S-S-1.2%(#24S 0.44%134S 0.30#0%0S 0.13%022S R----R----R-R---------R---------R---------R---------R S 21S #%1S-S-1.2%4003S 0.44%134S 0.%40303S 0.12000#S R----R----R-R---------R---------R---------R---------R S 22S #%1S-S-1.20#343S 0.44%134S 0.%#(00(S 0.121204S R----R----R-R---------R---------R---------R---------R S 23S #01S-S-1.1(4301S 0.44%134S 0.%34014S 0.11(#40S R----R----R-R---------R---------R---------R---------R S 20S #01S-S-1.2#(121S 0.44%134S 0.%0#303S 0.113(22S R----R----R-R---------R---------R---------R---------R S 2%S #31S-S-1.1401(#S 0.44%134S 0.%03#30S 0.11%30#S R----R----R-R---------R---------R---------R---------R S 23S #31S-S-1.2130%2S 0.44%134S 0.0(0232S 0.1101(2S R----R----R-R---------R---------R---------R---------R Eta2e trainin2 timeF ##((.0% U/umber of used featuresF 23 9arent nodeF 1# C;osen number of splitsF 0 Total number of splitsF 0 Tree Classifier Eta2e R---R---R---R---R---R---R---R---R---R---R---R---R---R---R---R---R---R---R---R S 0S 1S 2S 3S 0S %S 3S #S (S 4S 10S 11S 12S 13S 10S 1%S 13S 1#S 1(S R---R---R---R---R---R---R---R---R---R---R---R---R---R---R---R---R---R---R---R 0---1---2---3---0---%---3---#---(---4--10--11--12--13--10--1%--13--1#--1( KKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKK 9odemos se2uir despu7s de la finali'acin de las todas la etapas o parar despu7s del .alor de la falsa alarma @ue es VI1O10e-%. 9or e8emploF 9arent nodeF 1#
20
OOO 1 cluster OOO 9OEF 13%3 1#44 0.420%11 /)PF 2010 1.4#2(4e-00% esto es una falsa alarma.
#.- 5;ora copiamos todas los carpetas @ue se encuentran MtempMdataMcascade estas carpetas est?n nombradas de B0C a B/C "/ es el nDmero de etapas completadas$. )n cada una de estas carpetas debe de ;aber un arc;i.o Ada3oostCA4T aarClassi!ier.t-t. Copiamos todas estas de 0 a / carpetas a ..Mcascade2+mlMdata catalo2ue. (.- 5;ora con.ertiremos los arc;i.os de cascada a un arc;i.o +ml= para eso usaremos la ;erramienta Mcascade2+mlM2aarconv.e-e )l comando a e8ecutar es el si2uienteF B2aarconv.e-e data output.+ml 20 20C :os par?metros sonF data output.+ml 20 20 /ombre del arc;i.o +ml @ue se 2enerara. )8emplo de tamaAo.
4.- &eali'ar la prueba de reconocimiento= copiamos el arc;i.o out#ut.-1l a la carpeta MtestKreco2nition <saremos el si2uiente comandoF !acedetect.e-e --cascadeIUoutput.+mlU ima2en.8p2 10.- :a base de datos de im?2enes utili'ada cuenta con 103 im?2enes= 10( positi.as * 3% ne2ati.asJ las im?2enes fueron tomadas de 14 mu8eres * 1 ;ombre del Instituto de )ducacin Comercial 6ancario. 5 continuacin e8emplos de im?2enes positi.asF
20
.-#eri1entos de Detecciones
9ara la e+perimentacin se utili'aron 3( im?2enes de % mu8eres * 3 ;ombres de los cuales se tomaron entre % * 0 fotos por persona. $erdaderos #ositivos 5Caras clasi!icadas co1o caras.% 55.26 78
20
20
20
20
Conclusiones
:as caractersticas Haar pro.een una representacin simple * eficiente de la ima2en para reali'ar deteccin= reconocimiento= clasificacin= etc. ,e i2ual manera re@uieren normali'acin para ser robustas. :a ima2en inte2ral es Dtil para calcular r?pidamente las sumas de las re2iones utili'adas en las caractersticas Haar. :os altos porcenta8es de deteccin * ba8os tiempos de procesamiento demuestran la efecti.idad de la combinacin de t7cnicas de boostin2 con filtros de base Haar= para la deteccin de los o8os * caractersticas faciales * dan la posibilidad de lle.ar el sistema a una aplicacin en tiempo real. 9ara obtener un me8or desempeAo de deteccin se recomienda una base de datos con miles im?2enes positi.as * ne2ati.as.
20
4e!erencias
;eb ;ttpFGGopenc..itsee'.comGmodulesGob8detectGdocGcascadeKclassification.;tmlWid 2 ;ttpFGGc2i.cse.uns!.edu.auGXcs0011G!i>iGinde+.p;pH titleIOpenCVKPuideWHaarKClassifier ;ttpFGGnote.sonots.comGEciEoft!areG;aartrainin2.;tmlW.3f0##ba ;ttpFGGcode.2oo2le.comGpGima2eclipperG ;ttpFGG!!!.c.papers.comGdatasets.;tml 3ibliogr<!icas TtuloF :earnin2 OpenCV computer .ision !it; t;e OpenCV librar*. )ditorialF OY&)I::Z. 5utoresF Par* 6rads>i * 5drian Qae;ler. 9?2inasF %03- %1%.
20
Ane-o A
Winclude Uc..;U Winclude U;i2;2ui.;U Winclude Winclude Winclude Winclude Winclude Winclude Winclude Winclude Winclude [stdio.;V [stdlib.;V [strin2.;V [assert.;V [mat;.;V [float.;V [limits.;V [time.;V [ct*pe.;V
Wifdef K)iC Wdefine I/32 Wendif static C.NemEtora2eO stora2e I 0J static C.HaarClassifierCascadeO cascade I 0J .oid detectKandKdra!" IplIma2eO im2= double scaleKfactor= int minKnei2;bors= int fla2s= C.Ei'e minKsi'e $J const c;arO cascadeKname I U;aarcascadeKfrontalfaceKalt.+mlUJ GO U;aarcascadeKprofileface.+mlUJOG int main" int ar2c= c;arOO ar2. $ \ C.CaptureO capture I 0J IplIma2e Oframe= OframeKcop* I 0J int optlen I strlen"U--cascadeIU$J const c;arO inputKname I U0UJ int iJ double scaleKfactor I 1.1J int minKnei2;bors I 1J int fla2s I 0JGOCVKH55&K,OKC5//ZK9&</I/POG C.Ei'e minKsi'e I c.Ei'e"0=0$J if" ar2c II 1 $ \ fprintf" stderr= U)&&O&F Could not load classifier cascadeMnU $J fprintf" stderr= U<sa2eF facedetect U U--cascadeIMU[cascadeK+mlKpat;VMU or -c [cascadeK+mlKpat;VMnU U ] -sf [ scaleKfactor I 1f V ^MnU U ] -mn [ minKnei2;bors I 1d V ^MnU
20
U ] -fl [ fla2s I 1d V ^MnU U ] -ms [ minKsi'e I 1d 1d V ^MnU U ] filename S cameraKinde+ I 1s ^MnU= scaleKfactor= minKnei2;bors= fla2s= minKsi'e.!idt;= minKsi'e.;ei2;t= inputKname $J fprintf" stderr= UEee alsoF c.Haar,etectOb8ects"$ about option parameters.MnU $J return -1J _ for" i I 1J i [ ar2cJ iRR $ \ if" `strncmp" ar2.]i^= U--cascadeIU= optlen $ $ \ cascadeKname I ar2.]RRi^ R optlenJ _ else if" `strcmp" ar2.]i^= U-cU $ $ \ cascadeKname I ar2.]RRi^J _ else if" `strcmp" ar2.]i^= U-sfU $ $ \ scaleKfactor I "float$ atof" ar2.]RRi^ $J _ else if" `strcmp" ar2.]i^= U-mnU $ $ \ minKnei2;bors I atoi" ar2.]RRi^ $J _ else if" `strcmp" ar2.]i^= U-flU $ $ \ fla2s I CVKH55&K,OKC5//ZK9&</I/PJ _ else if" `strcmp" ar2.]i^= U-msU $ $ \ minKsi'e I c.Ei'e" atoi" ar2.]RRi^ $= atoi" ar2.]RRi^ $ $J _ else \ inputKname I ar2.]i^J _ _ cascade I "C.HaarClassifierCascadeO$c.:oad" cascadeKname= 0= 0= 0 $J stora2e I c.CreateNemEtora2e"0$J if" `inputKname SS "isdi2it"inputKname]0^$ aa inputKname]1^ II bM0b$ $ capture I c.Capture-romC5N" `inputKname H 0 F inputKname]0^ - b0b $J else capture I c.Capture-rom5VI" inputKname $J
20
c./amed indo!" UresultU= 1 $J if" capture $ \ for"JJ$ \ if" `c.Prab-rame" capture $$ brea>J frame I c.&etrie.e-rame" capture $J if" `frame $ brea>J if" `frameKcop* $ frameKcop* I c.CreateIma2e" c.Ei'e"frame-V!idt;=frame-V;ei2;t$= I9:K,)9THK(<= frame-VnC;annels $J if" frame-Vori2in II I9:KO&IPI/KT: $ c.Cop*" frame= frameKcop*= 0 $J else c.-lip" frame= frameKcop*= 0 $J detectKandKdra!" frameKcop*= scaleKfactor= minKnei2;bors= fla2s= minKsi'e $J if" c. aitQe*" 10 $ VI 0 $ brea>J _ c.&eleaseIma2e" aframeKcop* $J c.&eleaseCapture" acapture $J _ else \ const c;arO filename I inputKname H inputKname F "c;arO$Ulena.8p2UJ IplIma2eO ima2e I c.:oadIma2e" filename= 1 $J if" ima2e $ \ detectKandKdra!" ima2e= scaleKfactor= minKnei2;bors= fla2s= minKsi'e $J c. aitQe*"0$J c.&eleaseIma2e" aima2e $J _ else \ GO assume it is a te+t file containin2 t;e list of t;e ima2e filenames to be processed - one per line OG -I:)O f I fopen" filename= UrtU $J if" f $ \ c;ar buf]1000R1^J !;ile" f2ets" buf= 1000= f $ $ \
20
int len I "int$strlen"buf$J !;ile" len V 0 aa isspace"buf]len-1^$ $ len--J buf]len^ I bM0bJ ima2e I c.:oadIma2e" buf= 1 $J if" ima2e $ \ detectKandKdra!" ima2e= scaleKfactor= minKnei2;bors= fla2s= minKsi'e $J c. aitQe*"0$J c.&eleaseIma2e" aima2e $J _ _ fclose"f$J _ _ _ c.,estro* indo!"UresultU$J return 0J _ .oid detectKandKdra!" IplIma2eO im2= double scaleKfactor= int minKnei2;bors= int fla2s= C.Ei'e minKsi'e $ \ static C.Ecalar colors]^ I \ \\0=0=2%%__= \\0=12(=2%%__= \\0=2%%=2%%__= \\0=2%%=0__= \\2%%=12(=0__= \\2%%=2%%=0__= \\2%%=0=0__= \\2%%=0=2%%__ _J double scale I 1.3J IplIma2eO 2ra* I c.CreateIma2e" c.Ei'e"im2-V!idt;=im2-V;ei2;t$= (= 1 $J IplIma2eO smallKim2 I c.CreateIma2e" c.Ei'e" c.&ound "im2-V!idt;Gscale$= c.&ound "im2-V;ei2;tGscale$$= (= 1 $J int iJ c.C.tColor" im2= 2ra*= CVK6P&2P&5Z $J c.&esi'e" 2ra*= smallKim2= CVKI/T)&K:I/)5& $J c.)@uali'eHist" smallKim2= smallKim2 $J c.ClearNemEtora2e" stora2e $J
20
if" cascade $ \ double t I "double$c.PetTic>Count"$J C.Ee@O faces I c.Haar,etectOb8ects" smallKim2= cascade= stora2e= scaleKfactor= minKnei2;bors= fla2s= minKsi'e $J GG1.1= 2= 0GOCVKH55&K,OKC5//ZK9&</I/POG= c.Ei'e"30= 30$ $J t I "double$c.PetTic>Count"$ - tJ printf" Udetection time I 12msMnU= tG ""double$c.PetTic>-re@uenc*"$O1000.$ $J for" i I 0J i [ "faces H faces-Vtotal F 0$J iRR $ \ C.&ectO r I "C.&ectO$c.PetEe@)lem" faces= i $J C.9oint centerJ int radiusJ center.+ I c.&ound""r-V+ R r-V!idt;O0.%$Oscale$J center.* I c.&ound""r-V* R r-V;ei2;tO0.%$Oscale$J radius I c.&ound""r-V!idt; R r-V;ei2;t$O0.2%Oscale$J c.Circle" im2= center= radius= colors]i1(^= 3= (= 0 $J _ _ c.E;o!Ima2e" UresultU= im2 $J c.&eleaseIma2e" a2ra* $J c.&eleaseIma2e" asmallKim2 $J _
20
Ane-o 3
Winclude [openc.Gc..;V Winclude [openc.Gc.au+.;V Winclude [openc.G;i2;2ui.;V GG for filelistin2 Winclude [stdio.;V Winclude [io.;V GG for fileoutput Winclude [strin2V Winclude [fstreamV Winclude [sstreamV Winclude [dirent.;V Winclude [s*sGt*pes.;V usin2 namespace stdJ IplIma2eO ima2eI0J IplIma2eO ima2e2I0J GGint startKroiI0J int roiK+0I0J int roiK*0I0J int roiK+1I0J int roiK*1I0J int numOf&ecI0J int start,ra! I 0J c;arO !indo!KnameIU[E95C)Vadd [)/T)&Vsa.e and load ne+t [)ECVe+itUJ strin2 IntToEtrin2"int num$ \ ostrin2stream m*EtreamJ GGcreates an ostrin2stream ob8ect m*Etream [[ num [[ flus;J GO O outputs t;e number into t;e strin2 stream and t;en flus;es O t;e buffer "ma>es sure t;e output is put into t;e stream$ OG return"m*Etream.str"$$J GGreturns t;e strin2 form of t;e strin2stream ob8ect _J .oid onKmouse"int e.ent=int +=int *=int fla2= .oid Oparam$ \ if"e.entIICVK)V)/TK:6<TTO/,O /$ \ if"`start,ra!$ \ roiK+0I+J
20
roiK*0I*J start,ra! I 1J _ else \ roiK+1I+J roiK*1I*J start,ra! I 0J _ _ if"e.entIICVK)V)/TKNO<E)NOV) aa start,ra!$ \ GGredra! &OI selection ima2e2Ic.CloneIma2e"ima2e$J c.&ectan2le"ima2e2=c.9oint"roiK+0=roiK*0$=c.9oint"+=*$=CVK&P6"2%%=0=2%%$=1$J c.E;o!Ima2e"!indo!Kname=ima2e2$J c.&eleaseIma2e"aima2e2$J _ _ int main"int ar2c= c;arOO ar2.$ \ int iQe*I0J strin2 str9refi+J strin2 str9ostfi+J strin2 inputKdirector*J strin2 outputKfileJ if"ar2c `I 3$ \ fprintf"stderr= U1s outputKinfo.t+t ra!GdataGdirector*GMnU= ar2.]0^$J return -1J _ inputKdirector* I ar2.]2^J outputKfile I ar2.]1^J GO Pet a file listin2 of all files !it; in t;e input director* OG ,I& OdirKp I opendir "inputKdirector*.cKstr"$$J struct dirent OdirKentr*KpJ if"dirKp II /<::$ \ fprintf"stderr= U-ailed to open director* 1sMnU= inputKdirector*.cKstr"$$J return -1J _ fprintf"stderr= UOb8ect Nar>erF Input ,irector*F 1s Output -ileF 1sMnU= inputKdirector*.cKstr"$= outputKfile.cKstr"$$J
20
GG init ;i2;2ui c.5ddEearc;9at;"inputKdirector*$J c./amed indo!"!indo!Kname=1$J c.EetNouseCallbac>"!indo!Kname=onKmouse= /<::$J fprintf"stderr= UOpenin2 director*...U$J GG init output of rectan2les to t;e info file ofstream output"outputKfile.cKstr"$$J fprintf"stderr= Udone.MnU$J !;ile""dirKentr*Kp I readdir"dirKp$$ `I /<::$ \ numOf&ecI0J if"strcmp"dirKentr*Kp-VdKname= UU$$ fprintf"stderr= U)+aminin2 file 1sMnU= dirKentr*Kp-VdKname$J GO TO,OF 5ssi2n postfi+Gprefi+ info OG str9ostfi+IUUJ str9refi+IinputKdirector*J str9refi+RIdirKentr*Kp-VdKnameJ GGstr9refi+RIbmpKfile.nameJ fprintf"stderr= U:oadin2 ima2e 1sMnU= str9refi+.cKstr"$$J if""ima2eIc.:oadIma2e"str9refi+.cKstr"$=1$$ `I 0$ \ GG do \ !or> on current ima2e c.E;o!Ima2e"!indo!Kname=ima2e$J GG used c. aitQe* returnsF GG [)nterVI13 sa.e added rectan2les and s;o! ne+t ima2e GG [)ECVI2# e+it pro2ram GG [EpaceVI32 add rectan2le to current ima2e GG an* ot;er >e* clears rectan2le dra!in2 onl* iQe*Ic. aitQe*"0$J s!itc;"iQe*$ \ case 2#F c.&eleaseIma2e"aima2e$J c.,estro* indo!"!indo!Kname$J return 0J case 32F numOf&ecRRJ
20
printf"U 1d. rect +I1dMt*I1dMt+2;I1dMt*2I 1dMnU=numOf&ec=roiK+0=roiK*0=roiK+1=roiK*1$J GGprintf"U 1d. rect +I1dMt*I1dMt!idt;I1dMt;ei2;tI 1dMnU=numOf&ec=roiK+1=roiK*1=roiK+0-roiK+1=roiK*0-roiK*1$J GG currentl* t!o dra! directions possibleF GG from top left to bottom ri2;t or .ice .ersa if"roiK+0[roiK+1 aa roiK*0[roiK*1$ \ printf"U 1d. rect +I1dMt*I 1dMt!idt;I1dMt;ei2;tI1dMnU=numOf&ec=roiK+0=roiK*0=roiK+1-roiK+0=roiK*1roiK*0$J GG append rectan2le coord to pre.ious line content str9ostfi+RIU URIntToEtrin2"roiK+0$RU URIntToEtrin2"roiK*0$RU URIntToEtrin2"roiK+1-roiK+0$RU URIntToEtrin2"roiK*1-roiK*0$J _ if"roiK+0VroiK+1 aa roiK*0VroiK*1$ \ printf"U 1d. rect +I1dMt*I 1dMt!idt;I1dMt;ei2;tI1dMnU=numOf&ec=roiK+1=roiK*1=roiK+0-roiK+1=roiK*0roiK*1$J GG append rectan2le coord to pre.ious line content str9ostfi+RIU URIntToEtrin2"roiK+1$RU URIntToEtrin2"roiK*1$RU URIntToEtrin2"roiK+0-roiK+1$RU URIntToEtrin2"roiK*0-roiK*1$J _ brea>J _ _ !;ile"iQe*`I13$J GG sa.e to info file as later used for HaarTrainin2F GG [relKpat;VMbmpKfile.name numOf&ec +0 *0 !idt;0 ;ei2;t0 +1 *1 !idt;1 ;ei2;t1... if"numOf&ecV0 aa iQe*II13$ \ GGappend line GO TO,OF Etore output information. OG output [[ str9refi+ [[ U U[[ numOf&ec [[ str9ostfi+ [[UMnUJ _ c.&eleaseIma2e"aima2e$J _ else \ fprintf"stderr= U-ailed to load ima2e= 1sMnU= str9refi+.cKstr"$$J _
20
20