DEV Community

Orawan Juprapattasri for AWS Community ASEAN

Posted on

Detect photo label by using Amazon Rekognition - part 1

ปัจจุบัน e-conmmerce เฟื่องฟูมาก และผู้ที่ให้บริการจำหน่ายสินค้าผ่านช่องทาง online ต่างต้องการพัฒนา และปรับปรุงช่องทางของตนเองให้ตอบโจท์ลูกค้ามากขึ้น
อย่างเช่น ในหน้าค้นหาสินค้าเป็นต้น ถ้าลูกค้าต้องการจะค้นหาสินค้าโดยการ upload รูปสินค้าขึ้นไปที่หน้าเวปผู้ให้บริการ เราจะตอบโจทย์ตรงนี้อย่างไร

AWS ได้ให้บริการ AI service ชื่อ Amazon Rekognition ที่สามารถจะให้บริการการ detect object หรือ ใบหน้าของคน แล้วระบุว่า เป็นสินค้าอะไร, ใบหน้าของคนๆ เป็นชายหรือหญิง และมีความมั่นใจกี่ % ซึ่งตรงนี้เอง เราสามารถนำ service นี้มาใช้ในงานลักษณะแบบนี้ได้

การพัฒนา solution นี้ สามารถแบ่งออกเป็น 2 เฟส ได้แก่

  1. การนำเข้ารูปภาพสินค้าทั้งหมดเข้าระบบ เพื่อให้ Amazon Rekognition detect ข้อมูลต่างๆในรูป และทำการจัดเก็บข้อมูลดังกล่าวในฐานข้อมูล
  2. การนำรูปตัวอย่าง มาทำการค้นหาข้อมูลจากฐานข้อมูล และแสดงผลการค้นหาสินค้าที่คล้ายกัน หรือตรงกัน

Alt Text

สำหรับเนื้อหาในโพสนี้ จะมาทำเฟสแรกให้ดูกัน ไปกันเลยยยย...

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
Alt Text

หลังจาก provision เสร็จเรียบร้อยแล้ว ให้ copy ES endpoint เพื่อไปแปะที่ source code
Alt Text

ทดสอบการใช้งานเบื้องต้นโดย browse ไปยัง endpoint ที่เรา copy มา จากนั้นใส่ username และ password ตอนที่เรา provision cluster
Alt Text

Create lambda function

ไปที่ฝั่ง lambda บ้าง เราต้องไปสร้าง lambda function ขึ้นมา แล้วเอา java far file ไป deploy

AWS Console -> Lambda -> create function

ใส่ชื่อ function lambda และ เลือก runtime เป็น Java 8

Alt Text

เพิ่มตัว trigger lambda คือ s3 ไว้ข้างหน้า function และเพิ่ม SNS alert ด้านหลัง function เราจะได้ไปดู error message ที่ email ได้ หรือเราไปดู error ผ่าน Cloudwatch log ก็ได้นะ
Alt Text

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 ตามรูป
Alt Text

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
Alt Text

Build และ pack compile code เป็น jar fomat โดยไปที่ eclipse กด click ขวาที่ project -> เลือก Run As -> Maven build
Maven build configuration
Alt Text

Alt Text

หลังจากกด build โดยใช้ Maven tool แล้ว เราจะได้ jar file ออกมา
jar file ตัวนี้จะถูกนำไป deploy ลงบน lambda

Alt Text

Deploy java jar file ไปที่ function จะด้วยวิธีการ upload ตรงขึ้นไป หรือ ไปฝากไว้ที่ s3 ขึ้นอยู่ขนาดความใหญ่ของ file

[Optional]หรือสามารถใช้การ click ขวาที่ file folder แล้วเลือก Amazon Web Services และ Upload Function to lambda
Alt Text

Let's testing our solution

ตัวอย่างรูปภาพ
Alt Text

แหล่งที่มา Amazon.com

ต่อไปเรา upload รูปภาพนี้ลงไปที่ S3
และเราสามารถดู debugging เบื้องต้นได้จาก CloudWatch Log
Alt Text

จะเห็นได้ว่า Amazon Rekognition สามารถจำแนกรูปภาพได้ว่า เป็นเก้าอี้ เฟอร์นิเจอร์ และเป็นเก้าอี้ที่มีที่พักแขน และความมั่นใจกี่เปอร์ในแต่ละหัวข้อ

สุดท้ายเราสามารถไปดูข้อมูลที่ถูก insert เข้าไปที่ ES ได้ตามรูปข้างล่างเลย
Alt Text

ในบทสรุปของการทำ solution นี้คือ ความสามารถในการบันทึกข้อมูลที่ได้จากการใช้ Amazon Rekognition detecting label มาวิเคราะห์รูปภาพ โดยที่ข้อมูลที่ได้เป็นลักษณะ label ต่างๆ เช่น เก้าอี้ เฟอร์นิเจอร์ และความมั่นใจเป็นเปอร์เซ็นต์ที่คิดว่าเป็น เก้าอี้ และเฟอร์นิเจอร์กี่เปอร์เซ็นต์ ลงบันทึกลงใน Amazon Elasticsearch เพื่อใช้ในการค้นหาต่อไปได้

Alt Text

Top comments (1)

Collapse
 
chatchaikomrangded profile image
Chatchai Komrangded (Bas)

Good one!