Skip to content

Commit 7fc8087

Browse files
author
Eugen Cepoi
committed
Improve perfs: global model and use of gevent to support more requests
1 parent af5a136 commit 7fc8087

File tree

3 files changed

+20
-15
lines changed

3 files changed

+20
-15
lines changed

Dockerfile

+1-1
Original file line numberDiff line numberDiff line change
@@ -62,4 +62,4 @@ WORKDIR /opt/web
6262

6363
# Run the app. CMD is required to run on Heroku
6464
# $PORT is set by Heroku
65-
CMD gunicorn --timeout 360 --bind 0.0.0.0:$PORT app:app
65+
CMD gunicorn --timeout 360 --bind 0.0.0.0:$PORT -k gevent --worker-connections 32 app:app

requirements.txt

+1
Original file line numberDiff line numberDiff line change
@@ -2,3 +2,4 @@ gunicorn
22
Flask
33
Jinja2
44
Werkzeug
5+
gevent

web/app.py

+18-14
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,24 @@
77
import classify_nsfw
88

99

10+
def make_transformer(nsfw_net):
11+
# Load transformer
12+
# Note that the parameters are hard-coded for best results
13+
transformer = caffe.io.Transformer({'data': nsfw_net.blobs['data'].data.shape})
14+
transformer.set_transpose('data', (2, 0, 1)) # move image channels to outermost
15+
transformer.set_mean('data', np.array([104, 117, 123])) # subtract the dataset-mean value in each channel
16+
transformer.set_raw_scale('data', 255) # rescale from [0, 1] to [0, 255]
17+
transformer.set_channel_swap('data', (2, 1, 0)) # swap channels from RGB to BGR
18+
19+
return transformer
20+
21+
22+
nsfw_net = caffe.Net(
23+
"/opt/open_nsfw/nsfw_model/deploy.prototxt",
24+
"/opt/open_nsfw/nsfw_model/resnet_50_1by2_nsfw.caffemodel",
25+
caffe.TEST
26+
)
27+
caffe_transformer = make_transformer(nsfw_net)
1028
app = Flask(__name__)
1129

1230

@@ -48,12 +66,6 @@ def single_classify():
4866

4967

5068
def classify_from_urls(image_entries):
51-
nsfw_net = caffe.Net(
52-
"/opt/open_nsfw/nsfw_model/deploy.prototxt",
53-
"/opt/open_nsfw/nsfw_model/resnet_50_1by2_nsfw.caffemodel",
54-
caffe.TEST
55-
)
56-
5769
for e in image_entries:
5870
yield classify_from_url(e, nsfw_net)
5971

@@ -80,14 +92,6 @@ def classify_from_url(image_entry, nsfw_net):
8092

8193

8294
def classify(image_data, nsfw_net):
83-
# Load transformer
84-
# Note that the parameters are hard-coded for best results
85-
caffe_transformer = caffe.io.Transformer({'data': nsfw_net.blobs['data'].data.shape})
86-
caffe_transformer.set_transpose('data', (2, 0, 1)) # move image channels to outermost
87-
caffe_transformer.set_mean('data', np.array([104, 117, 123])) # subtract the dataset-mean value in each channel
88-
caffe_transformer.set_raw_scale('data', 255) # rescale from [0, 1] to [0, 255]
89-
caffe_transformer.set_channel_swap('data', (2, 1, 0)) # swap channels from RGB to BGR
90-
9195
# Classify.
9296
scores = classify_nsfw.caffe_preprocess_and_compute(
9397
image_data,

0 commit comments

Comments
 (0)