1. วัตถุประสงค์
ภาพรวม
โค้ดแล็บนี้จะมุ่งเน้นที่การสร้างแอปพลิเคชัน Vertex AI Vision ตั้งแต่ต้นจนจบเพื่อส่งเหตุการณ์ด้วยฟีเจอร์การจัดการเหตุการณ์ เราจะใช้ฟีเจอร์ในตัวของข้อมูลวิเคราะห์อัตราการเข้าพักซึ่งเป็นโมเดลเฉพาะทางที่ผ่านการฝึกล่วงหน้าเพื่อสร้างเหตุการณ์ตามการบันทึกสิ่งต่อไปนี้
- นับจำนวนยานพาหนะและบุคคลที่ข้ามถนนในบางเส้น
- นับจํานวนยานพาหนะ/บุคคลในบริเวณใดก็ได้บนถนน
- ตรวจพบการคับคั่งในทุกส่วนของถนน
สิ่งที่คุณจะได้เรียนรู้
- วิธีส่งผ่านข้อมูลวิดีโอสำหรับการสตรีม
- วิธีสร้างแอปพลิเคชันใน Vertex AI Vision
- ฟีเจอร์ต่างๆ ที่มีอยู่ในข้อมูลวิเคราะห์อัตราการเข้าพักและวิธีใช้ฟีเจอร์เหล่านั้น
- วิธีทำให้แอปใช้งานได้
- วิธีค้นหาวิดีโอในพื้นที่เก็บข้อมูล Media Warehouse ของ Vertex AI Vision
- วิธีสร้างฟังก์ชันระบบคลาวด์ที่ประมวลผลข้อมูลโมเดลข้อมูลวิเคราะห์อัตราการเข้าพัก
- วิธีสร้างหัวข้อ Pub/Sub และการสมัครใช้บริการ
- วิธีตั้งค่าการจัดการเหตุการณ์เพื่อส่งเหตุการณ์ผ่านหัวข้อ Pub/Sub
2. ก่อนที่คุณจะเริ่มต้น
- ในคอนโซล Google Cloud ให้เลือกหรือสร้างโปรเจ็กต์ Google Cloud ในหน้าตัวเลือกโปรเจ็กต์ หมายเหตุ: หากไม่ต้องการเก็บทรัพยากรที่สร้างขึ้นในขั้นตอนนี้ ให้สร้างโปรเจ็กต์แทนการเลือกโปรเจ็กต์ที่มีอยู่ หลังจากทำตามขั้นตอนเหล่านี้แล้ว คุณจะลบโปรเจ็กต์ซึ่งเป็นการนำทรัพยากรทั้งหมดที่เชื่อมโยงกับโปรเจ็กต์นี้ออกได้ ไปที่เครื่องมือเลือกโปรเจ็กต์
- ตรวจสอบว่าเปิดใช้การเรียกเก็บเงินสำหรับโปรเจ็กต์ Cloud แล้ว ดูวิธีตรวจสอบว่าเปิดใช้การเรียกเก็บเงินในโปรเจ็กต์หรือไม่
- เปิดใช้ Compute Engine และ Vision AI API เปิดใช้ API
สร้างบัญชีบริการ
- ในคอนโซล Google Cloud ให้ไปที่หน้าสร้างบัญชีบริการ ไปที่ "สร้างบัญชีบริการ"
- เลือกโปรเจ็กต์
- ป้อนชื่อในช่องชื่อบัญชีบริการ คอนโซล Google Cloud จะกรอกข้อมูลในช่องรหัสบัญชีบริการโดยอิงตามชื่อนี้ กรอกคำอธิบายในช่องคำอธิบายบัญชีบริการ เช่น บัญชีบริการสําหรับการเริ่มต้นใช้งานอย่างรวดเร็ว
- คลิกสร้างและต่อไป
- หากต้องการให้สิทธิ์เข้าถึงโปรเจ็กต์ ให้มอบบทบาทต่อไปนี้ให้กับบัญชีบริการ Vision AI > Vision AI Editor, Compute Engine > Compute Instance Admin (เบต้า), Storage > Storage Object Viewer † เลือกบทบาทในรายการเลือกบทบาท หากต้องการเพิ่มบทบาท ให้คลิกเพิ่มบทบาทอื่น แล้วเพิ่มบทบาทเพิ่มเติมแต่ละบทบาท หมายเหตุ: ช่องบทบาทจะส่งผลต่อทรัพยากรที่บัญชีบริการเข้าถึงได้ในโปรเจ็กต์ คุณจะเพิกถอนบทบาทเหล่านี้หรือให้บทบาทเพิ่มเติมในภายหลังได้ ในสภาพแวดล้อมการใช้งานจริง อย่ามอบบทบาทเจ้าของ ผู้แก้ไข หรือผู้ดู แต่ให้มอบบทบาทที่กําหนดไว้ล่วงหน้าหรือบทบาทที่กําหนดเองที่ตรงกับความต้องการของคุณแทน
- คลิกต่อไป
- คลิกเสร็จสิ้นเพื่อสร้างบัญชีบริการให้เสร็จสมบูรณ์ อย่าปิดหน้าต่างเบราว์เซอร์ ซึ่งคุณจะต้องใช้ในขั้นตอนถัดไป
สร้างคีย์บัญชีบริการ
- ในคอนโซล Google Cloud ให้คลิกอีเมลของบัญชีบริการที่คุณสร้างขึ้น
- คลิกคีย์
- คลิกเพิ่มคีย์ แล้วคลิกสร้างคีย์ใหม่
- คลิกสร้าง ระบบจะดาวน์โหลดไฟล์คีย์ JSON ลงในคอมพิวเตอร์
- คลิกปิด
- ติดตั้งและเริ่มต้น Google Cloud CLI
† บทบาทจำเป็นเฉพาะเมื่อคุณคัดลอกไฟล์วิดีโอตัวอย่างจากที่เก็บข้อมูล Cloud Storage เท่านั้น
3. ส่งผ่านไฟล์วิดีโอสำหรับการสตรีม
คุณสามารถใช้ vaictl เพื่อสตรีมข้อมูลวิดีโอไปยังแอปวิเคราะห์อัตราการเข้าพักได้
เริ่มต้นด้วยการเปิดใช้งาน Vision AI API ใน Cloud Console
ลงทะเบียนสตรีมใหม่
- คลิกแท็บสตรีมในแผงด้านซ้ายของ Vertex AI Vision
- คลิก "ลงทะเบียน"
- ป้อน "traffic-stream" ในชื่อสตรีม
- ในภูมิภาค ให้ป้อน "us-central1"
- คลิก "ลงทะเบียน"
สตรีมจะใช้เวลาสักครู่ในการลงทะเบียน
เตรียมวิดีโอตัวอย่าง
- คุณคัดลอกวิดีโอตัวอย่างได้ด้วยคำสั่ง gsutil cp ต่อไปนี้ แทนที่ตัวแปรต่อไปนี้
- แหล่งที่มา: ตำแหน่งของไฟล์วิดีโอที่จะใช้ คุณสามารถใช้แหล่งที่มาของไฟล์วิดีโอของคุณเอง (เช่น gs://BUCKET_NAME/FILENAME.mp4) หรือใช้วิดีโอตัวอย่าง (gs://cloud-samples-data/vertex-ai-vision/street_vehicles_people.mp4 )(วิดีโอที่มีผู้คนและยานพาหนะ แหล่งที่มา)
export SOURCE=gs://cloud-samples-data/vertex-ai-vision/street_vehicles_people.mp4 gsutil cp $SOURCE .
ส่งผ่านข้อมูลไปยังสตรีม
- หากต้องการส่งไฟล์วิดีโอในเครื่องนี้ไปยังสตรีมอินพุตของแอป ให้ใช้คำสั่งต่อไปนี้ คุณต้องทำการแทนที่ตัวแปรต่อไปนี้
- PROJECT_ID: รหัสโครงการ Google Cloud
- LOCATION_ID: รหัสสถานที่ตั้งของคุณ เช่น us-central1 ดูข้อมูลเพิ่มเติมได้ที่ตำแหน่งระบบคลาวด์
- LOCAL_FILE: ชื่อไฟล์ของไฟล์วิดีโอในเครื่อง เช่น street_vehicles_people.mp4
- –flag loop: ไม่บังคับ วนข้อมูลไฟล์เพื่อจำลองการสตรีม
export PROJECT_ID=<Your Google Cloud project ID> export LOCATION_ID=us-central1 export LOCAL_FILE=street_vehicles_people.mp4
- คำสั่งนี้จะสตรีมไฟล์วิดีโอไปยังสตรีม หากใช้ Flag –loop ระบบจะเล่นวิดีโอซ้ำในสตรีมจนกว่าคุณจะหยุดคําสั่ง เราจะเรียกใช้คําสั่งนี้เป็นงานเบื้องหลังเพื่อให้สตรีมต่อไป
- ( เพิ่ม nohup ที่จุดเริ่มต้นและ "&" ที่จุดสิ้นสุดเพื่อให้เป็นงานเบื้องหลัง)
nohup vaictl -p $PROJECT_ID \ -l $LOCATION_ID \ -c application-cluster-0 \ --service-endpoint visionai.googleapis.com \ send video-file to streams 'traffic-stream' --file-path $LOCAL_FILE --loop &
ระบบอาจใช้เวลาประมาณ 100 วินาทีระหว่างที่เริ่มดำเนินการนำเข้าข้อมูลส่วนวิดีโอกับวิดีโอที่ปรากฏในแดชบอร์ด
หลังจากการส่งผ่านข้อมูลสตรีมพร้อมใช้งานแล้ว คุณจะดูฟีดวิดีโอในแท็บสตรีมของแดชบอร์ด Vertex AI Vision ได้โดยเลือกสตรีมสตรีมการเข้าชม
ดูภาพสดของวิดีโอที่นำเข้ามาในสตรีมในคอนโซล Google Cloud เครดิตวิดีโอ: Elizabeth Mavor จาก Pixabay (เพิ่มภาพแตกแบบพิกเซล)
4. สร้าง Cloud Function
เราต้องการ Cloud Function เพื่อสรุปข้อมูลของโมเดลและสร้างเหตุการณ์ที่จะส่งผ่านแชแนลเหตุการณ์ในภายหลัง
ดูข้อมูลเพิ่มเติมเกี่ยวกับ Cloud Functions ได้ที่นี่
สร้าง Cloud Function ที่ฟังโมเดลของคุณ
- ไปที่หน้าการสร้าง UI ของ Cloud Function
- ตั้งชื่อฟังก์ชันซึ่งจะใช้อ้างอิงถึงฟังก์ชันระบบคลาวด์นี้ในภายหลังในการตั้งค่าการจัดการเหตุการณ์
- ตรวจสอบว่าภูมิภาคตรงกับใบสมัครของคุณ
- ปรับแล้วบันทึกการตั้งค่าทริกเกอร์
- คลิกปุ่มถัดไปเพื่อไปยังส่วน "โค้ด"
- แก้ไขฟังก์ชันระบบคลาวด์ ต่อไปนี้คือตัวอย่างที่ใช้รันไทม์ Node.js
/**
* Responds to any HTTP request.
*
* @param {!express:Request} req HTTP request context.
* @param {!express:Response} res HTTP response context.
*/
exports.hello_http = (req, res) => {
// Logging statement can be read with cmd `gcloud functions logs read {$functionName}`.
// For more about logging, please see https://cloud.google.com/functions/docs/monitoring
// The processor output will be stored in req.body.
const messageString = constructMessage(req.body);
// Send your message to operator output with res HTTP response context.
res.status(200).send(messageString);
};
function constructMessage(data) {
/**
* Typically, your processor output should contains appPlatformMetadata & it's designed output.
* For example here, if your output is of tyoe OccupancyCountingPredictionResult, you will need
* to construct the return annotation as such.
*/
// access appPlatformMetat.
const appPlatformMetadata = data.appPlatformMetadata;
// access annotations.
const annotations = data.annotations.map(annotation => {
// This is a mock OccupancyCountingPredictionResult annotation.
return {"annotation" : {"track_info": {"track_id": "12345"}}};
});
const events = [];
for(const annotation of annotations) {
events.push({
"event_message": "Detection event",
"payload" : {
"description" : "object detected"
},
"event_id" : "track_id_12345"
});
}
/**
* Typically, your cloud function should return a string represent a JSON which has two fields:
* "annotations" must follow the specification of the target model.
* "events" should be of type "AppPlatformEventBody".
*/
const messageJson = {
"annotations": annotations,
"events": events,
};
return JSON.stringify(messageJson);
}
- คลิกปุ่ม "ทำให้ใช้งานได้" เพื่อทำให้ฟังก์ชันใช้งานได้
5. สร้างหัวข้อและการสมัครใช้บริการ Pub/Sub
เราจะต้องระบุหัวข้อ Pub/Sub ไปยังแอปพลิเคชันที่จะส่งกิจกรรมไปให้ หากต้องการรับเหตุการณ์ การสมัครใช้บริการ Pub/Sub ต้องสมัครใช้บริการออปติกที่กําหนดค่าไว้
ดูข้อมูลเพิ่มเติมเกี่ยวกับหัวข้อ Pub/Sub ได้ที่นี่ และการสมัครใช้บริการได้ที่นี่
สร้างหัวข้อ Pub/Sub
หากต้องการสร้างหัวข้อ Pub/Sub คุณสามารถใช้ gcloud CLI ดังนี้ (คุณควรแทนที่ SUBSCRIPTION_ID ด้วยค่าจริงจากการตั้งค่า)
gcloud pubsub topics create TOPIC_ID
อีกทางเลือกหนึ่งคือ คุณสามารถใช้ UI ของ Pub/Sub
สร้างการสมัครใช้บริการ Pub/Sub
หากต้องการสร้างการสมัครใช้บริการ Pub/Sub คุณสามารถใช้ gcloud CLI ดังนี้ (คุณควรแทนที่ SUBSCRIPTION_ID และ TOPIC_ID ด้วยค่าจริงจากการตั้งค่า)
gcloud pubsub subscriptions create SUBSCRIPTION_ID \ --topic=TOPIC_ID \
หรือจะใช้ UI ของ Pub/Sub ก็ได้
6. สร้างแอปพลิเคชัน
ขั้นตอนแรกคือการสร้างแอปที่ประมวลผลข้อมูล คุณอาจมองแอปเป็นไปป์ไลน์อัตโนมัติที่เชื่อมต่อสิ่งต่อไปนี้
- การนำเข้าข้อมูล: จะมีการส่งผ่านข้อมูลฟีดวิดีโอไปยังสตรีม
- การวิเคราะห์ข้อมูล: เพิ่มโมเดล AI(Computer Vision) ได้หลังจากการนำเข้า
- พื้นที่เก็บข้อมูล: ฟีดวิดีโอ 2 เวอร์ชัน (สตรีมต้นฉบับและสตรีมที่โมเดล AI ประมวลผล) สามารถจัดเก็บไว้ในคลังสื่อ
ในคอนโซล Google Cloud แอปจะแสดงเป็นกราฟ
สร้างแอปว่าง
คุณต้องสร้างแอปเปล่าก่อนจึงจะป้อนข้อมูลกราฟแอปได้
สร้างแอปในคอนโซล Google Cloud
- ไปที่คอนโซล Google Cloud
- เปิดแท็บ Applications ของแดชบอร์ด Vertex AI Vision
- คลิกปุ่มเพิ่ม Create
- ป้อน traffic-app เป็นชื่อแอป แล้วเลือกภูมิภาค
- คลิกสร้าง
เพิ่มโหนดคอมโพเนนต์แอป
หลังจากสร้างแอปพลิเคชันว่างแล้ว คุณสามารถเพิ่มโหนด 3 รายการลงในกราฟแอปได้ดังนี้
- โหนดการส่งผ่านข้อมูล: ทรัพยากรของสตรีมที่นำเข้าข้อมูล
- โหนดการประมวลผล: โมเดลการวิเคราะห์อัตราการเข้าพักที่ดำเนินการกับข้อมูลที่นำเข้า
- โหนดพื้นที่เก็บข้อมูล: คลังสื่อที่จัดเก็บวิดีโอที่ประมวลผลแล้วและทำหน้าที่เป็นที่เก็บข้อมูลเมตา ข้อมูลเมตาที่จัดเก็บประกอบด้วยข้อมูลวิเคราะห์เกี่ยวกับข้อมูลวิดีโอที่นำเข้า และข้อมูลที่อนุมานโดยโมเดล AI
เพิ่มโหนดคอมโพเนนต์ลงในแอปในคอนโซล
- เปิดแท็บแอปพลิเคชันของแดชบอร์ด Vertex AI Vision ไปที่แท็บแอปพลิเคชัน
- ในบรรทัดแอปการเข้าชม ให้เลือกดูกราฟ ซึ่งจะนำคุณไปยังการแสดงภาพกราฟของไปป์ไลน์การประมวลผล
เพิ่มโหนดการส่งผ่านข้อมูล
- หากต้องการเพิ่มโหนดสตรีมอินพุต ให้เลือกตัวเลือกสตรีมในส่วนคอนเนคเตอร์ของเมนูด้านข้าง
- ในส่วนแหล่งที่มาของเมนูสตรีมที่เปิดขึ้น ให้เลือกเพิ่มสตรีม
- ในเมนูเพิ่มสตรีม ให้เลือกลงทะเบียนสตรีมใหม่ แล้วเพิ่มสตรีมการเข้าชมเป็นชื่อสตรีม
- หากต้องการเพิ่มสตรีมลงในกราฟของแอป ให้คลิกเพิ่มสตรีม
เพิ่มโหนดการประมวลผลข้อมูล
- หากต้องการเพิ่มโหนดรูปแบบจํานวนผู้เข้าพัก ให้เลือกตัวเลือกข้อมูลวิเคราะห์อัตราการเข้าพักในส่วนรูปแบบเฉพาะของเมนูด้านข้าง
- เลือกผู้คนและยานพาหนะตามค่าเริ่มต้น
- เพิ่มเส้นใน "เส้นตัดกัน" ใช้เครื่องมือเส้นหลายจุดเพื่อวาดเส้นที่ต้องการตรวจจับรถยนต์หรือผู้คนที่ออกจากหรือเข้า
- วาดโซนตรวจจับเพื่อนับคน/ยานพาหนะในโซนนั้น
- เพิ่มการตั้งค่าสำหรับเวลาในการเข้าพักเพื่อตรวจหาความแออัดหากมีการวาดโซนตรวจจับกิจกรรม
- (ปัจจุบันระบบยังไม่รองรับทั้งโซนตรวจจับและเส้นที่ตัดกันพร้อมกัน ใช้ฟีเจอร์ได้ครั้งละ 1 รายการเท่านั้น)
เพิ่มโหนดพื้นที่เก็บข้อมูล
- หากต้องการเพิ่มโหนดปลายทางเอาต์พุต (พื้นที่เก็บข้อมูล) ให้เลือกตัวเลือกคลังสื่อของ Vertex AI Vision ในส่วนตัวเชื่อมต่อของเมนูด้านข้าง
- ในเมนูคลังสื่อของ Vertex AI Vision ให้คลิกเชื่อมต่อคลัง
- ในเมนูเชื่อมต่อคลังสินค้า ให้เลือกสร้างคลังสินค้าใหม่ ตั้งชื่อคลังสินค้าสำหรับการขนส่งคลังสินค้า และเว้นระยะเวลา TTL ไว้เป็น 14 วัน
- คลิกปุ่มสร้างเพื่อเพิ่มคลังสินค้า
7. กำหนดค่าการจัดการเหตุการณ์
ระยะเวลา 02:00
เราจะเชื่อมต่อโมเดลกับ Cloud Function ที่สร้างขึ้นก่อนหน้านี้เพื่อประมวลผลผลลัพธ์ ซึ่ง Cloud Function จะประมวลผลเอาต์พุตของโมเดลและสร้างเหตุการณ์ตามความต้องการของคุณได้อย่างอิสระ จากนั้นเราจะกำหนดค่าแชแนลของเหตุการณ์โดยกำหนดค่าหัวข้อ Pub/Sub ที่สร้างไว้ก่อนหน้านี้เป็นเป้าหมายของเรา นอกจากนี้ คุณยังกำหนดช่วงเวลาขั้นต่ำได้ ซึ่งจะช่วยป้องกันไม่ให้แชแนลเหตุการณ์มีเหตุการณ์เดียวกันเข้ามาจำนวนมากในช่วงเวลาสั้นๆ
เลือก Cloud Function สําหรับการประมวลผลหลังการขาย
- คลิกโหนดการประมวลผลข้อมูล(ข้อมูลวิเคราะห์อัตราการเข้าพัก) ในกราฟแอปพลิเคชันเพื่อเปิดเมนูด้านข้าง
- เลือก Cloud Function (ระบุตามชื่อฟังก์ชัน) ในเมนูแบบเลื่อนลงหลังการประมวลผล
- กราฟแอปพลิเคชันจะบันทึกการเปลี่ยนแปลงโดยอัตโนมัติ
กำหนดค่าแชแนลของเหตุการณ์
- คลิกโหนดการประมวลผลข้อมูล(ข้อมูลวิเคราะห์อัตราการเข้าพัก) ในกราฟแอปพลิเคชันเพื่อเปิดเมนูด้านข้าง
- คลิก "ตั้งค่าการแจ้งเตือนกิจกรรม" ในส่วนการแจ้งเตือนกิจกรรม
- เลือกหัวข้อ Pub/Sub ในเมนูแบบเลื่อนลง
- (ไม่บังคับ) ตั้งค่าช่วงเวลา/ความถี่ขั้นต่ำสำหรับการเผยแพร่เหตุการณ์
8. ทำให้แอปใช้งานได้
หลังจากสร้างแอปจากต้นทางถึงปลายทางด้วยคอมโพเนนต์ที่จําเป็นทั้งหมดแล้ว ขั้นตอนสุดท้ายในการใช้แอปคือการทําให้ใช้งานได้
- เปิดแท็บแอปพลิเคชันของแดชบอร์ด Vertex AI Vision ไปที่แท็บแอปพลิเคชัน
- เลือกดูกราฟข้างแอปการเข้าชมในรายการ
- จากหน้าเครื่องมือสร้างกราฟแอปพลิเคชัน ให้คลิกปุ่มทำให้ใช้งานได้
- ในกล่องโต้ตอบการยืนยันต่อไปนี้ ให้เลือกทำให้ใช้งานได้ การดำเนินการทำให้ใช้งานได้อาจใช้เวลาหลายนาทีจึงจะเสร็จสมบูรณ์ หลังจากการทําให้ใช้งานได้เสร็จสิ้นแล้ว เครื่องหมายถูกสีเขียวจะปรากฏข้างโหนด
9. ยืนยันเหตุการณ์/ข้อความในการสมัครใช้บริการ Pub/Sub
หลังจากส่งผ่านข้อมูลวิดีโอไปยังแอปประมวลผลแล้ว Cloud Function ควรสร้างเหตุการณ์เมื่อโมเดลข้อมูลวิเคราะห์อัตราการเข้าพักแสดงคำอธิบายประกอบ จากนั้นเหตุการณ์เหล่านั้นควรเผยแพร่เป็นข้อความผ่านหัวข้อ Pub/Sub และรับโดยการสมัครใช้บริการ
ขั้นตอนต่อไปนี้จะถือว่าคุณมีการสมัครใช้บริการแบบดึงข้อมูล
- เปิดรายการการสมัครใช้บริการ Pub/Sub ในโปรเจ็กต์และค้นหาการสมัครใช้บริการที่เกี่ยวข้อง ไปที่หน้ารายการการสมัครใช้บริการ Pub/Sub
- ไปที่แท็บ "ข้อความ"
- คลิกปุ่ม "ดึง"
- ดูข้อความในตาราง
นอกจากนี้ คุณยังดูวิธีรับข้อความโดยไม่ใช้ UI ได้ ไปที่หน้าการสมัครใช้บริการ
10. ขอแสดงความยินดี
ยินดีด้วย คุณทำแล็บเสร็จแล้ว
ล้างข้อมูล
เพื่อหลีกเลี่ยงไม่ให้เกิดการเรียกเก็บเงินกับบัญชี Google Cloud สำหรับทรัพยากรที่ใช้ในบทแนะนำนี้ โปรดลบโปรเจ็กต์ที่มีทรัพยากรดังกล่าวหรือเก็บโปรเจ็กต์ไว้และลบทรัพยากรแต่ละรายการ
ลบโปรเจ็กต์
ลบทรัพยากรแต่ละรายการ
แหล่งข้อมูล
https://cloud.google.com/vision-ai/docs/overview
https://cloud.google.com/vision-ai/docs/occupancy-count-tutorial
ความคิดเห็น
คลิกที่นี่เพื่อแสดงความคิดเห็น