python NSFW Model 图片识别鉴黄 后面更新视频检测
基于 NSFW Model 图片识别鉴黄 后面更新视频检测
识别效果
推荐SFW 0.98 色情 NSFW 0.015
推荐SFW 0.00 色情 NSFW 0.99 为色情图片
环境条件
所有代码都应该与Python 3.6and兼容Tensorflow 1.x(用 1.12 测试)。模型实现可以在 中找到model.py
作者python环境
Python 3.6.13 :: Anaconda, Inc.
pip list
absl-py==1.1.0
astor==0.8.1
cached-property==1.5.2
certifi==2021.5.30
cycler==0.11.0
dataclasses==0.8
decorator==4.4.2
gast==0.5.3
grpcio==1.46.3
h5py==3.1.0
imageio==2.15.0
importlib-metadata==4.8.3
Keras-Applications==1.0.8
Keras-Preprocessing==1.1.2
kiwisolver==1.3.1
Markdown==3.3.7
matplotlib==3.3.4
networkx==2.5.1
numpy==1.16.2
Pillow==8.4.0
protobuf==4.21.0
pyparsing==3.0.9
python-dateutil==2.8.2
PyWavelets==1.1.1
scikit-image==0.17.2
scipy==1.5.4
six==1.16.0
tensorboard==1.12.2
tensorflow==1.12.0
termcolor==1.1.0
tifffile==2020.9.3
typing_extensions==4.1.1
Werkzeug==2.0.3
wincertstore==0.2
zipp==3.6.0
安装依赖
方法 1.
pip install tensorflow== 1.12
pip installnumpy==1.16.2
pip install scikit-image==0.17.2
方法 2.
pip install -r requirements.txt
使用方法
这里注意一下只支持.jpg类型图片
python classify_nsfw.py -m data/open_nsfw-weights.npy data/test.jpg
SFW score推荐比例 , NSFW score 不推荐比例
Results for 'test.jpg'
SFW score: 0.9355766177177429
NSFW score: 0.06442338228225708
视频或者图片批量检测
python python http_nsfw.py
POST请求 http://127.0.0.1:2200/?token=aid.sd5@ns85
///图片格式///
{
"temp_path":"C:/Users/lijie/Desktop/新-短视频/视频分割检测/66/",
"type":"image",
"valve":0.8,
"src":[
"http://aliyuncs.com/image/2022-06/16/I1nfUPElFH6oz8ux.jpeg",
"http://aliyuncs.com/image/2022-06/16/OGCVPdDnV1wLdTn9.png"
]
}
//视频格式//
{
"temp_path":"C:/Users/lijie/Desktop/新-短视频/视频分割检测/66/",
"type":"video",
"valve":0.8,
"src":"http://aliyuncs.com/image/2022-06/16/OGCVPd.mp4"
}
返回信息
{
"isViolation": false, //是否涩情
"tNsfw": "0.07921311259269714",
"tsfw": "0.9207869172096252"
}
##http_nsfw.py 代码
#!/usr/bin/env python
import sys
import argparse
import tensorflow as tf
from model import OpenNsfwModel, InputType
from image_utils import create_tensorflow_image_loader
from image_utils import create_yahoo_image_loader
from pathlib import Path
import subprocess
import os
import numpy as np
from flask import request
from flask import jsonify
from flask import Flask
import json
from flask import jsonify
import urllib.request
class main(object):
def __init__(self):
self.model =''
self.sess =''
def test(self):
print(666)
def model_load(self, weights=""):
model = OpenNsfwModel()#创建加载NSF模型
input_type = InputType['TENSOR'] #模型类型 [InputType.TENSOR.name.lower(), InputType.BASE64_JPEG.name.lower()])
model.build(weights_path=weights, input_type=input_type)
self.model = model;
print('模型加载OK')
self.sess =tf.Session() #创建对象
self.sess.run(tf.global_variables_initializer())
def distinguish(self,input_file):
fn_load_image = None
fn_load_image = create_yahoo_image_loader() #创建雅虎图片加载器
image = fn_load_image(input_file)
predictions = \
self.sess.run(self.model.predictions,
feed_dict={self.model.input: image}) #识别
# print("Results for '{}'".format(args.input_file))
# print("\tSFW score:\t{}\n\tNSFW score:\t{}".format(*predictions[0]))
return {"tSFW":predictions[0][0],
"tNSFW":predictions[0][1]}
# if __name__ == "__main__":
def save_image(video_path, image_dir, fps):
#文件夹创建
if not os.path.exists(image_dir):
os.makedirs(image_dir)
#-vf scale=320:240
cmd_str = f'ffmpeg -i {video_path} -f image2 -r {fps} {image_dir}/%d.jpeg -loglevel quiet '
subprocess.run(cmd_str, encoding="utf-8" , shell=True)
app = Flask(__name__)
@app.route('/', methods=['POST'])
def distinguish():
token = request.values.get("token")
if token != 'aid.sd5@ns85': #token
return '403'
params = json.loads(request.data)
try:
# 不能确定正确执行的代码
params = json.loads(request.data) # 将json字符串转为dict
except:
return '405 参数错误'
distinguish = '';
is_violation = False;
#视频识别
if params['type'] == 'video':
#视频进行抽针处理
save_image(params['src'],params['temp_path'],1)#保存帧数1
# os.listdir()方法获取文件夹名字,返回数组
file_name_list = os.listdir(params['temp_path'])
for index,img in enumerate(file_name_list):
img_str = params['temp_path'] img
distinguish = Model.distinguish(img_str)
if distinguish['tNSFW'] > params['valve']:
is_violation = True
break
returnData = {
"tsfw":f"{distinguish['tSFW']}",
"tNsfw":f"{distinguish['tNSFW']}",
"isViolation":is_violation
}
return jsonify(returnData);
#图片识别
if params['type'] == 'image':
#文件夹创建
if not os.path.exists(params['temp_path']):
os.makedirs(params['temp_path'])
n = 0#用来计数或命名
for img in params['src']:
n = 1
img_url = params['temp_path'] "%s.jpeg" % n
urllib.request.urlretrieve(img, img_url)#保存图片到本地
distinguish = Model.distinguish(img_url)
if distinguish['tNSFW'] > params['valve']:
is_violation = True
break
returnData = {
"tsfw":f"{distinguish['tSFW']}",
"tNsfw":f"{distinguish['tNSFW']}",
"isViolation":is_violation
}
return jsonify(returnData);
return "Ok"
if __name__ == '__main__':
Model = main()
Model.model_load("data/open_nsfw-weights.npy")
app.run(host='0.0.0.0', port=2200, debug=False)
出现错误
caffe: TypeError: _open() got an unexpected keyword argument ‘as_grey‘
“as_grey” 实际应当修改为 “as_gray”,原因是 scikit-image 的 0.17.2 版本修改了参数名称
ValueError: Object arrays cannot be loaded when allow_pickle=False
自Numpy 1.16.3版本发行之后,函数 numpy.load() 和 numpy.lib.format.read_array() 采用allow_pickle关键字,现在默认为False以响
pip install numpy=1.16.2
Note: Currently only jpeg images are supported.
classify_nsfw.py
accepts some optional parameters you may want to play around with:
usage: classify_nsfw.py [-h] -m MODEL_WEIGHTS [-l {yahoo,tensorflow}]
[-t {tensor,base64_jpeg}]
input_jpeg_file
positional arguments:
input_file Path to the input image. Only jpeg images are
supported.
optional arguments:
-h, --help show this help message and exit
-m MODEL_WEIGHTS, --model_weights MODEL_WEIGHTS
Path to trained model weights file
-l {yahoo,tensorflow}, --image_loader {yahoo,tensorflow}
image loading mechanism
-i {tensor,base64_jpeg}, --input_type {tensor,base64_jpeg}
input type
-l/–image-loader
The classification tool supports two different image loading mechanisms.
yahoo
(default) replicates yahoo’s original image loading and preprocessing. Use this option if you want the same
results as with the original implementationtensorflow
is an image loader which uses tensorflow exclusively (no dependencies onPIL
,skimage
, etc.). Tries
to replicate the image loading mechanism used by the original caffe implementation, differs a bit though due to
different jpeg and resizing implementations.
See this issue for details.
Note: Classification results may vary depending on the selected image loader!
-i/–input_type
Determines if the model internally uses a float tensor (tensor
- [None, 224, 224, 3]
- default) or a base64 encoded
string tensor (base64_jpeg
- [None, ]
) as input. If base64_jpeg
is used, then the tensorflow
image loader will
be used, regardless of the -l/–image-loader argument.
Tools
The tools
folder contains some utility scripts to test the model.
create_predict_request.py
Takes an input image and generates a json file suitable for prediction requests to a Open NSFW Model deployed
with Google Cloud ML Engine (gcloud ml-engine predict
)
or tensorflow-serving.
export_savedmodel.py
Exports the model using the tensorflow serving export api (SavedModel
). The export can be used to deploy the model
on Google Cloud ML Engine
, Tensorflow Serving or on mobile (haven’t tried that one yet).
export_tflite.py
Exports the model in TFLite format. Use this one if you want to run inference on
mobile or IoT devices. Please note that the base64_jpeg
input type does not work with TFLite since the standard
runtime lacks a number of required tensorflow operations.
export_graph.py
Exports the tensorflow graph and checkpoint. Freezes and optimizes the graph per default for improved inference and
deployment usage (e.g. Android, iOS, etc.). Import the graph with tf.import_graph_def
.
这篇好文章是转载于:学新通技术网
- 版权申明: 本站部分内容来自互联网,仅供学习及演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,请提供相关证据及您的身份证明,我们将在收到邮件后48小时内删除。
- 本站站名: 学新通技术网
- 本文地址: /boutique/detail/tanhfhifgi
-
photoshop保存的图片太大微信发不了怎么办
PHP中文网 06-15 -
《学习通》视频自动暂停处理方法
HelloWorld317 07-05 -
Android 11 保存文件到外部存储,并分享文件
Luke 10-12 -
word里面弄一个表格后上面的标题会跑到下面怎么办
PHP中文网 06-20 -
photoshop扩展功能面板显示灰色怎么办
PHP中文网 06-14 -
微信公众号没有声音提示怎么办
PHP中文网 03-31 -
excel下划线不显示怎么办
PHP中文网 06-23 -
excel打印预览压线压字怎么办
PHP中文网 06-22 -
怎样阻止微信小程序自动打开
PHP中文网 06-13 -
TikTok加速器哪个好免费的TK加速器推荐
TK小达人 10-01