1. วัตถุประสงค์
ภาพรวม
Codelab นี้จะมุ่งเน้นที่การสร้างแอปพลิเคชัน Vertex AI Vision แบบครบวงจรเพื่อส่งเหตุการณ์ด้วยฟีเจอร์การจัดการเหตุการณ์ เราจะใช้ฟีเจอร์ในตัวของโมเดลเฉพาะทางที่ฝึกไว้ล่วงหน้า Occupancy analytics เพื่อสร้างเหตุการณ์ตามการจับภาพสิ่งต่อไปนี้
- นับจำนวนยานพาหนะและผู้ที่ข้ามถนนที่เส้นหนึ่งๆ
- นับจำนวนยานพาหนะ/บุคคลในพื้นที่คงที่ของถนน
- ตรวจพบการจราจรติดขัดในส่วนใดส่วนหนึ่งของถนน
สิ่งที่คุณจะได้เรียนรู้
- วิธีส่งผ่านข้อมูลวิดีโอสำหรับการสตรีม
- วิธีสร้างแอปพลิเคชันใน 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 จะกรอกข้อมูลในช่องรหัสบัญชีบริการตามชื่อนี้ ป้อนคำอธิบายในช่องคำอธิบายบัญชีบริการ เช่น บัญชีบริการสำหรับ Quickstart
- คลิกสร้างและต่อไป
- หากต้องการให้สิทธิ์เข้าถึงโปรเจ็กต์ ให้มอบบทบาทต่อไปนี้ให้กับบัญชีบริการ Vision AI > ผู้แก้ไข Vision AI, Compute Engine > ผู้ดูแลอินสแตนซ์ Compute (เบต้า), พื้นที่เก็บข้อมูล > ผู้ดูออบเจ็กต์พื้นที่เก็บข้อมูล † เลือกบทบาทในรายการเลือกบทบาท หากต้องการเพิ่มบทบาทอื่น ให้คลิกเพิ่มบทบาทอื่น แล้วเพิ่มบทบาทเพิ่มเติมแต่ละบทบาท หมายเหตุ: ช่องบทบาทจะส่งผลต่อทรัพยากรที่บัญชีบริการเข้าถึงได้ในโปรเจ็กต์ คุณเพิกถอนบทบาทเหล่านี้หรือให้บทบาทเพิ่มเติมได้ในภายหลัง ดังนั้นในสภาพแวดล้อมการใช้งานจริง อย่าให้บทบาทเจ้าของ ผู้แก้ไข หรือผู้ดู แต่ให้มอบบทบาทที่กำหนดไว้ล่วงหน้าหรือบทบาทที่กำหนดเองที่ตรงกับความต้องการแทน
- คลิกต่อไป
- คลิกเสร็จสิ้นเพื่อสร้างบัญชีบริการให้เสร็จสมบูรณ์ อย่าปิดหน้าต่างเบราว์เซอร์ คุณจะต้องใช้รหัสนี้ในขั้นตอนถัดไป
สร้างคีย์บัญชีบริการ
- ในคอนโซล Google Cloud ให้คลิกอีเมลของบัญชีบริการที่คุณสร้างขึ้น
- คลิกคีย์
- คลิกเพิ่มคีย์ แล้วคลิกสร้างคีย์ใหม่
- คลิกสร้าง ระบบจะดาวน์โหลดไฟล์คีย์ JSON ลงในคอมพิวเตอร์
- คลิกปิด
- ติดตั้งและเริ่มต้นใช้งาน Google Cloud CLI
† คุณต้องมีบทบาทนี้ก็ต่อเมื่อคัดลอกไฟล์วิดีโอตัวอย่างจากที่เก็บข้อมูล Cloud Storage
3. ส่งผ่านข้อมูลไฟล์วิดีโอสำหรับการสตรีม
คุณใช้ vaictl เพื่อสตรีมข้อมูลวิดีโอไปยังแอปวิเคราะห์การเข้าพักได้
เริ่มต้นด้วยการเปิดใช้งาน Vision AI API ใน Cloud Console
ลงทะเบียนสตรีมใหม่
- คลิกแท็บสตรีมในแผงด้านซ้ายของ Vertex AI Vision
- คลิกลงทะเบียน
- ป้อน "traffic-stream" ในชื่อสตรีม
- ป้อน "us-central1" ในภูมิภาค
- คลิกลงทะเบียน
ระบบจะใช้เวลา 2-3 นาทีในการลงทะเบียนสตรีม
เตรียมวิดีโอตัวอย่าง
- คุณสามารถคัดลอกวิดีโอตัวอย่างได้ด้วยคำสั่ง gsutil cp ต่อไปนี้ แทนที่ตัวแปรต่อไปนี้
- SOURCE: ตำแหน่งของไฟล์วิดีโอที่จะใช้ คุณสามารถใช้แหล่งที่มาของไฟล์วิดีโอของคุณเอง (เช่น 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
- -loop flag: ไม่บังคับ วนซ้ำข้อมูลไฟล์เพื่อจำลองการสตรีม
export PROJECT_ID=<Your Google Cloud project ID> export LOCATION_ID=us-central1 export LOCAL_FILE=street_vehicles_people.mp4
- คำสั่งนี้จะสตรีมไฟล์วิดีโอไปยังสตรีม หากใช้แฟล็ก –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 วินาทีระหว่างการเริ่มการดำเนินการส่งผ่านข้อมูล vaictl กับการปรากฏของวิดีโอในแดชบอร์ด
หลังจากที่การส่งผ่านข้อมูลไลฟ์สดพร้อมใช้งานแล้ว คุณจะดูฟีดวิดีโอได้ในแท็บไลฟ์สดของแดชบอร์ด Vertex AI Vision โดยเลือกไลฟ์สดการจราจร
ดูวิดีโอที่กำลังส่งไปยังสตรีมในคอนโซล Google Cloud แบบเรียลไทม์ เครดิตวิดีโอ: Elizabeth Mavor ใน Pixabay (เพิ่มการแตกพิกเซล)
4. สร้าง Cloud Function
เราจะต้องมี Cloud Function เพื่อประมวลผลข้อมูลของโมเดลและสร้างเหตุการณ์ที่จะส่งผ่านช่องทางเหตุการณ์ในภายหลัง
ดูข้อมูลเพิ่มเติมเกี่ยวกับ Cloud Functions ได้ที่นี่
สร้าง Cloud Function ที่รับฟังโมเดล
- ไปที่หน้าสร้าง UI ของ Cloud Functions
- ตั้งชื่อฟังก์ชัน ซึ่งจะใช้ในภายหลังเพื่ออ้างอิงถึง 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 Console แอปจะแสดงเป็นกราฟ
สร้างแอปเปล่า
ก่อนที่จะสร้างกราฟแอป คุณต้องสร้างแอปที่ว่างเปล่าก่อน
สร้างแอปในคอนโซล Google Cloud
- ไปที่คอนโซล Google Cloud
- เปิดแท็บแอปพลิเคชันของแดชบอร์ด Vertex AI Vision
- คลิกปุ่มเพิ่ม Create
- ป้อน traffic-app เป็นชื่อแอป แล้วเลือกภูมิภาค
- คลิกสร้าง
เพิ่มโหนดคอมโพเนนต์ของแอป
หลังจากสร้างแอปพลิเคชันที่ว่างเปล่าแล้ว คุณจะเพิ่ม 3 โหนดลงในกราฟแอปได้
- โหนดการส่งผ่านข้อมูล: แหล่งข้อมูลสตรีมที่ส่งผ่านข้อมูล
- โหนดการประมวลผล: โมเดลข้อมูลวิเคราะห์การเข้าพักที่ดำเนินการกับข้อมูลที่นำเข้า
- โหนดพื้นที่เก็บข้อมูล: คลังสื่อที่จัดเก็บวิดีโอที่ประมวลผลแล้ว และทำหน้าที่เป็นที่เก็บข้อมูลเมตา ที่เก็บข้อมูลเมตาประกอบด้วยข้อมูลวิเคราะห์เกี่ยวกับข้อมูลวิดีโอที่นำเข้า และข้อมูลที่โมเดล AI อนุมาน
เพิ่มโหนดคอมโพเนนต์ลงในแอปในคอนโซล
- เปิดแท็บแอปพลิเคชันของแดชบอร์ด Vertex AI Vision ไปที่แท็บแอปพลิเคชัน
- ในบรรทัดการเข้าชมแอป ให้เลือกดูกราฟ การดำเนินการนี้จะนำคุณไปยังการแสดงภาพกราฟของไปป์ไลน์การประมวลผล
เพิ่มโหนดการนำเข้าข้อมูล
- หากต้องการเพิ่มโหนดสตรีมอินพุต ให้เลือกตัวเลือกสตรีมในส่วนตัวเชื่อมต่อของเมนูด้านข้าง
- ในส่วนแหล่งที่มาของเมนูสตรีมที่เปิดขึ้น ให้เลือกเพิ่มสตรีม
- ในเมนูเพิ่มสตรีม ให้เลือกลงทะเบียนสตรีมใหม่ แล้วตั้งชื่อสตรีมเป็น traffic-stream
- หากต้องการเพิ่มสตรีมลงในกราฟแอป ให้คลิกเพิ่มสตรีม
เพิ่มโหนดการประมวลผลข้อมูล
- หากต้องการเพิ่มโหนดโมเดลการนับการเข้าพัก ให้เลือกตัวเลือกข้อมูลวิเคราะห์การเข้าพักในส่วนโมเดลเฉพาะทางของเมนูด้านข้าง
- ปล่อยให้การเลือกเริ่มต้นเป็นผู้คนและยานพาหนะ
- เพิ่มเส้นใน "การข้ามเส้น" ใช้เครื่องมือเส้นหลายจุดเพื่อวาดเส้นในตำแหน่งที่คุณต้องการตรวจจับรถยนต์หรือผู้คนเข้าหรือออก
- วาดโซนที่ใช้งานอยู่เพื่อนับคน/ยานพาหนะในโซนนั้น
- เพิ่มการตั้งค่าเวลาในการเข้าชมเพื่อตรวจหาความหนาแน่นหากมีการวาดโซนที่ใช้งานอยู่
- (ขณะนี้ระบบยังไม่รองรับการตรวจจับการบุกรุกพื้นที่และการตรวจจับการข้ามเส้นพร้อมกัน ใช้ได้ครั้งละ 1 ฟีเจอร์เท่านั้น)


เพิ่มโหนดที่เก็บข้อมูล
- หากต้องการเพิ่มโหนดปลายทางเอาต์พุต (ที่เก็บข้อมูล) ให้เลือกตัวเลือก Media Warehouse ของ Vertex AI Vision ในส่วนตัวเชื่อมต่อของเมนูด้านข้าง
- ในเมนูคลังสื่อของ Vertex AI Vision ให้คลิกเชื่อมต่อคลัง
- ในเมนูเชื่อมต่อคลัง ให้เลือกสร้างคลังใหม่ ตั้งชื่อการรับส่งข้อมูลคลังสินค้าเป็น warehouse และปล่อยให้ระยะเวลา 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
ความคิดเห็น
คลิกที่นี่เพื่อแสดงความคิดเห็น