ความเป็นจริงที่มี ผู้ใช้อินเทอร์เน็ตประมาณ 4.54 พันล้านคน (มิถุนายน 2563) ทั่วโลกสร้างปริมาณเนื้อหาที่ไม่เคยเกิดขึ้นมาก่อนจะเพิ่มความต้องการในการหาแนวทางในการเพิ่มประสิทธิภาพการควบคุมเนื้อหา และงานนี้เริ่มหนักขึ้นโดยข้อเท็จจริงที่ว่าจำนวนผู้ใช้ที่ใช้งานอยู่อย่างต่อเนื่องปริมาณเนื้อหาก็เพิ่มขึ้นแบบทวีคูณการเรียนรู้ของเครื่องและ AI อาจมีราคาแพงมากและการกลั่นกรองด้วยตนเองนั้นใช้เวลานานและล่าช้าในเวลา
ดังนั้นตอนนี้เราอยู่ในจุดที่แพลตฟอร์มใด ๆ ที่อนุญาตให้เนื้อหาที่ผู้ใช้สร้างขึ้นกำลังเผชิญกับปัญหาที่คล้ายกัน โชคดีที่การเรียนรู้ของเครื่องได้ครบกำหนดแล้วจนถึงจุดที่ความก้าวหน้าในการประมวลผลคอมพิวเตอร์การจัดเก็บข้อมูลเครื่องมือข้อมูลเว็บและเทคโนโลยีการเรียนรู้ของเครื่องทำให้มีราคาไม่แพงมากขึ้นเรื่อย ๆ สิ่งนี้และความมุ่งมั่นอย่างต่อเนื่องสำหรับนวัตกรรมทีมของ Sashido เพื่อสร้าง บริการการกลั่นกรองเนื้อหาที่เรียบง่ายและสง่างามนี้ที่สร้างขึ้นด้วยเครื่องมือและห้องสมุดโอเพนซอร์ซเท่านั้น ประกอบด้วย สามองค์ประกอบหลัก - การจำแนกภาพ REST API, เอ็นจิ้นระบบอัตโนมัติและแผงผู้ดูแลระบบซึ่งสามารถรวมกันแยกกันหรือทั้งหมดลงในโครงการ Parse Server Node.js และโฮสต์ได้ทุกที่
Illustartion ง่าย ๆ ของแผงผู้ดูแลระบบเดสก์ท็อปและมือถือของเรา ตรวจสอบการสาธิตเต็มรูปแบบที่นี่
ภาพที่แสดงเพื่อการอนุมัติที่แอพผู้ดูแลระบบเป็นภาพที่ถูกตั้งค่าสถานะสำหรับการกลั่นกรองด้วยตนเองจากเอ็นจิ้นระบบอัตโนมัติตามเกณฑ์เฉพาะของคุณ
นี่คือตัวอย่างของวิธีการที่รูปภาพจากชั้นเรียนเฉพาะถูกจำแนกโดยส่วนที่เหลือ API
| แหล่งถ่ายภาพ | แหล่งถ่ายภาพ | แหล่งถ่ายภาพ |
|---|---|---|
| ผลการจำแนกประเภท | ผลการจำแนกประเภท | ผลการจำแนกประเภท |
- "classname": "เป็นกลาง" "ความน่าจะเป็น": 0.93821 - "classname": "การวาด", "ความน่าจะเป็น": 0.05473 - "classname": "เซ็กซี่", "ความน่าจะเป็น": 0.00532 - "classname": "Hentai", "ความน่าจะเป็น": 0.00087 - "classname": "สื่อลามก", "ความน่าจะเป็น": 0.00085 - | - "classname": "เซ็กซี่", "ความน่าจะเป็น": 0.99394 - "classname": "เป็นกลาง" "ความน่าจะเป็น": 0.00432 - "classname": "สื่อลามก", "ความน่าจะเป็น": 0.00164 - "classname": "การวาด", "ความน่าจะเป็น": 0.00006 - "classname": "Hentai", "ความน่าจะเป็น": 0.00001 - | - "classname": "การวาด", "ความน่าจะเป็น": 0.96063 - "classname": "เป็นกลาง" "ความน่าจะเป็น": 0.03902 - "classname": "Hentai", "ความน่าจะเป็น": 0.00032 - "classname": "เซ็กซี่", "ความน่าจะเป็น": 0.00001 - "classname": "สื่อลามก", "ความน่าจะเป็น": 0.00005 - |
| การสาธิตเป็นกลาง | การสาธิตเซ็กซี่ | การวาดตัวอย่าง |
บริการนี้สร้างขึ้นใน Node.js พร้อม Mongo DB และ Parse Server คุณสามารถใช้มันในแอพ Express มาตรฐาน แต่โปรดทราบว่าโครงสร้างไฟล์ของ repo นั้นแยกวิเคราะห์เฉพาะ รหัสถูกจัดระเบียบในโฟลเดอร์ src และ src/cloud/main.js เป็นไฟล์รูทสำหรับบริการ React Vizualization Logic วางตามลำดับในโฟลเดอร์ scr/react
REST API ทำงานร่วมกับการจำแนกประเภท NSFW.JS ซึ่งใช้โมเดล TensorFlow ที่ผ่านการฝึกอบรมมาก่อน เมื่อได้รับ URL มันจะส่งคืนการคาดการณ์ว่าภาพจะตกอยู่ในแต่ละชั้นเรียนได้อย่างไร - การวาด, เป็นกลาง, เซ็กซี่, สื่อลามกและโพสต์ รายละเอียดเพิ่มเติมเกี่ยวกับตรรกะที่อยู่เบื้องหลังและใช้สแต็กคุณสามารถค้นหาได้ในโพสต์บล็อกนี้
API เสนอสองวิธีในการจำแนกรูปภาพ - จากเส้นทางด่วนหรือโดยตรงจากฟังก์ชั่นรหัสเมฆโดยใช้ Parse SDK หรือ Parse REST API
จำแนกจากจุดสิ้นสุดด่วน
curl http://localhost:1337/api/image/classify?url=https://nsfw-demo.sashido.io/sexy.png
จำแนกจากฟังก์ชัน NSFWimageClASsify CLOUD CODE - ตัวอย่าง REST API
curl -X POST
-H "X-Parse-Application-Id: myAppId"
-H "X-Parse-REST-API-Key: myRestApiKey"
--data-urlencode "{"url":"https://nsfw-demo.sashido.io/sexy.png"}"
http://localhost:1337/functions/nsfwImageClassify
จุดประสงค์ของเอ็นจิ้นระบบอัตโนมัติคือการตรวจสอบว่าการจำแนกประเภทของภาพบางภาพสอดคล้องกับพารามิเตอร์ที่คุณตั้งไว้นั้นปลอดภัยสำหรับโครงการของคุณอย่างไร กระบวนการนี้เป็นไปโดยอัตโนมัติด้วยทริกเกอร์เซิร์ฟเวอร์แบบแยกวิเคราะห์
ในการเริ่มต้นมันเป็นสิ่งสำคัญที่จะกำหนดคลาสใดในห้าคลาส NSFW และค่าที่สามารถมีรูปภาพที่เป็นพิษและปลอดภัย ชั้นเรียนทั้งหมดที่อาจรบกวนผู้ชมของคุณควรรวมอยู่ในการตั้งค่าการกลั่นกรอง
เพื่อแสดงให้เห็นว่าแนวคิดและการตั้งค่าคืออะไรลองจินตนาการว่าเราจำเป็นต้องกำหนดเกณฑ์สำหรับแอพหาคู่ของผู้ใหญ่ ในฐานะแอพหาคู่ใด ๆ ผู้ใช้มีรูปโปรไฟล์และได้รับอนุญาตให้อัปโหลดรูปภาพที่แตกต่างกัน เราสามารถสมมติว่าประเภทของภาพถ่ายควรเป็นกลางเป็นหลัก ... และอาจอนุญาตให้มีรูปเซ็กซี่บางอย่างได้เช่นกัน ดังนั้นเราจะเพิ่มคลาสอื่น ๆ ทั้งหมดในการตั้งค่าการกลั่นกรองของเรา บางอย่างชอบ:
{
"Sexy": { "min": 0.6, "max": 1 },
"Drawing": { "min": 0.5, "max": 0.8 },
"Porn": { "min": 0.4, "max": 0.8 },
"Hentai": { "min": 0.2, "max": 0.8 }
}
เอ็นจิ้นระบบอัตโนมัติจะส่งภาพทั้งหมดที่จัดประเภทไว้เหนือขีด จำกัด max ที่กำหนดไว้ในการตั้งค่าของเราและอนุมัติทั้งหมดที่ต่ำกว่าค่า min
รายละเอียดเพิ่มเติมเกี่ยวกับวิธีปรับแต่งพารามิเตอร์สำหรับโครงการของคุณที่คุณสามารถค้นหาได้ในบทความที่นี่
การตั้งค่าการกลั่นกรองจะถูกบันทึกลงใน พารามิเตอร์การกำหนดค่าการควบคุม สำหรับแอปพลิเคชันการผลิตซึ่งจะช่วยให้คุณสามารถแก้ไขได้ทันทีหากจำเป็น
ทริกเกอร์ Aftersave จะถูกเชื่อมต่อกับคอลเลกชันที่ผู้ใช้สร้างขึ้นตรวจสอบภาพถ่ายที่อัปโหลดใหม่โดยอัตโนมัติและทำเครื่องหมายว่าปลอดภัยถูกลบหรือสำหรับการกลั่นกรอง Aftersafe มีตรรกะสำหรับการจับคู่วิธีการจำแนกประเภท API ของภาพที่สอดคล้องกับการกำหนดค่าการแก้ไขที่กำหนดไว้ จากข้อมูลทั้งหมดที่ผ่านการตัดสินใจจะทำและผลลัพธ์จะถูกบันทึกลงในฐานข้อมูลของคุณ
เพื่อให้บันทึกการคาดการณ์ REST API และผลลัพธ์ของเอ็นจิ้นระบบอัตโนมัติอย่างประณีตคุณจะต้อง เพิ่มคอลัมน์สองสามคอลัมน์ลงในคอลเลกชันฐานข้อมูลของคุณที่เก็บเนื้อหาที่ผู้ใช้สร้างขึ้น
คุณควรเพิ่มคอลัมน์ต่อไปนี้ในผู้ใช้งาน
min ของการตั้งค่าการกลั่นกรองของคุณจะมีการทำเครื่องหมาย isSafe - truedeleted - true รูปภาพเหล่านั้นจะไม่ถูกลบโดยอัตโนมัติจากที่เก็บไฟล์ไฟคลื่นไฟโดยอัตโนมัติ แต่เราได้เพิ่มจุดสิ้นสุดของ API เพิ่มเติมในกรณีที่คุณต้องการตรวจสอบด้วยตนเองว่าภาพเป็นพิษต่อผู้ชมของคุณหรือไม่
curl http://YOUR_PARSE_SERVER_URL/api/image/is_safe?url=https://nsfw-demo.sashido.io/sexy.png
การสัมผัสสุดท้ายคือแอปพลิเคชั่นผู้ดูแลระบบที่ใช้ ReactJS ธรรมดา มีคุณสมบัติการเข้าสู่ระบบ/ล็อกอินอย่างง่ายและผู้ดูแลที่ได้รับอนุมัติเท่านั้นที่ได้รับอนุญาตให้เข้าถึงได้
รูปภาพที่ถูกตั้งค่าสถานะโดยเอ็นจิ้นระบบอัตโนมัติเป็น moderationRequired=true จะแสดงลงในแอพ เราได้ตรวจสอบให้แน่ใจว่าได้สร้างส่วนต่อประสานกับผู้ใช้เดสก์ท็อปและมือถือที่เป็นมิตรกับมือถือดังนั้นคุณสามารถอนุมัติหรือปฏิเสธภาพได้อย่างง่ายดายแม้จากโทรศัพท์ของคุณขณะเดินทาง
ทดสอบด้วยตัวเองเล่นกับภาพในการสาธิตของเรา!
node.js> = 10.2.1
DB Mongo
เซิร์ฟเวอร์แยกวิเคราะห์
โคลน repo:
git clone https://github.com/SashiDo/content-moderation-application.git
cd content-moderation-application
คัดลอกไฟล์ env.example ไปยัง. ENV และตั้งค่าตัวแปรสภาพแวดล้อมสำหรับสภาพแวดล้อมในท้องถิ่นของคุณด้วยตัวแก้ไขที่คุณชื่นชอบ:
cp env.example .env
วาง URL MongoDB และไฟล์ URL ของคุณ หากแอปของคุณโฮสต์ที่ Sashido คุณสามารถใช้ข้อมูลรับรองของโครงการ Sashido ของคุณ คุณสามารถค้นหาคีย์และ URL ทั้งหมดได้ที่แผงควบคุมของแอพ -> การตั้งค่าแอป
NB ในการโหลดภาพที่ต้องใช้การกลั่นกรองด้วยตนเองในแอปพลิเคชันผู้ดูแลระบบในเครื่องคุณจะต้องวาง APP_ID จริงด้วย!
เนื่องจากนี่เป็นตัวอย่างเต็มรูปแบบการพึ่งพาทั้งหมดจึงมีอยู่ใน package.json คุณต้องวิ่งเท่านั้น:
npm install
npm run dev
ตั้งค่า parse.configs ต่อไปนี้สำหรับเซิร์ฟเวอร์การผลิตของคุณ
วัตถุ ModerationsCores ควรบันทึกเป็น parse.config ดังนั้นการตั้งค่าสามารถอัปเดตได้ทันที
ตัวเลือก ModerationAutomation ของประเภทบูลีนที่อนุญาตให้เปิด/ปิดการใช้งานระบบการกลั่นกรองเนื้อหาอัตโนมัติ
สำหรับการผลิตคุณต้องตั้ง ค่า URL รุ่น NSFW ขนาดรูปร่างของโมเดล NSFW และตัวแปรสำหรับ การตั้งค่าการแคชอัตโนมัติ
| URL รุ่น | ขนาด | ขนาดรูปร่าง | ความแม่นยำ |
|---|---|---|---|
| https://ml.files-sashido.cloud/models/nsfw_inception_v3/ | ใหญ่ | 299 | 93% |
| https://ml.files-sashido.cloud/models/nsfw_mobilenet_v2/90/ | 2.6 MB | 224 | 90% |
| https://ml.files-sashido.cloud/models/nsfw_mobilenet_v2/93/ | 4.2 MB | 224 | 93% |
โปรดทราบโมเดล Inception_v3 ที่ใช้สำหรับโครงการนี้มีการบริโภค RAM/CPU สูง ในขณะที่ทั้งสองรุ่น Mobilenet มีน้ำหนักเบากว่ามาก
TF_MODEL_URL = MODEL_URL
TF_MODEL_INPUT_SHAPE_SIZE = MODEL_SHAPE_SIZE
CONFIG_CACHE_MS = CONFIG_CAHE_IN_MILISECONDS
# Example
TF_MODEL_URL = " https://ml.files-sashido.cloud/models/nsfw_mobilenet_v2/93/ "
TF_MODEL_INPUT_SHAPE_SIZE = 224
CONFIG_CACHE_MS = 10000เชื่อมต่อแอพ Sashido ของคุณกับ GitHub และถัดไปรหัสสามารถปรับใช้ได้อย่างง่ายดายด้วยคำสั่งง่ายๆสองคำสำหรับการเพิ่มสาขาระยะไกลและผลักดันการเปลี่ยนแปลง
git remote add production [email protected]:parsegroundapps/<your-pg-app-your-app-repo>.git
git push -f production master
ขอบคุณที่ดูส่วนนี้ เราเปิดรับแนวคิดที่ยอดเยี่ยมดังนั้นหากคุณมีและยินดีที่จะแบ่งปัน - แยก repo ใช้การเปลี่ยนแปลงและเปิดคำขอดึง -
ลิขสิทธิ์© 2020, โฆษณา CloudStrap ดูใบอนุญาตสำหรับรายละเอียดเพิ่มเติม