本專案為一使用Tensorflow等ML技術進行不當圖片之過濾,並透過Django架設Web Server以RESTFUL方式進行API開發,採三階段目標進行。
第一階段 - 使用ML套件進行圖片判斷並透由Django輸出API,並使用Docker compose包裝
第二階段 - 加入權限機制,並能管理圖片檔案,API可透過Nginx協調達到多工處理效果
第三階段 - 資料庫紀錄以及分析完成自動學習機制,以因應未成功過濾之圖片,並優化效能、提升容錯能力
Ubuntu (18.04)
Docker (18.09.7, build 2d0083d)
Docker Compose (1.25.0-rc2, build 661ac20e)
以下為Docker以及Docker Compose會自動安裝
Python (3.6.8)
Django (2.2.6)
Django-Rest-Framework (3.10.3)
uWSGI (2.0.18)
Nginx (1.14.0 (Ubuntu))
nginx+uWSGI Dockerized Version
更改nsfw_run.sh權限
啟動services
./nsfw_run.sh run -i ##表示要啟動的container數量
停止services
./nsfw_run.sh stop 停止所有的services
Debug services
./nsfw_run.sh debug -i ##表示要啟動的container數量
Ctrl + C to exit services
清除所有掛載出來的api#-container(#表示container-index)文件夾
./nsfw_run.sh clear -i ##表示container數量
查看命令幫助
run和debug都會把之前的containers全部關掉
訪問http://{{domain}}/container/{{container_index}}/admin/
每一個container都有自己的admin,通過相對應的container_index來訪問不同的admin backstage
比如http://{{domain}}/container/1/admin/ 可以訪問第一個container
賬戶密碼的設定在api/create_admin.py
在admin刪掉entry後,server上對應media裡面的圖片也會刪掉
Threshold:
x < 0.6 : SFW
0.6 <= x < 0.7 : 人工處理
x >= 0.7 : NSFW
Method
POST
Route
https://{baseuri}/api/nsfw
Request Body
連結
Response Model
連結
Key
Required
Type
Description
file
required
Mixed
base64,img url,binary file
type
required
String
傳輸圖片的格式
name
required
String
若使用Form Data方法時圖片的欄位名稱,預設為file
user_id
required
String
用戶ID,預設為null
Key
Format
Description
data
object
NSFW物件
success
boolean
Was the request successful
status
integer
HTTP Status Code
{
"file": "https://i.imgur.com/AD3MbBi.jpg",
"type": "url",
"name": "Yourname",
"user_id": "001"
}
{
"file": "yourimagepath/",
"type": "image",
"name": "Yourname",
"user_id": "001"
}
{
"file": "data:image/jpeg;base64,/9j/4AAQSkZ...",
"type": "base64",
"name": "Yourname",
"user_id": "001"
}