點擊▲關注 “爪哇筆記” 給公衆號標星置頂
更多精彩 第一時間直達
前言
最近某雲審查的比較嚴,圖牀上的內容也無奈關閉了,有興趣的小夥伴可以使用炒雞工具箱自行搭建。今兒跟大家分享一下之前自建鑑黃服務的流程順便分享一下相關源碼。
圖牀架構
鑑黃流程
代碼案例
建議有一定的Linux、Java、Python、TensorFlow、Docker
基礎。
使用Java
調用Python
腳本,當然你也可以自己搭建一個基於Python
的Web
服務:
// yellowPath 腳本存放位置,後面會講到
@Value("${yellow.path}")
private String yellowPath;
/**
* 自家庫鑑黃
* @param imagePath 作爲參數供Python腳本使用
* @return
*/
public String check(String imagePath) {
String[] arguments = new String[] {"python3",yellowPath,imagePath};
String classes = "";
try {
String line = null;
Process process = Runtime.getRuntime().exec(arguments);
BufferedReader in = new BufferedReader(new InputStreamReader(process.getInputStream(),"GBK"));
while ((line = in.readLine()) != null) {
System.out.println(line);
classes = line;
}
in.close();
int re = process.waitFor();
System.out.println(re);
} catch (Exception e) {
e.printStackTrace();
}
return classes;
}
處理圖片的Python
腳本,請自行安裝各種依賴庫:
import sys
import json
import requests
from PIL import Image
import numpy as np
_IMAGE_SIZE = 64
# TensorFlow-serving 調用地址,這裏要替換成自己的,後面會講到如何安裝
SERVER_URL = 'http://172.17.0.2:8501/v1/models/image:predict'
_LABEL_MAP = {0: 'drawings', 1: 'hentai', 2: 'neutral', 3: 'porn', 4: 'sexy'}
def standardize(img):
mean = np.mean(img)
std = np.std(img)
img = (img - mean) / std
return img
# 導入
def load_image(image_path):
img = Image.open(image_path)
img = img.resize((_IMAGE_SIZE, _IMAGE_SIZE))
img.load()
data = np.asarray(img, dtype="float32")
data = standardize(data)
data = data.astype(np.float16, copy=False)
return data
# 分析
def nsfw_predict(image_data):
pay_load = json.dumps({"inputs": [image_data.tolist()]})
response = requests.post(SERVER_URL, data=pay_load)
data = response.json()
outputs = data['outputs']
predict_result = {"classes": _LABEL_MAP.get(outputs['classes'][0])}
predict_result['probabilities'] = {_LABEL_MAP.get(i): l for i, l in enumerate(outputs['probabilities'][0])}
return predict_result
if __name__ == '__main__':
image_data = load_image(sys.argv[1])
predict = nsfw_predict(image_data)
print(predict)
這裏我們直接使用TensorFlow
的 TensorFlow-serving
對外提供服務,爲了安裝方便,我們使用Docker
安裝部署。
docker run -d --rm -p 8501:8501 \
--name nsfw \
-e MODEL_NAME=nsfw \
tensorflow/serving
可以通過以下命令查看容器IP地址:
docker inspect nsfw
複製模型數據(閱讀原文獲取)到容器:
docker cp /home/nsfw/data/models/ nsfw:/models/image
進入容器:
docker exec -it nsfw /bin/bash
啓動服務:
tensorflow_model_server --port=8500 --rest_api_port=8501 --model_name=image --model_base_path=/models/image
隨便找一張圖片,執行腳本,如出現以下內容說明配置成功:
[root@VM_0_5_centos python]# python3 yellow.py /home/python/6.jpg
{'classes': 'sexy', 'probabilities': {'drawings': 0.0134889195, 'hentai': 0.00636488385, 'neutral': 0.0619314834, 'porn': 0.20824486, 'sexy': 0.709969819}}
小結
自己搭建的香歸香,但還是覺得UCloud
免費的鑑黃接口更香!!!
源碼
https://gitee.com/52itstyle/SPTools
▲掃一掃進羣交流,期待與你一起進步
有興趣的小夥伴們可以閱讀原文獲取項目源碼,如果覺得不錯可以給個小星星,有什麼好的意見和建議也都使勁扔過來吧。
你點的每個在看,我都認真當成了喜歡