From c5d6d891fe7fe4e5c543f4138eb4d2183f3dbddc Mon Sep 17 00:00:00 2001 From: Zamua Nasrawt Date: Sat, 5 Jan 2019 22:29:52 -0800 Subject: [PATCH 1/3] Replace faces with the Duke Dog --- README.md | 9 +- img/duke-dog.png | Bin 0 -> 46064 bytes index.html | 25 ++-- js/index.js | 92 ++++++++---- package.json | 1 + weights/face_expression_model-shard1 | Bin 0 -> 329468 bytes ...ace_expression_model-weights_manifest.json | 1 + weights/face_landmark_68_model-shard1 | Bin 0 -> 356840 bytes ...ce_landmark_68_model-weights_manifest.json | 1 + weights/face_landmark_68_tiny_model-shard1 | Bin 0 -> 77224 bytes ...ndmark_68_tiny_model-weights_manifest.json | 1 + weights/face_recognition_model-shard1 | Bin 0 -> 4194304 bytes weights/face_recognition_model-shard2 | 6 + ...ce_recognition_model-weights_manifest.json | 1 + weights/mtcnn_model-shard1 | Bin 0 -> 1983400 bytes weights/mtcnn_model-weights_manifest.json | 1 + weights/ssd_mobilenetv1_model-shard1 | Bin 0 -> 4194304 bytes weights/ssd_mobilenetv1_model-shard2 | 137 ++++++++++++++++++ ...sd_mobilenetv1_model-weights_manifest.json | 1 + weights/tiny_face_detector_model-shard1 | Bin 0 -> 193321 bytes ..._face_detector_model-weights_manifest.json | 1 + 21 files changed, 230 insertions(+), 47 deletions(-) create mode 100644 img/duke-dog.png create mode 100644 weights/face_expression_model-shard1 create mode 100644 weights/face_expression_model-weights_manifest.json create mode 100644 weights/face_landmark_68_model-shard1 create mode 100644 weights/face_landmark_68_model-weights_manifest.json create mode 100644 weights/face_landmark_68_tiny_model-shard1 create mode 100644 weights/face_landmark_68_tiny_model-weights_manifest.json create mode 100644 weights/face_recognition_model-shard1 create mode 100644 weights/face_recognition_model-shard2 create mode 100644 weights/face_recognition_model-weights_manifest.json create mode 100644 weights/mtcnn_model-shard1 create mode 100644 weights/mtcnn_model-weights_manifest.json create mode 100644 weights/ssd_mobilenetv1_model-shard1 create mode 100644 weights/ssd_mobilenetv1_model-shard2 create mode 100644 weights/ssd_mobilenetv1_model-weights_manifest.json create mode 100644 weights/tiny_face_detector_model-shard1 create mode 100644 weights/tiny_face_detector_model-weights_manifest.json diff --git a/README.md b/README.md index f349ca2..dfc0769 100644 --- a/README.md +++ b/README.md @@ -1,3 +1,10 @@ # madify -This is the source code for https://madi.fi. This project serves as a demonstration of using a custom [CamanJS](http://camanjs.com/) filter (in this case, the [customscale filter](https://www.npmjs.com/package/@jmu-cs/customscale-camanjs-filter), which defaults to [JMU colors](https://www.jmu.edu/identity/our-style/color.shtml)) to modify a user's image and offer it back for them to save it, all done (client-side) in the user's own browser. \ No newline at end of file +This is the source code for https://madi.fi. This project serves as a demonstration of using a custom [CamanJS](http://camanjs.com/) filter (in this case, the [customscale filter](https://www.npmjs.com/package/@jmu-cs/customscale-camanjs-filter), which defaults to [JMU colors](https://www.jmu.edu/identity/our-style/color.shtml)) to modify a user's image and offer it back for them to save it, all done (client-side) in the user's own browser. + +## Local usage +- Run `python -m SimpleHTTPServer` from the root of the repository +- Navigate to `localhost:8000` +- Drag and drop (or upload) an image + - It may take a few moments for your madified image to appear +- Click on the image to download your madified image diff --git a/img/duke-dog.png b/img/duke-dog.png new file mode 100644 index 0000000000000000000000000000000000000000..961fcf18d357abb2f165d2ab50803cb199cec426 GIT binary patch literal 46064 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 M07*qoM6N<$f*WGb%>V!Z literal 0 HcmV?d00001 diff --git a/index.html b/index.html index 8ead69c..9ec915a 100644 --- a/index.html +++ b/index.html @@ -31,27 +31,22 @@ - - -
- - - - -
- - - +
+ + + +
+ - \ No newline at end of file + diff --git a/js/index.js b/js/index.js index 0b638e2..f8e599c 100644 --- a/js/index.js +++ b/js/index.js @@ -1,42 +1,66 @@ -var img = new Image() var canvas = document.getElementById('canvas') var ctx = canvas.getContext('2d') -var fileName = '' +var reader = newFileReader() + +var fileName Caman.allowRevert = false +faceapi.loadSsdMobilenetv1Model('./weights') + Dropzone.options.myAwesomeDropzone = { autoProcessQueue: false, autoQueue: false, createImageThumbnails: false, - init: function () { - this.on("addedfile", function (file) { - var reader = new FileReader() - if (file) { - fileName = file.name - reader.readAsDataURL(file) - } - reader.addEventListener('load', function () { - img = new Image() - img.src = reader.result - img.onload = function () { - canvas.width = img.width - canvas.height = img.height - $(".preview-wrapper").css("width", img.width) - $(".preview-wrapper").css("height", img.height) - ctx.drawImage(img, 0, 0, img.width, img.height) - $('#canvas').removeAttr('data-caman-id') - Caman('#canvas', function () { - // this.revert(false) - this.customscale() - this.render() - $(".preview-wrapper").removeClass("hidden") - $(".navbar-text").toggleClass("removed") - }) - } - }, false) - }) - } + init: initDropzone +} + +const filters = [ + camanFilter, + faceReplaceFilter +] + +function initDropzone () { + this.on("addedfile", function (file) { + if (file) { + fileName = file.name + reader.readAsDataURL(file) + } + }) +} + +function newFileReader () { + r = new FileReader() + + r.addEventListener('load', function () { + img = new Image() + img.src = r.result + img.onload = async () => filters.forEach(async filter => await filter()) + }, false) + + return r +} + +async function camanFilter () { + canvas.width = img.width + canvas.height = img.height + $(".preview-wrapper").css("width", img.width) + $(".preview-wrapper").css("height", img.height) + ctx.drawImage(img, 0, 0) + $('#canvas').removeAttr('data-caman-id') + Caman('#canvas', function () { + this.customscale() + this.render() + $(".preview-wrapper").removeClass("hidden") + $(".navbar-text").toggleClass("removed") + }) +} + +async function faceReplaceFilter () { + const detections = await faceapi.detectAllFaces(canvas) + faceapi.drawDetection(canvas, detections, { withScore: false }) + faces = detections.map(d => d.box) + faces.forEach(drawDukeDog) } $('#canvas').on('click', function (e) { @@ -47,6 +71,12 @@ $('#canvas').on('click', function (e) { download(canvas, actualName + '-madifyed.jpg') }) +async function drawDukeDog (face) { + i = new Image() + i.onload = () => { ctx.drawImage(i, face.x, face.y, face.width, face.height) } + i.src = './img/duke-dog.png' +} + function download (canvas, filename) { var e var lnk = document.createElement('a') @@ -62,4 +92,4 @@ function download (canvas, filename) { else if (lnk.fireEvent) { lnk.fireEvent('onclick') } -} \ No newline at end of file +} diff --git a/package.json b/package.json index 82a270c..261240a 100644 --- a/package.json +++ b/package.json @@ -17,6 +17,7 @@ "bootstrap": "^4.1.3", "caman": "^4.1.2", "dropzone": "^5.5.1", + "face-api.js": "^0.17.1", "jquery": "^3.3.1" } } diff --git a/weights/face_expression_model-shard1 b/weights/face_expression_model-shard1 new file mode 100644 index 0000000000000000000000000000000000000000..619cdf6d46e8757999a250616782ddb3e25c6504 GIT binary patch literal 329468 zcmWib>ac-V#-)lQ=iDOBTY*~FJt#-AIn9E*rRgrByGMtjNBKTw;IX#EBCpj&Jfr51+U5V%q0_&iS45{T;LRXyY8L zR`!pQ=oxV=a;w7|_8VkVt_RHrmj1q5SI}=3r`Q6Ir*U#HqjbYTRLOio`m)Q~0Q<1S z>0kUgo(i40)vxvKzho?MaK_brBim(AnfkUugt6_tPiR(qn~c))PjZ2W$3km~%;CZ% zMyaN2zpkm7dq!V+*7w&vh7+I`$tAxwdjCQh&0X`8tK{$t6l`6!BN6X+tuScn?DYt*9} zw(zI+*4hi-HR~Y4H2b437gG`a{@$f__(T&WDaYfE(~qzPQQ6qCJg)S;`u?}iM#a39 zbY^XQtj}4UlmfQW1#p{6)8BCt7WnR4r+rRxYIC7vEt(~+St>K2Umy7lc;m$>Aj)?59g@*ILGHYa^%~yCe5mpVuYMCxAZbKd_!ergl&CjrM6h%;n0c?}Fb6+Z?v_ zP$kb4O?!U{bz7yI)F60n$yLnI;iLt-8WmUJ!p^A!7mdN^ZTvP^&%&aYKdu%7UG&k@ zd;ar*b`3vm8k`0qrfAR2k9={u|Kag{SlqYh{qi`7`=+iESTfV=(^-h(MC4OLT`+4f zRz74#nhLT5ht>s!CDVZvsx@Eca82(l5~_nSO6Avqs|QTk%a1MLq&ue%^iPW~4C;JF zyZKkOpjt8Tzf(ui%*dAMFJDkVwphPgUm$cQ49uqCzr7yBz4)btx%+{+IabeL1m2q+ zY2sP;4PW!Z1 zVUznkApkCU|FFmL$Uk+TNdITYs&n-` z-#F9#aO}Oqna}1s^)sxaKmE;zovYj5==tK|HxF~CVqG6xyVLpU6aRI%xbaE%mupWQ zu?9Cgob=_+7hnF{&Ts#2qa*$4ogI1$q-UTf4D+lh^`)SzYtRq6&(o|}vG1aKq-&BQbC4HV@(Lr}t?vP- za@QZ|(%YxXHS@dYxA! zxrxU?g`MGzd;Pqbv94h!hh|7rnZpvbZ7=&UvPXHDzZ8&$IO>g-w^oe|FGH zno^y*B=J+u2*od6I6Wx;EB)*XC-h*CMa?>DJl-E0Q1V}N36sK?$FvC_IvE4vID-c5)A;^eNYmk8t%zgT z;cKMNR!Hh)+nU2C()z6>1*vu9T$0B+LAN36zP3E-loAuJ7KZn^vv)nRZsqIpfNLk& zu8M>8x})Is$a07S9Zjm$Ax3b+zGWKN*jR~Fqdn|2z}+~gWb*N#PyTpCOk@}fDiX7~ z8xg|?ffsDkm0Ns!L}vA+8)Zt@|RhRy~Z*vY7^{%35BN8 zR*%NzkXp?i<3j4IOen{8w&=c;B^;}__RBR%35C%+$(dUUe{x9iJ+)wxf8v}29cu44SY>+fcZ-pQ6>^*iLz&cJe&(VjRp!>_AydBD@aCJLfJTt4iPhGc)WTVU0vukWoC`@ZS3bbV zb`(Ji<%3LYkzUsEW0lpQGi*zm(+QvpzZ0--UR{fDHf+VvSw+a(S;3=uf+9M~tzefC z9y2^lmwS9`S8}L%pEUdV!tl@jIRJ{&-n?7I{XeSh3Bt7U`abCYb(uhZdaxBx)M?rr zJ3|d9Th+w_Mp^1pK}&}cSXlE_gStRKlZZN@sLK-YxqZb@z!f*8(?*XwEA@&E=ZGFXArW8!wrTf{@Tm|4AfH*nR9%?07kn3)vXj(aP%o!t4gY4;+J zkOk!mW9ed{fxBQ5*A%~vR6gBpL?xls@4m~;2AH1a75Z1ZqaVE5#Zp{36#lRFLG7Qf zb;ie|oqrEK-uXoI%_BMb#^Fz1_^|WF-9PL8-@pHMNB6`FhcvIM^Cv_7Jx_nGJNR^a z@UYMLt3&QTZ+8BHxY?N+_|f6vt-tA{#i~w=96emp{l1I%{~AZ&f_1palYt_OG!C%Z15Gh;r5Z9HPbWee-&+9+5s=VSN7i;5J7 zdg*A%t-HAB-d1X)r1|7**E&YUUVnS*g|fTM&}~Wt%(uNpntz+|i{Rh(*F{`UXx2A4 z^0cIP>+$Y^{}9#PFU7AI9ht>9V2S=0kZAV3d(H`w+Px`30#;EpLF5vPEpr@de>fZ& zd%~C{y{xvmT04ZjfBTm=ptI8tEo^@j);Yg7wt26nI!VLac0CH3Y>Sh&g7bF z)5bf6RbgtTe0=<#X-95tYc^is*n_T-wO4*_7K(L*At5fZ`s-Yg0oEzHp7$aCplNAX zALVo5p-Ii>;@&q0T&h&e_{`Edr$IA4Es}^3fxZEV8EUeN)jubTn!+q>RE%{m0f_6g zM8pw~!FsRR#Xi|5T=DQj(&_VpSN12KwOqC#C*V1+PaI33rwS4RVfS1Zq4z%aj1;8} zYKGN)=0^-P$K^|`kpULg)3-1;8AZ3K}qB+nTvUc4+KYkEg zqF2wRFU~?!SZFZ*oJ2w`CG|LHiqAl8h0AAV!|a^;bg`R6yR2c5xgyiRm`ydtv1fXUU^3`h+n?)Eavc!5zV21(|aCts;x0Z&!JD%3dX7SrP=g|qs3Qb zz52wk!D82?xb;!7di)tKBCLBkMhggMge@^3D6rS&8Ja2Ga@g(%atb$a?a*Xmvy8R? zi28}FnIsCbWfA%tO8ZMe`y}h+3>qJZYCs+$w3&LRugHI6G3kUM(bJ!xp?Eb9sFxu_ zk>n;3Ge9bjqq@342=|w?c_;L|UJZsTmgb2h)*VVj20{r$V175~v~TdlRtv@N zcw?;E|WZhOgtw1jPaY40_)6F91ceSDa?q~U~gQ$h}xpKp2U zgz?Oz;K1sj4t4R)>Ml;YB*0+O4O$s0*vh5JW_Lf9z&AnCe0ZsQ4TS#;e)=_@=i$JE zy6<@uJU6Pd`CJYeCK!0JiNy83H;zOAXmlM8jnF2=tiGi5OqhsT`}J(Quo79h*SkpX z!hMvg1)rH;#a|FJ1cU6jiA0&gSm7vJ#y^r<_=j|Bk2$#zTioL!ueEj7@*fCj?%zHo=zjUu2Zw+BM_=#x!pObO zZy2TS$6gk9K4sPpk+;9viTw1<&cFN+KD_ewT=!eu!ESqC@bCxcp6H(V#&3)Pd?uB6gWt#|XKzRr4@@7f_;RcK+0`O=oL-IKy)Ema7^DnbjdmsU={>Gs zb9u{uts$FxFE5Y>ay)OJ>6~$5S>LWbFY*=|BI++4Z>pEyB0G)K+LbBg5dpv5*h@8> zAd!6lSL*wG=|evGk&-jigvi(ZE!pYm#rN}CUd5B< z9Y#8u_L;lJBUhx#4YZs6KeB&rH^J|gaLPAADMRd7eqGimq!&KQ^CbybGvU2fEjzu%sT}+(U)?=6 zIqO*B{yMogm0h%=>xE#(?)W@*=lFs;X5G z--@|v7_n3%V!MiVz&PhUNR2nklVP$8L^ecK_>FpGx8R*^iMDQj==ALG@2!_V+)Avk zW_Rbk+J&RLp{0TcPe?2~@wZi1ga46Qh$|AgL?r#1<0sgYT zJ(*0;E#^1pR+eGUo@VK7->CvdYQeV(o=6faqQi}4-D2RDX-{)oYPqRmDfw%wt&YVz=RlTXP{g#S znj;K5yQ);kZAzQmg-!WC#X~W7z`1(+A)nesx8NRXpaK&gh8*-yrz7f{-o4=BN?2D@ z-&$c8Wm)ss($!3Bc{iA!h9erj-=0m$lYh|{4>AB(#6aK%Pq~dH+jTRTA*y#pg%$8$D@U=oWILCPtb+k} z13lNQ6tdcQ$eyW_sw@?~6??zZ)G7{U!?&`g*{UVx(=@8rYX4j)znX<=iTz9X-J9h9 zv7g5fizz+LkgOBvn*j^XT}1Wc6UhEZ0xp(nM74UW%P^mEk)n~SLGFg;<7t}17KoMt z*OC3_1~cqPrf~m#yjI>R4a^}$Z^g10zv@n$8sjUsgZYj7nB!7c0=A@9>Gp1Gj65csDJ~IuQ~NqSfpuwh6|P6B zT8S+j4+t3VFPJwCrbrM=#j}^M1+;FnHwEmo13$D1e^cxk(sd5{-v3sI|K9gI^ryeu z^Xc#Mhu^w$t>=%#pZ1*l<~KU3H}FpN50^XtZ@k#^AG=@a^cUPcmwxQ+{H%@lJp9&S z=bkg!b87REPX6OYNAcvp9{l2=V&}_oO%J(P>E^YW-PHB3UA*$0*5RK$c)IiQi~n@E z82atu{8Nt}UjOQF4-Re`ow`Ca6M4sJ2rZROW(>yMNzlQc?P6VOBW&`pBrs zGZ+tl@H}V&G`9qN;FYKM4O}&gD@^)&+ok(berSnO&;Qe45krzo1L|Qm)%%hLBi3~d zgCX{sRW-@J#uzlI6DPV!YMW7cux3HZl5rrCG+Toxneu)dntSeQ(|wk2YEpDfvv0IRnwM zQ(ES{Bv(rt!>=soS$m)12Ya;x(+NWI%6BhO$G+7{JZb!!=k^b3SKhT!e7ukDlHc7W zZcLNpV#Y%z)j;=$cSd^-Pp;oiDAz*$CdQ7Y|IZ(_a4u^FUcum)UBxo1v@jPph3OC@ zK&i)FRFYEVM}bLZ#{DPK@VTU}Pj3wc9St7z0uV?}Osl<@0F#GiFOJ$kUK=!vr@O8Y zI|;AL773kXO-9Fjs8}z@hS5s!g&Bb*Z`DgP)VN5Qw&Rl+q@h95Q(-ETU{zT@gMcHT zTgg7{Or|hm^yFn@95pGbojzl8%{((1Q8AeTsxl+Chq!=qMUGGL2LN@qnFPBpfPRqy zI35R);4bsLKQpdAXHmI?f@!nD?z*DjO0j7VW~TAeh{VQ5Y*x)yQJM?kTAQ=mjbeaQoIN2jsTq0$#2ubFGk4Pb7m67F%9+a? zn#zVOLJ~@k-k|qGqm&-8xSbO?rS#~;zG@17Za^o=`7~xWPk)(0%?ku#k5D~fl8jo; zOmS@zkfszOI+j=DCc7@#C?UWdQ+h;6iJ3VXjKOY=OFJVPcytIpKh9*%i7oa?wf=&6 z!-7n){Pbms&d!;5(`TP_2qv#+E(y(2rbjw~%>+Q)h%L22A?1G}KBra>{9bNIa-%kO zSgZ|X0p*MbR&ggq96wv_uKSIOIU|yc*zm68|f`s~NrK7U@s*C=a^ zG(yUlwftOFsqGJJPv%0;P4sem)pz9^G*j^zF%Wtqr6=TXW!2#Q&m$(ilcLUr#dI>1 zHA@h4ObwYo@c>qcZ_#?V=cQJG^k38iQMto;F(RI?68JO1o3Be#7>I=^T$Ii{BmWU| z$)J0dslH+wHH=JY_zs4a;hdM-zw#`EnvFg?htI>9s8wJPfN+~2Q~*n?2988##d%|! zNQ78AF1&Q)GMq`0CULrQOZ;^Uiy<-i9Y(WLCbO$_LLuRWs1bojD;v8S@F@3=vH