From 7651a8bd55e286edcba8b518ef5ada581c6fbd72 Mon Sep 17 00:00:00 2001 From: Vaek <timothe.boulet@student-cs.fr> Date: Wed, 28 Apr 2021 02:20:09 +0200 Subject: [PATCH] add loaders --- __pycache__/imageProcess.cpython-38.pyc | Bin 1405 -> 1298 bytes __pycache__/loadAffwild.cpython-38.pyc | Bin 0 -> 2277 bytes __pycache__/loadExpWDS.cpython-38.pyc | Bin 0 -> 1321 bytes __pycache__/loadFer2013ds.cpython-38.pyc | Bin 1291 -> 1417 bytes __pycache__/loadRavdessDs.cpython-38.pyc | Bin 2241 -> 2230 bytes imageProcess.py | 5 - loadAffwild.py | 125 +++++++++++++++++++++++ loadExpWDS.py | 65 ++++++++++++ loadFer2013ds.py | 6 +- loadRavdessDs.py | 35 ++++--- test.py | 12 ++- 11 files changed, 221 insertions(+), 27 deletions(-) create mode 100644 __pycache__/loadAffwild.cpython-38.pyc create mode 100644 __pycache__/loadExpWDS.cpython-38.pyc create mode 100644 loadAffwild.py create mode 100644 loadExpWDS.py diff --git a/__pycache__/imageProcess.cpython-38.pyc b/__pycache__/imageProcess.cpython-38.pyc index 421798d2bd14fb0373f5881855f092994202292c..781d95caa203cb8b26f3f98f4c0cff872bc74a59 100644 GIT binary patch delta 271 zcmey%HHnKal$V!_fq{X+WmZSRVvdP?IsE(#3=AM4X9fm_;x`NvJG~j_O}tuc$XMi2 z!nuH}hIb)jEnf-40`3}y8onBi8qPGP5{4|E6!sL>6t;!zj0}YyHB7+_njDk2GsaI= zXIje0Klv<EA@42r)ZF}%%>2BS3`O#j6Pbfl<UkfPvoH%W3NiCB@-cHT@-Qng%P`6? zaxt?oaxuy=6)8@>%lz9|o`Hd(2uvt2FfiQWDo)KwO)hauOion?Ig$@#4vP>o9}~z7 t0Y(|dBBjaPtlH|g*h(^UQ!`6$F_mN%DS`}90uf-75QM_ySXOyP1pouhIg9`R delta 396 zcmbQl^_Pn;l$V!_fq{WxB}+#_3+F_>9DWf71_qFjGXn!du@>XRPH)CL6R#H6vn*h% z;aSL7%U8qa!Vs$$!&1v%D^M#~D^$X;fW3ydhQCH2jj4veMo^rgMxaJWoFR=Vg*}C1 zAuA(8;i($NB99Wz1za_}3mI#LOBfb#*D%xw*KpKurZJT;WbveMq_C#2Eo5h8DD<dd z3TDvc^!ufpk(gMNoLHQkn35WwHo240pHGvyh>?MTp@;=UFiyV8xPnn+avf8lauiEy zWoq#)rqqgCOsSQ(m{QB5m{K!tv8U$dmt^MWtz;-tn*4_;h*4#-KeIF+7oz~93Ns5M z7o!|gk;>#E=HJFjAQQoaG6Ms{Ew19!oYdqJx5VUB9Z)#%fx?JIh?$RxkC}r}fKi6A zNOkf87H#(^wvx=;)Xb77rjpDe6_6pSAOdU>f&iPzVUwGmQks)$#{@DF6vP~iV93O! F3II*6T|EE* diff --git a/__pycache__/loadAffwild.cpython-38.pyc b/__pycache__/loadAffwild.cpython-38.pyc new file mode 100644 index 0000000000000000000000000000000000000000..11042780dc77eb84fc05ad784113bfa993167f37 GIT binary patch literal 2277 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 E0GDcXVE_OC literal 0 HcmV?d00001 diff --git a/__pycache__/loadExpWDS.cpython-38.pyc b/__pycache__/loadExpWDS.cpython-38.pyc new file mode 100644 index 0000000000000000000000000000000000000000..d6b4a27eb33fc89601a41616ec26f7eb91261925 GIT binary patch literal 1321 zcmWIL<>g{vU|@)z(vcv}&cN^(#6iZ)3=9ko3=9m#P7DkTDGVu$ISf%Cnkk1d1Vl6E zFy%5wF*AbLj5#b(tY9^4QS7N4DJ;#5DXeKsDQqe1EsRl|DU87knj9}dru%6!-eT0! zWW2?lnO9I+5?`E=Sde;)IWsTKEtv_V0E)#K7#KJi7#N&EF0f%_U?^coVXR@8&5*)0 zm${jdks*b-mMMj$mbrwnhB<|`nW>f~g{_t~g{_t?ouQUJouQVahQ);;_DU^h4QmZU zHfxawBf|v7LY^A76n1llTDBU_1xyPW7BHu9EM$z~sO75VuH~uat>vrbuN9~jEMZx| zTEkSsCC;#ru~w)?sD!PCr<t*Yt%kpuv6ZQWt%euO;{);1m?Rl$g-h78IBJAbI8(TK znQBE!xN1b28B^G^nTik8Fiv1BW`c^aWiuCDs}V_IlVqqB&10z%t`#let`RNaX=bVw zt6^WjTO+oRk&&T>V*ziCAehApb}wt8SqVc5H^}E8Rt@WHh7_I}w%H6RymMJVq9uF_ z_-oh~GS;$#SsV))YdLDzYdF%Ff*CaV{Hpl5oIM<a++BTL{X!I6TotOs6<qxN{9Ijw z6<k~cLOp{OTq6R)_4M?r1XB`A67^Fn3c~d>a}(23i}kBS5JEYLNvS!-dO5`<w-}3x z7#SECUV?~Uj0$d=jJJ5oi!w`6U32qGGV}9F?HCvsT#JfQON$f=@=J>pauO9%^7HZz zuS`|2QgAFyF3nTOFI6bWDJ{-SEiEcmD9bDc*{6_lcx6dya>?P9#ignY3=A+$#R|z8 ziACv$SEd##q@)&<W)>@eT&bW@Tw0`1DvF}Aq$n{HWPqj~m!`li)`FtUypmfi`30$Y zw^)lyiZTmsu@)EPWR~1wPA)UL#g>^{l$w|VN{1!4m@*4)@qm3EP?VpXT3mdKIln07 z7IRK&-Ywp|{GwdPyp*8S;>@blB2XT=#g<r5keZiriz%<*7HeWrQDUX0coa`wQju?B zg(o-wqj>W3aw=U?L7qxYiQ-Ai&q+xwg358FW#**%fJ5~b3y2-XnU@5Wyv3M(i!tIB zW8^KCoXot`C{D1m{1S6hZ!vkM++r@tFSx~$lbTj?i?t{-J)`6nTT*^WNq%k=XL5d8 zW=d*aa_TKsaE#qz1#68GOiN5obxcmqFG|VGOApC+36A0g2^GU!cZ&tYy~UDVlvufv zp-7E^f#H{hvsFxJacWU<Oi5;Leo0JPVsd6;j&5p2K~ZXPab|v=ZVK3MnfZA!Ir)hx zt`!C0F2Q;QmA81{+{BVZ4p3gU0%dSU0Y(-^7A7tb3BpVqj2sMXj2z5zjC_nLjC`Cz z%sh--Of1Y?Ok9i*ECOZ~X)rJ_XmS<tGB7aQVl6Gn%qhObmYkoLmYEKYj3Pk>28JR5 zuxwswZb4;{7?_=wlb=`u)(rL$5}^)~=dj7mPbtkwwF4#PVo<rr!N|eL!^pwN!3+T7 CXLJMr literal 0 HcmV?d00001 diff --git a/__pycache__/loadFer2013ds.cpython-38.pyc b/__pycache__/loadFer2013ds.cpython-38.pyc index 08fa3949ccfa1ea775d20f33b432ec244d74ec5e..c01c5f18e516716bf499d2202d506dd2c2a25905 100644 GIT binary patch delta 786 zcmeC?>g47N<>lpKU|?XlKB*&tfo&t7FQaZ0TTW_TdPd1D#>^<@yriOA%*lyGD;bIe z7#J9SSvy<Bgche36~~lh=H{2gOzvTn=8MV6PfT%3Eiy7NG<FG|yp_?sUWkE#;iY~L z14A++$apB`Wnf_7WME)$W?*0_e#OARP{NSHSi>-zA%$r!b2B3&Lke>(V+u<xQwnPe zTMBy$M+#>OR|<DJdo6Q1LoG`>LoI6wV+~UZPYQ1eUoUfiRV`ZyQx<a#TMB=QKrd4* zdkISoJII{+6v0}K8g>_k*pOPz8jchpbB0=u8jc!<Y?h)5Mux&|HJmZbwOqB_wLCQ} z3s_6oYPg#j7cw$3)UYmKt>FT(N*GdvYdB^zq=<kWC_0xlMJz?Umx+;~Fd>}5lp&BI zh#`WZgna==4a-8tS{5*ibs=LdYY9V5J;+ZIbD2PHsbQ&MO=AjX(3JG6;^%Vqa13&H z^>y_NQE+ipsFGH2@%Qs{bq!W<aSaId3|4S+4FUzDf}WmUkuU=TLzO^EVo9QY8YFb} zl8eitSRM1yiz=hoT{4T)ON&dQSlm(*i=tRP5(^3{qnLveQ=-@>D>0j=fkM8Bg@J*g zl!JkR!6iR0@9@f0g(_Bs;?g38Qcyf7BxfWRr5|3I`iqfQlkpaFYF<jIG6MsHLJCB2 zF<e2hLP}~uX=bqk%psbbw^$2`GV@9%*D%XlgQB|#WMUC0HEHrj@#H2}_$3v2<|d}6 z7Dox>!I;oga*HD^Gbc4KF*h}8@&jfiOFjk$hFi=<`Q=eusk!+jnfZBsNkviI#U(|V zdFfz7qBu(`3sS*Ma7u&_f|IRTBst7L$%|2dX>tsUmV_D;7b6!VA7hak0|SF5BRCK> cIg4Z`&tWl@0=p9=0nrXh(h!#5<ku_;0Omc&1^@s6 delta 687 zcmeC=?&jhP<>lpKU|?W)=+Ti-%({`!moe%VTTW_TdPd1D#>`vHc}YdLn3EHWRx%U` zF)%Rvve(beE74EZ4=qkDD%LN_%*`*+PfJYBOw7?uttco;EiTT?&(lpwElEu-$;{8w z&&f|raZ4>SGB7kwDW1HM(Y#)Sfq~(reh&jfG9$=hDCT2eVBln6U~pz&U?@Jrz`&5g zSj(8gRLhjYT+5uolERw8mcpLGk;0k6mCjzvlFm@en$A$mR>DxjoWh;Llfv7}++SA9 zUc#8gRKuRam%`u6RLfDqT*J}K$OtlvvxdWkAvU0vtG<RaMZlb)ma~Slh9R4!D2I`u za9Isk40A1aEl(|P4eJ7y64n}?X2yk#j0`nw3s`EnL97zC6u}zK*$gQ{H4L*EQiSKS zf($MU31={62xJIih+rsTU%*krx{$G!70hB=$XLr(!&<|Z#uUt;DdJZI@@<hQgE<33 zl|V{jNuqulBv|y4i_31YI_9MpRo-HE$t+GUEiSpm;+C3Nbc@v^v7n&x7ISc7%B{&M z%obcM3=9laY@WG^>614wi+gEu-eSowNX@&&3^IeQC^a!9wdfX0UTQ^25jz6|LlG#f zZ?P5>W#*L>fkL+k6xW)3w|H_BEBum*KnA52-(pO@HQ9khn(@};7#5`{eg+1HTg*lI z<+r#}bMrxw=$BM<i@Ug_C^Ih|tm77ENo7GQm<di45JDKFj~^+%T@p(Y6+zKy0*Yfs z7RJdpShU2Hn7A0Z7>kS<7#K7ei$p;bXOYrmDOOV{kZZvb5CcK!4Z;$hoXM&H0G3;} AQ~&?~ diff --git a/__pycache__/loadRavdessDs.cpython-38.pyc b/__pycache__/loadRavdessDs.cpython-38.pyc index e58c4aa7cbfe2ee2e1fbb4fa4c064806e15caa57..dee7ea69bad7a07207953feec090113a673aaaa8 100644 GIT binary patch delta 1237 zcmX>oxJ{5Rl$V!_fq{YH+N_QQQ-O(mGK@|Wwax2OI8)eDI9eE^I8qpc88o?Gg4FnF zGTvg;(qz2FotalqS`uHJkywzL%nFi%VqOLY1{MYe24@BahT=aA3=AoZwX7u!3m9t{ z7Bbed)vzsKTF8*Xl+9G6RKlFX+|0<xkit^S4iPVUQp2`@Wg$ZhQ*Av*EoTi!3Trk~ z(UThX6h?D~TJ{?D8ded86vk}UqFo?OC9E}!DQuDq&5X5NC2TcZk_@%nCG0iaU_M6{ zXANfxQwn=8Q!P&kR}D`yV+vz7Q_+$drWzh|hFYc?<^|j}TniZ)8S*$vm{T}FPATE4 zVQOZqVaaCkEZSB0q=aDsPYUBg#uQEmh7#Tsu4a${m%!qDDcm)j3z--h3e^gq6spy* zE#P0sz{pU-us{Gr*D%#Er!fUHX!7_?zRu`2*@em3<Ua!g!!5?bTdZzHiMgqog14BH z%ZzUEgk`3r<~t`Al#~{w-r~qC_Af}yOHH}OT2PdkS2FnkQw1aMWJ_ipzFR!Gi4}fH zMV`5d>8Zt&Q<>{jgY^n3Z;7N<loTZ<m$)RBB)S#l=Yq}S00qAVC{9==bFnDZ^DuHS z^Dr_oi!m~>@UgHkb1-u-7pXEZFuY*~DM}I7;ABW<1TmqQpMima6BdtYj0_AV3@MB? z46_+hnC3!ajk%UFg(ZbGg$<NWQaDq%Qn*ui(m89H(iv)*(-~@6N*EU~)i5q(bYY0C zKLSbwDZDkTDSRmmtxS>(vl-?xfkPausD@P>oIFaHYuK6@YuQuyYdLDzTo_`zYB@`o zYnYoEYZ$Uwi#iw?3T<jQQUuHyYB@?6QUq%_XEUS-)o{#aND;1KpUp6r4P<5wBgniI zVR42UPH~1>t`e4j1*|Co3mH>H92iR2QbfV=cm-@2XNs64LyCAdQ_-suh7<{q_QH}9 z_8P7l&Kl+#mKug;))=N*=317*l0qAZQ);<O7$)bi8Z#<QUcf5q$WX(bBHhfy$WX&u z!v~IY8NVuiE@uzNAa_?^SHBPi7gvQUDFqjQKR;L3U<DV~fKbn1g&@Z;7uVomJw3h2 zCs`xpL>U+uLV_GULm*llokLthgB1J@ZFu?b|NsA!o!N{gSF!1-DI=+YnqZ|+Qk0lk zlA4>ESE7)TTC7lNIC&SFA%~uxUa1lT1H<HxY%0n{JfOtKlwW*{JtwocBqg(`NQi-f zp$HVkMIs=U=wu6a1KA>31_p*GuC)A|l+>cU#N5;(P(mn@2C0yl+{doVCIw<jPCm$P z!s7u-WFepg!zeKMKf72xlNci(BL@=;69*FyBMTD;qZFe6vlt@_6Au#?GZP~d0~G$} zVc}pDVB%rqU=(8HV&Y=rVl1*^U|`T>EK&neoJB?;TR@Jx#addDnNwUO2oewgd4erD bKQApay$F<W!ATgbwMdzPVe%vnJw^ur&FCbQ delta 1215 zcmdlccu<fpl$V!_fq{X6FTNuom470i45P<HZS(q6juf_L#x%wh_7sj5#wgAd#$X0b z&X*vSewvK87_~GRZ*gbl6_l357iT0Eq$aa~q@b9Gfq{XIfq}u9fq|izkCB0)gdv5o zhOwE6ks*btmZgMo0aFdbLdIIw8rB8O3mH<Fvzdx?N*GdDni&}xQdn!*YU;rfMc-;z z7qBd3h+(Q_ujQy=PhrbuD*9H#mcnGtP|H@sR>LB~kiwMBT66}asf4wLF@;@{p_#Fk zvxKdNQ<9;UtAxFV3(V)p;;i9FVNT)bWvb;a;i}<oW=vtqW-2;T!&Jj<&QQx#!@PjI zhI1h!BgnCw^(9<2OwEibTqRsJ%*~9=EQ}0!93>1X+#na0FfQOp;aSL-!t20L!kfa^ z%$Uto^rY}x3F8936#g2Hg-nbLg$9M+3Jq#l7w|7+U}Pv^Tp$3VYnW=7)0l!8GzI)h z1sNC^d{UE3N{dnz$}&?9ugq6SNqx!4z`)>Er8IdXqn(;00|SFgeqP?;m8lAeS^1?U zhgYWRD0t>3rl%HLRk8adCZ*;STTOn)=wb;{`tm;m1H&!G!dt9vMTxnonu51j3yL!H zN^UVHml@sS3Cm1L&38^L09km8BeU4QAT=*FWpWx*1tZVo`%F5MC7J6Oizm-umg8^& z#Ul$B<K#WeO7&cfY>Z6*nHZTE*#5IIaWIQ9GO_TnurPBlb1)aFf~;iD%u7oKIUJ-7 zg!vg57&u|^AI8YQkiuBYn8K98oWhdAn!*N3Qz@J&T<M&(Oz8}@%;^lZEF}yJ7;6|8 zGP*Ft9;sz5VFHDE4MR3dQN05rL*b_q<`nK4))bx;hE^s?hS>}$ymOhsQ32Lg!zvC+ zPHZJiHEhj{wd^T;wH!5UE)201wV+t%H)p8jC}B<!sNtN=kRn*aF`FSpsD^zu!(29y z88wU`{V77?3^knMpftm>fHg&UA!CY&149X$Q;H}!evdIS6zbG)rie*0q=;uT72PRe zPLTj<FDwHkvKr1B<{Fk}mKdg5=317*vO*n*A8NTvm?!J78Z!z_PGA)kVXom$kp|_1 z8r~W{a7vKzo4k!RLP?B)fq^R|$k8*z)z{T8M8VNH#5FWX!SB$9m;e6%|9^{-YqAcT z5hKUsC^jP@{*a=?%#zgH)Vvafl+<E{QoYHW*bLc9l^GZq6ehoBQ&GOflwW*{Jtwoc zBqg(`NSJ|vp$L@Ai?~57Q4k?E*@)dh?G{gNVufE)5hPJXai!(wq@)(*CFZ6U34m0| zfC$;i_3XNA(jcbP<W1}*_U@p39RP}HCKg5xMkWR*{LjL~!pOqR$IQdX!X&}S$H>9N z!o<PI!6?Njz%0hd!o<VG#l*xoS(8KB#)g4`L6fV<7-TBQRkv76OEPnci-bS|puBO5 fEjd3gEi=7{86*NuXsl^D`H3Y(Hj^7TOd0I~7)&D+ diff --git a/imageProcess.py b/imageProcess.py index cba699e..6719ce1 100644 --- a/imageProcess.py +++ b/imageProcess.py @@ -29,11 +29,6 @@ def imageProcess(image, writeEmotion=True): face_color = image[y:y+h, x:x+w] facesList.append(face_color) - #Detect eyes on the face, create green rectangle - eyes = eye_cascade.detectMultiScale(face_gray) - for (ex,ey,ew,eh) in eyes: - cv2.rectangle(face_color,(ex,ey),(ex+ew,ey+eh),(0,255,0),1) - #Write emotion on the image if writeEmotion: emotion = fa.detectEmotion(face_color) diff --git a/loadAffwild.py b/loadAffwild.py new file mode 100644 index 0000000..c50f069 --- /dev/null +++ b/loadAffwild.py @@ -0,0 +1,125 @@ +import os +import cv2 +from utils import * +import imageProcess as ip +from config import input_shape + + +def extractDataFromVideo_(filename, videoName, facesList, labelsList, maxNbrImages): + # Extract every faces in a specified video and add it to a list of faces as well as labels corresponding. + frameRate = 1/15 + emotions = ["Neutral", "Angry", "Disgust", "Fear", "Happy", "Sad", "Suprise"] + + # Start capture of a video and reading of a label file + cap = cv2.VideoCapture(filename) + if (cap.isOpened() == False): + print("Error opening video") + + file = open("data/affwild/labels/"+videoName[:-4]+'.txt', 'r') + file.readline() + + # Read until video is completed + k = 0 + while (cap.isOpened()): + # Capture frame-by-frame + ret, frame = cap.read() + line = file.readline() + + if ret == True: + k += 1 + + if k*frameRate >= 1: # Read a frame each N frames where N=1/frameRate + k = 0 + + # Load image and labels + + #Detect faces on the image + newFaces = ip.imageProcess(frame, writeEmotion=False) + + #If 2 faces were detected, it means an error was made since there is only single-person videos here. + if len(newFaces) == 1: + facesList += newFaces + + emotionNbr = emotionToNumber(emotions[int(line[0])]) + labelsList.append(emotionNbr) + print("Donnée ajoutée, donnée :", len(facesList)) + elif True: print("Erreur pour la donnée : Aucun ou plusieurs visages détectés") + + # If we overreach the maximum number of images desired, stop + if len(facesList) > maxNbrImages: + break + + # Press Q on keyboard to exit + if cv2.waitKey(1) & 0xFF == ord('q'): + break + + # Display the resulting frame + if False: + cv2.imshow('AffWild data extraction...', frame) + + # Break the loop + else: + break + + # When everything done, release the video capture object + cap.release() + + # Closes all the frames + cv2.destroyAllWindows() + + #Close file + file.close() + + # Return face and label lists with new datas + return facesList, labelsList + + + + +# LOAD DATA + +def loadAffwildData(maxNbrImages=10000000000): + print(f"\nCHARGEMENT DE {maxNbrImages} DONNEES DEPUIS AFFWILD...") + + foldername = "data/affwild/videos/" + facesList = [] + labelsList = [] + k = 1 + nbrOfVideos = len(os.listdir(foldername)) + + # For each video... + for videoName in os.listdir(foldername): + + # If we overreach the maximum number of images desired, stop + if len(facesList) >= maxNbrImages: + break + + elif videoName+'_left' in os.listdir("data/affwild/labels") or videoName+'_right' in os.listdir("data/affwild/labels"): + print("Vidéo à deux visages, non pris en compte") + + else: + k+=1 + print(f"Traitement de {videoName}, video {k}/{nbrOfVideos}") + filename = foldername+videoName + + # Press Q on keyboard to exit ONE video + if cv2.waitKey(1) & 0xFF == ord('q'): + break + + #Add datas extracted from the specified video to features and labels + facesList, labelsList = extractDataFromVideo_( + filename, videoName, facesList, labelsList, maxNbrImages) + + # List of colored images N*M*3 faces to array of gray images 48*48*1 + N = len(facesList) + print(f"TRAITEMENT AFFWILD: traitement des {N} visages détectés sur les vidéos de AffWild...") + + for k in range(N): + visage = facesList[k] + facesList[k] = normAndResize(visage, input_shape) + X = np.array(facesList) + + Y = np.array(labelsList) + + print(N, "données chargées depuis AffWild.") + return X, Y diff --git a/loadExpWDS.py b/loadExpWDS.py new file mode 100644 index 0000000..f146b52 --- /dev/null +++ b/loadExpWDS.py @@ -0,0 +1,65 @@ +import cv2 +from utils import * +from config import input_shape +import imageProcess as ip +import numpy as np + + +def loadExpWData(nbrMaxImages=float('inf'), onlyDetected=False): + print(f"\nCHARGEMENT DE {nbrMaxImages} DONNEES DEPUIS EXPW...") + folderImages = 'data/expW/images/' + fileLabels = 'data/expW/labels.lst' + + file = open(fileLabels, 'r') + nbrImages = 0 + k = 0 + X = [] + Y = [] + + for line in file: + if nbrImages>=nbrMaxImages: break + k+= 1 + + #Face extraction, according to the dataset annotations AND the face detector (cascade) + imageName, Id, top, left, right, bottom, cofidence, label = line.strip().split(' ') + image = cv2.imread(folderImages+imageName) + faceAccordingToDS = image[int(top):int(bottom), int(left):int(right)] + facesDetected = ip.imageProcess(faceAccordingToDS, writeEmotion=False) + + #Suivi visuel (facultatif, fait un peu peur sans attendre 1000ms entre deux images...) + if False: + cv2.imshow("ExpW importation...", faceAccordingToDS) + if cv2.waitKey(1000) & 0xFF == ord('q'): + break + + #Add extracted data to our dataset + if len(facesDetected) == 1 or not onlyDetected: #Otherwise no face were detected or a no-face was detected as face + + #Select in priority image detected by detector + if len(facesDetected) != 0: + face = facesDetected[0] + else: + face = faceAccordingToDS + + #Colored N*M*3 face to gray 48*48*1 image. + gray = normAndResize(face, input_shape) + + X.append(gray) + Y.append(label) #Emotion order is the same as fer2013. + + nbrImages += 1 + else: print("Erreur pour la donnée : Aucun ou plusieurs visages détectés") + + print(f"{nbrImages} données chargées depuis expW (sur {k} données traités).\n") + + X = np.array(X) + Y = np.array(Y) + + return X, Y + + + + + + + diff --git a/loadFer2013ds.py b/loadFer2013ds.py index b10e6b8..434ebc9 100644 --- a/loadFer2013ds.py +++ b/loadFer2013ds.py @@ -31,7 +31,8 @@ def strToArray(string): # Fer2013 provides images as string so it needs to be t # LOAD DATA AS ARRAY def loadFer2013Data(maxNbrImages=35887): - c = 0 + print(f"\nCHARGEMENT DE {maxNbrImages} DONNEES DEPUIS FER2013 ...") + nbrImagesFer2013 = 35887 filename = "data/fer2013.csv" emotions = ["Angry", "Disgust", "Fear", @@ -56,8 +57,9 @@ def loadFer2013Data(maxNbrImages=35887): X.append(strToArray(stringImage)) Y.append(emotionNbr) - print(f"Image {i} sur {maxNbrImages} chargée") + print(f"Donnée {i} sur {maxNbrImages} chargée", end='\r') X = np.array(X) Y = np.array(Y) + print(f"{maxNbrImages} données chargées depuis fer2013.") return X, Y diff --git a/loadRavdessDs.py b/loadRavdessDs.py index cb1db15..f170ce2 100644 --- a/loadRavdessDs.py +++ b/loadRavdessDs.py @@ -5,11 +5,10 @@ import imageProcess as ip from config import input_shape -def extractDataFromVideo(filename, videoName, facesList, labelsList): +def extractDataFromVideo(filename, videoName, facesList, labelsList, maxNbrImages): # Extract every faces in a specified video and add it to a list of faces as well as labels corresponding. # Start capture of a video - print("Lecture vidéo de", videoName) frameRate = 1 cap = cv2.VideoCapture(filename) if (cap.isOpened() == False): @@ -40,12 +39,14 @@ def extractDataFromVideo(filename, videoName, facesList, labelsList): if len(newFaces) == 1: facesList += newFaces labelsList.append(emotionNbr) - print("Donnée ajoutée, Images:", len( - facesList), "Labels:", len(labelsList)) - else: print("Erreur pour la donnée : Aucun ou plusieurs visages détectés") + elif True: print("Erreur pour la donnée : Aucun ou plusieurs visages détectés") + + # If we overreach the maximum number of images desired, stop + if len(facesList) > maxNbrImages: + break # Press Q on keyboard to exit - if cv2.waitKey(25) & 0xFF == ord('q'): + if cv2.waitKey(1) & 0xFF == ord('q'): break # Display the resulting frame @@ -68,7 +69,8 @@ def extractDataFromVideo(filename, videoName, facesList, labelsList): # LOAD DATA -def loadRavdessData(maxNbrImages=float('inf')): +def loadRavdessData(maxNbrImages=10000000000): + print(f"\nCHARGEMENT DE {maxNbrImages} DONNEES DEPUIS RAVDESS...") foldername = "data/ravdessTest/videos/" emotions = ["_", "Neutral", "Calm", "Happy", @@ -79,35 +81,36 @@ def loadRavdessData(maxNbrImages=float('inf')): # For each actor... for actorName in os.listdir(foldername): - # If we overreach the maximum number of images desired, stop - if len(facesList) > maxNbrImages: - break - - print(f"\nTRAITEMENT ACTEUR N°{actorName[-2:]}\n") + print(f"TRAITEMENT ACTEUR N°{actorName[-2:]}") videoNames = os.listdir(foldername+actorName) nbrOfVideos = len(videoNames) k = 0 # For each video... for videoName in videoNames: + # If we overreach the maximum number of images desired, stop + if len(facesList) >= maxNbrImages: + break + k += 1 print(f"Traitement de {videoName}, video {k}/{nbrOfVideos}") filename = foldername+actorName+'/'+videoName # Press Q on keyboard to exit ONE video - if cv2.waitKey(25) & 0xFF == ord('q'): + if cv2.waitKey(1) & 0xFF == ord('q'): break if videoName[7] == '2': # Doesnt take Calm emotion into account print("Emotion 'Calme', non prise en compte") else: + #Add datas extracted from the specified video to features and labels facesList, labelsList = extractDataFromVideo( - filename, videoName, facesList, labelsList) + filename, videoName, facesList, labelsList, maxNbrImages) # List of colored images N*M*3 faces to array of gray images 48*48*1 N = len(facesList) - print(f"Traitement des {N} visages détectés sur les vidéos de Ravdess") + print(f"TRAITEMENT RAVDESS: traitement des {N} visages détectés sur les vidéos de Ravdess...") for k in range(N): visage = facesList[k] @@ -116,5 +119,5 @@ def loadRavdessData(maxNbrImages=float('inf')): Y = np.array(labelsList) - print(N, " données chargées depuis Ravdess.") + print(N, "données chargées depuis Ravdess.") return X, Y diff --git a/test.py b/test.py index d376c9b..afd0b49 100644 --- a/test.py +++ b/test.py @@ -15,9 +15,13 @@ import random as rd import cv2 import csv -from loadFer2013ds import * -from loadRavdessDs import * +from loadFer2013DS import * +from loadRavdessDS import * +from loadExpWDS import * +from loadAffwild import * from utils import * -X, Y = loadFer2013Data(100) -W, Z = loadRavdessData(100) \ No newline at end of file +# X, Y = loadFer2013Data(10) +# W, Z = loadRavdessData(10) +# A, B = loadExpWData(10) +C, D = loadAffwildData(1000) \ No newline at end of file -- GitLab