Git Product home page Git Product logo

nsfw-webdnn's Introduction

This repository shows how to use Yahoo OpenNSFW pretrained model inside a browser to check user uploaded media.

TL;DR

To run the model inside a brower do as follows

git clone https://github.com/zaghaghi/nsfw-webdnn
cd nsfw-webdnn
emrun --no_browser --port 8081 .

Requirements

Emscripten

If you don't have emscripten install it as follows. You can read more about it here.

git clone https://github.com/emscripten-core/emsdk.git
cd emsdk
export EMSDKPATH=$(pwd)
./emsdk install latest
./emsdk activate latest

Webdnn

WebDNN is required if you need to use you own model instead of OpenNSFW.

conda create -p env python=3.6
source activate env/
pip install numpy setuptools chainer
git clone https://github.com/mil-tokyo/webdnn
cd webdnn
export WEBDNN=$(pwd)
python3 setup.py install
wget http://bitbucket.org/eigen/eigen/get/3.3.3.tar.bz2
tar jxf 3.3.3.tar.bz2
ln -s $(pwd)/eigen-eigen-67e894c6cd8f/Eigen $EMSDKPATH/emscripten/*/system/local/include

Convert OpenNSFW model

I used these commands to convert OpenNSFW pretrained model to WebDNN equivalent. You can read more about WebDNN supported models in their documentations

git clone https://github.com/yahoo/open_nsfw
cd open_nsfw/nsfw_model
python $WEBDNN/bin/convert_caffe.py  --input_name data --input_shape '(1,3,224,224)' --output_names fc_nsfw --out output resnet_50_1by2_nsfw.caffemodel

OpenNSFW Image Transformer

We should preprocess every image before feeding it into network. These lines are the preprocess section in OpenNSFW using caffe.

caffe_transformer = caffe.io.Transformer({'data': nsfw_net.blobs['data'].data.shape})
caffe_transformer.set_transpose('data', (2, 0, 1))  # move image channels to outermost
caffe_transformer.set_mean('data', np.array([104, 117, 123]))  # subtract the dataset-mean value in each channel
caffe_transformer.set_raw_scale('data', 255)  # rescale from [0, 1] to [0, 255]
caffe_transformer.set_channel_swap('data', (2, 1, 0))  # swap channels from RGB to BGR

And these lines are WebDNN equivalent which you can find in script.js

let image_array = await WebDNN.Image.getImageArray(img_src, {
    dstW: 224, dstH: 224,
    bias: [104, 117, 123],
    color: WebDNN.Image.Color.BGR,
    order: WebDNN.Image.Order.CHW,
});

How to server

You can serve this example using this command

emrun --no_browser --port 8081 .

or any other web server that set correct mimetype for webassembly files (.wasm). Note that python SimpleHTTPServer can't be used here because it returns incorrect mimetype for .wasm files, read here if you insist using python SimpleHTTPServer.

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.