ปัจจุบัน e-conmmerce เฟื่องฟูมาก และผู้ที่ให้บริการจำหน่ายสินค้าผ่านช่องทาง online ต่างต้องการพัฒนา และปรับปรุงช่องทางของตนเองให้ตอบโจท์ลูกค้ามากขึ้น
อย่างเช่น ในหน้าค้นหาสินค้าเป็นต้น ถ้าลูกค้าต้องการจะค้นหาสินค้าโดยการ upload รูปสินค้าขึ้นไปที่หน้าเวปผู้ให้บริการ เราจะตอบโจทย์ตรงนี้อย่างไร
AWS ได้ให้บริการ AI service ชื่อ Amazon Rekognition ที่สามารถจะให้บริการการ detect object หรือ ใบหน้าของคน แล้วระบุว่า เป็นสินค้าอะไร, ใบหน้าของคนๆ เป็นชายหรือหญิง และมีความมั่นใจกี่ % ซึ่งตรงนี้เอง เราสามารถนำ service นี้มาใช้ในงานลักษณะแบบนี้ได้
การพัฒนา solution นี้ สามารถแบ่งออกเป็น 2 เฟส ได้แก่
- การนำเข้ารูปภาพสินค้าทั้งหมดเข้าระบบ เพื่อให้ Amazon Rekognition detect ข้อมูลต่างๆในรูป และทำการจัดเก็บข้อมูลดังกล่าวในฐานข้อมูล
- การนำรูปตัวอย่าง มาทำการค้นหาข้อมูลจากฐานข้อมูล และแสดงผลการค้นหาสินค้าที่คล้ายกัน หรือตรงกัน
สำหรับเนื้อหาในโพสนี้ จะมาทำเฟสแรกให้ดูกัน ไปกันเลยยยย...
Host machine : Mac BigSur 11.5.2
eclipse : Eclipse IDE for Enterprise Java and Web Developers Version: 2021-06 (4.20.0)
eclipse plugin : Amazon developer toolkit [optional]
AWS service : S3, Lambda, Rekognition and Elasticsearch
หมายเหตุ AWS developer toolkit จะ compatible อย่างสมบูรณ์ กับ eclipse ที่ใช้ java runtime 1.8
ขั้นตอนการทำ
Provision Amazon elasticsearch service
AWS Console -> Elasticsearch (ES)
ใส่ชื่อ cluster และเลือก dev mode จากนั้นเลือก internet access และเลือกโหมด authen ให้ใส่ username และ password
หลังจาก provision เสร็จเรียบร้อยแล้ว ให้ copy ES endpoint เพื่อไปแปะที่ source code
ทดสอบการใช้งานเบื้องต้นโดย browse ไปยัง endpoint ที่เรา copy มา จากนั้นใส่ username และ password ตอนที่เรา provision cluster
Create lambda function
ไปที่ฝั่ง lambda บ้าง เราต้องไปสร้าง lambda function ขึ้นมา แล้วเอา java far file ไป deploy
AWS Console -> Lambda -> create function
ใส่ชื่อ function lambda และ เลือก runtime เป็น Java 8
เพิ่มตัว trigger lambda คือ s3 ไว้ข้างหน้า function และเพิ่ม SNS alert ด้านหลัง function เราจะได้ไปดู error message ที่ email ได้ หรือเราไปดู error ผ่าน Cloudwatch log ก็ได้นะ
Configure lambda role ให้เรียบร้อย โดย role ต้องสามารถเข้าถึง S3 และ elasticsearch ได้
Develop Lambda function by using eclipse
เรามาเข้าสู่โหมด dev กัน ขั้นแรกเราต้องมีเครื่องมือในการเขียน lambda ก่อน lambda ที่เราจะเขียนนี้ จะถูกเรียกให้ทำงานโดยการถูก trigger โดย S3 กรณีที่มีการ upload รูปภาพขึ้นไป S3
lambda รองรับหลากหลายภาษา และหนึ่งในนั้นคือ java เพราะฉะนั้นเลยเลือกที่จะใช้ eclipse เป็น IDE tool
Download eclipse tool : https://www.eclipse.org/downloads/packages/
[Optional]จากนั้นลง Amazon developer toolkit plugin เข้าไปเพิ่มที่ eclipse วิธีลงตาม link ที่แปะให้เลย
https://aws.amazon.com/eclipse/
เมื่อลง aws plugin เรียบร้อยจะได้ ui จาก AWS ตามรูป
Download Source Code จาก Github
Download ตัวอย่าง source code จาก github แล้ว import Maven project ลงไปที่ eclipse
https://github.com/aomjk/rekognition-demo-orawanj
เปิด file LambdaFunctionHandler.java ให้แก้ ค่า value ของ aesEndpoint ให้ชี้ไปที่ ES endpoint ของเรา จากนั้นให้ save file
Build และ pack compile code เป็น jar fomat โดยไปที่ eclipse กด click ขวาที่ project -> เลือก Run As -> Maven build
Maven build configuration
หลังจากกด build โดยใช้ Maven tool แล้ว เราจะได้ jar file ออกมา
jar file ตัวนี้จะถูกนำไป deploy ลงบน lambda
Deploy java jar file ไปที่ function จะด้วยวิธีการ upload ตรงขึ้นไป หรือ ไปฝากไว้ที่ s3 ขึ้นอยู่ขนาดความใหญ่ของ file
[Optional]หรือสามารถใช้การ click ขวาที่ file folder แล้วเลือก Amazon Web Services และ Upload Function to lambda
Let's testing our solution
แหล่งที่มา Amazon.com
ต่อไปเรา upload รูปภาพนี้ลงไปที่ S3
และเราสามารถดู debugging เบื้องต้นได้จาก CloudWatch Log
จะเห็นได้ว่า Amazon Rekognition สามารถจำแนกรูปภาพได้ว่า เป็นเก้าอี้ เฟอร์นิเจอร์ และเป็นเก้าอี้ที่มีที่พักแขน และความมั่นใจกี่เปอร์ในแต่ละหัวข้อ
สุดท้ายเราสามารถไปดูข้อมูลที่ถูก insert เข้าไปที่ ES ได้ตามรูปข้างล่างเลย
ในบทสรุปของการทำ solution นี้คือ ความสามารถในการบันทึกข้อมูลที่ได้จากการใช้ Amazon Rekognition detecting label มาวิเคราะห์รูปภาพ โดยที่ข้อมูลที่ได้เป็นลักษณะ label ต่างๆ เช่น เก้าอี้ เฟอร์นิเจอร์ และความมั่นใจเป็นเปอร์เซ็นต์ที่คิดว่าเป็น เก้าอี้ และเฟอร์นิเจอร์กี่เปอร์เซ็นต์ ลงบันทึกลงใน Amazon Elasticsearch เพื่อใช้ในการค้นหาต่อไปได้
Top comments (1)
Good one!