+5
-2
cleanup.py
+5
-2
cleanup.py
···
18
18
and limitations under the License.
19
19
"""
20
20
21
-
import os, sys, time, datetime
21
+
import os
22
+
import sys
23
+
import time
24
+
import datetime
22
25
from fhost import app
23
26
24
27
os.chdir(os.path.dirname(sys.argv[0]))
···
33
36
for f in files:
34
37
stat = os.stat(f)
35
38
systime = time.time()
36
-
age = datetime.timedelta(seconds = systime - stat.st_mtime).days
39
+
age = datetime.timedelta(seconds=(systime - stat.st_mtime)).days
37
40
38
41
maxage = mind + (-maxd + mind) * (stat.st_size / maxs - 1) ** 3
39
42
+25
-12
nsfw_detect.py
+25
-12
nsfw_detect.py
···
24
24
from io import BytesIO
25
25
from subprocess import run, PIPE, DEVNULL
26
26
27
-
os.environ["GLOG_minloglevel"] = "2" # seriously :|
28
27
import caffe
28
+
29
+
os.environ["GLOG_minloglevel"] = "2" # seriously :|
30
+
29
31
30
32
class NSFWDetector:
31
33
def __init__(self):
32
34
33
35
npath = os.path.join(os.path.dirname(__file__), "nsfw_model")
34
-
self.nsfw_net = caffe.Net(os.path.join(npath, "deploy.prototxt"),
35
-
os.path.join(npath, "resnet_50_1by2_nsfw.caffemodel"),
36
-
caffe.TEST)
37
-
self.caffe_transformer = caffe.io.Transformer({'data': self.nsfw_net.blobs['data'].data.shape})
38
-
self.caffe_transformer.set_transpose('data', (2, 0, 1)) # move image channels to outermost
39
-
self.caffe_transformer.set_mean('data', np.array([104, 117, 123])) # subtract the dataset-mean value in each channel
40
-
self.caffe_transformer.set_raw_scale('data', 255) # rescale from [0, 1] to [0, 255]
41
-
self.caffe_transformer.set_channel_swap('data', (2, 1, 0)) # swap channels from RGB to BGR
36
+
self.nsfw_net = caffe.Net(
37
+
os.path.join(npath, "deploy.prototxt"),
38
+
os.path.join(npath, "resnet_50_1by2_nsfw.caffemodel"),
39
+
caffe.TEST)
40
+
self.caffe_transformer = caffe.io.Transformer({
41
+
'data': self.nsfw_net.blobs['data'].data.shape
42
+
})
43
+
# move image channels to outermost
44
+
self.caffe_transformer.set_transpose('data', (2, 0, 1))
45
+
# subtract the dataset-mean value in each channel
46
+
self.caffe_transformer.set_mean('data', np.array([104, 117, 123]))
47
+
# rescale from [0, 1] to [0, 255]
48
+
self.caffe_transformer.set_raw_scale('data', 255)
49
+
# swap channels from RGB to BGR
50
+
self.caffe_transformer.set_channel_swap('data', (2, 1, 0))
42
51
43
52
def _compute(self, img):
44
53
image = caffe.io.load_image(BytesIO(img))
···
54
63
55
64
input_name = self.nsfw_net.inputs[0]
56
65
output_layers = ["prob"]
57
-
all_outputs = self.nsfw_net.forward_all(blobs=output_layers,
58
-
**{input_name: transformed_image})
66
+
all_outputs = self.nsfw_net.forward_all(
67
+
blobs=output_layers, **{input_name: transformed_image})
59
68
60
69
outputs = all_outputs[output_layers[0]][0].astype(float)
61
70
···
63
72
64
73
def detect(self, fpath):
65
74
try:
66
-
ff = run(["ffmpegthumbnailer", "-m", "-o-", "-s256", "-t50%", "-a", "-cpng", "-i", fpath], stdout=PIPE, stderr=DEVNULL, check=True)
75
+
ff = run([
76
+
"ffmpegthumbnailer", "-m", "-o-", "-s256", "-t50%", "-a",
77
+
"-cpng", "-i", fpath
78
+
], stdout=PIPE, stderr=DEVNULL, check=True)
67
79
image_data = ff.stdout
68
80
except:
69
81
return -1.0
···
71
83
scores = self._compute(image_data)
72
84
73
85
return scores[1]
86
+
74
87
75
88
if __name__ == "__main__":
76
89
n = NSFWDetector()