UNPKG

isadult

Version:

Machine learning algorithm written in JS to check if an image contains adult content

1 lines 1.58 kB
(()=>{const a=q=>{const s="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789";let t="";for(let u=0;u<q;u++)t+=s.charAt(Math.floor(Math.random()*s.length));return t},b=new Promise(q=>{const s=document.createElement("script");s.src="https://unpkg.com/ml5@0.1.1/dist/ml5.min.js",s.id=a(7),document.body.appendChild(s),q(s.id)}),d=()=>new Promise(q=>{const t=setInterval(()=>{ml5&&(clearInterval(t),q())},1e3)}),f=async q=>{const s=await b,t=document.getElementById(s);t||o(`Could not load dynamic script into the HTML`);let u;try{await d(),u=await ml5.imageClassifier("MobileNet")}catch(v){o(`Failed to load the ml5 classifier module`)}try{return u.predict(q)}catch(v){o(`This image could not be parsed.`)}},g=1,h=2,j=3,k={[g]:"No risk",[h]:"Medium risk. It is recommended to manually check this image",[j]:"High risk. This image is being flagged to most likely be an adult image"},l=["tank suit","bathing trunks","swimming trunks","sarong","sunscreen","sunblock","sun blocker","diaper","nappy","napkin","miniskirt","dumbbell","plunger","plumber's helper"],m=["bikini","two-piece","maillot","brassiere","bandeau","balance beam","beam","punching bag","punch bag","punching ball","punchball"],n=q=>({status:q,msg:k[q]}),o=q=>{throw new Error(`Image classifier: ${q}`)},p=(q,s)=>0<q.filter(t=>s.includes(t)).length;window.checkAdultImage=async q=>{const s=await f(q),t=s.map(u=>u.className.split(", ")).reduce((u,v)=>[...u,...v],[]);return p(t,m)?n(j):p(t,l)?n(h):n(g)},Object.assign(window.checkAdultImage,{NO_RISK_STATUS:g,MEDIUM_RISK_STATUS:h,HIGH_RISK_STATUS:j})})();