2022. 10. 20. 14:42ㆍDevelop/Javascript
개요
한국어로는 후방주의 ㅎㅂ) 이런식으로 혼자있을때가 아닌 경우 음란물이 있을 수 있으니 주의하라는 의미로 많이 사용하는 용어인데, 영어로는 nsfw(not safe for work) 라고 표현합니다.
nsfwjs는 Tensorflow의 JS버전인 tfjs를 사용하여 mobile net 버전의 모델을 사용해서 client side에서 성인 이미지를 판별하는 오픈소스입니다.
하지만 첫 페이지 접근시 모델을 불러오는 속도가 굉장히 느립니다.
이 문제를 해결하기 위해서 저는 nsfwjs의 코드가 그리많지 않았고, Tensorflow js를 사용하는것을 확인해서 TFJS WASM 버전으로 직접 만들게 되었습니다.
Demo
그래서 이게 뭔데?
서버 없이 Javascript 만 사용해서, 성인 이미지를 판별할 수 있는 코드 입니다.
문제점
하지만 tfjs wasm을 사용했을때는 첫 페이지 접근시 메인스레드에 영향은 없지만, 첫 호출시에는 모델을 로드할때 nsfwjs 와 마찬가지로 메인스레드에 부하가 심해, 브라우저가 멈추는 현상이 있습니다.
이 시간이 짧으면 괜찮지만, 사양에 따라서 2~7초 정도 소요되었는데 이걸 개선하기 위해 Web Worker를 사용하여 백그라운드 스레드를 이용해 메인스레드에 영향이 없도록 개선하는 방법을 착안했습니다.
결과
NSFWJS와 비교했을때 약간의 오차가 있기는 하지만, 이미지를 판별하는데 있어서는 문제가 될 정도는 아닙니다.
메인스레드와도 오차가 있기는 한데 그것도 판별하는데 있어서 문제가 될 정도의 수치는 아닙니다.
카카오 비전 성인 이미지 판별 API와 비교했을때는 더이상 모델 학습을 안하는지 생각보다 좋은 결과를 주지 못합니다.
또한 adult 점수만 매기기 때문에, 굉장히 애매모호합니다.
무료인데 서버도 없이 이렇게 판단할 수 있다는 것은 굉장히 강력하다고 생각됩니다.
또 누군가에게는 반드시 필요로 할 것이라 생각해서 오픈소스로 공개합니다.
해당 코드는 아래에서 확인하실 수 있습니다.
기호에 맞게 Hentai, Porn, Drawing, Sexy, Neutral 문구를 변경해서 사용하시면 됩니다.
https://gist.github.com/YankeeTube/ee96f60f57b9038ee0b703fc6620e7d9
'Develop > Javascript' 카테고리의 다른 글
AI 이미지 프롬프트 추출 Browser JavaScript 기반 (0) | 2022.12.05 |
---|---|
NSFW.JS 를 빠르게 사용하기 (0) | 2022.12.05 |
Nuxt.js Google Adsense 오류 없이 연동 하기 (0) | 2021.04.14 |
AWS - Nuxt.js SSR Super Lightweight Deploy with github actions (0) | 2021.04.13 |
AWS - Nuxt.js SSR Super Lightweight Deploy(초 경량화 배포)! (0) | 2021.04.12 |