ข้ามไปที่เนื้อหาหลัก

วิธีตรวจจับวัตถุในรูปภาพด้วย AI

วิธีตรวจจับวัตถุในรูปภาพด้วย AI

😮 ไม่มีวัตถุใด รอดพ้นสายตา AI ไปได้
คำกล่าวนี้ไม่ใช่เรื่องเกินจริงปัจจุบันเราสามารถเขียน AI
เพื่อตรวจจับวัตถุในรูปภาพ (Object detection) ได้ง่ายนิดเดียว
มีตัวอย่างโค้ด ให้ลองเขียนตามมีวีดีโอ มีบทความสอนเยอะแยะเกลื่อนเนต
มีโมเดล AI ที่ถูกเทรนมาเรียบร้อยแล้ว เอามาใช้ได้เลย
มีงานวิจัย paper ตีพิมพ์ โชว์ให้เห็นกันเยอะ
รวมทั้งงานวิจัยใหม่ๆ ที่จะอัพเกรดความสามารถ AI ที่รอวันตีพิมพ์
ซึ่งตอนนี้ AI แนวนี้ก็ถูกนำไปใช้งานจริงแล้วด้วยอย่างประเทศจีนที่ได้ติดกล้อง CCTV
ทำราวกับเป็น skynet เอาไว้ตรวจจับผู้คนในท้องถนนด้วย AI
เมื่อพูดถึงอัลกอริทึม AI ที่ตรวจจับวัตถุต่างๆ ในรูป ก็มีหลายตัว เช่น
R-CNN, Fast-RCNN, Faster-RCNN, RetinaNet , SSD, YOLO

อันนี้จะพามาลองเขียน AI ง่ายๆ นิดเดียว
จากบทความต้นฉบับภาษาอังกฤษ object detection ภายใน 10 บรรทัด

ตัวโค้ดจะเป็น python นะครับ เพราะงานด้านนี้นิยมใช้ Python มาเป็นอันดับหนึ่ง
ภาษาอื่นอาจเสียเปรียบเยอะหน่อย ตัวอย่างมีน้อย

👉 1) ติดตั้ง python

หาอ่านได้ตามอินเตอร์เนต ไม่ยาก หรือจะอ่านจากตำรา “วิทยาการคำนวณ” ของเด็ก ม.1 ก็ได้ มีเขียนไว้
ลิงค์ดาวน์โหลด https://www.python.org/downloads/

แต่ผมเชียร์ให้ลง anaconda ดีกว่า มันเป็นแพลทฟอร์มสำหรับงาน Data science
และเหมาะกับการงาน AI สาย machine learning และ deep learning
ที่สำคัญเหมาะกับบทความนี้ด้วยขอบอกเลย

👉 2) ติดตั้งมอดูลพวกนี้ให้หมด อย่าตกหล่นอันใดเด็ดขาดนะครับ

pip install tensorflow

pip install numpy

pip install scipy

pip install opencv-python

pip install pillow

pip install matplotlib

pip install h5py

pip install keras
สุดท้ายแล้วลงมอดูล imageai ซึ่งเป็นพระเอกในการเขียน AI ตรวจจับรูปภาพ (เฉพาะบทความนี้)
pip3 install https://github.com/OlafenwaMoses/ImageAI/releases/download/2.0.2/imageai-2.0.2-py3-none-any.whl

สำหรับ imageai มันเป็นไลบรารี่ Deep Learning
สำหรับงาน Computer Vision (หรือที่เรียกว่า Image processing)
ช่วยทำให้เราเขียนโค้ดไม่กี่บรรทัดก็เสร็จแล้ว

👉 3) ดาวน์โหลดโมเดล AI ชื่อ resnet50_coco_best_v2.0.1.h5

resnet50_coco_best_v2.0.1.h5 จะถูกเทรนมาเรียบร้อยแล้ว
ขนาดไฟล์จะใหญ่หน่อย 145 MB

👉 4) โค้ดก็ก็อปปี้ตามนี้ จากบบทความต้นฉบับ

from imageai.Detection import ObjectDetection
import os

execution_path = os.getcwd()

detector = ObjectDetection()
detector.setModelTypeAsRetinaNet()
detector.setModelPath( os.path.join(execution_path , "resnet50_coco_best_v2.0.1.h5"))
detector.loadModel()
detections = detector.detectObjectsFromImage(input_image=os.path.join(execution_path , "image.jpg"), output_image_path=os.path.join(execution_path , "imagenew.jpg"))

for eachObject in detections:
    print(eachObject["name"] , " : " , eachObject["percentage_probability"] )
 ทริคเล็กน้อย ถ้าต้องการแสดงรูป “imagenew.jpg” ให้เด้งขึ้นมา ก็อาจเพิ่มโค้ดตรงนี้ก็ได้
from PIL import Image
image = Image.open('imagenew.jpg')
image.show()
เสร็จแล้วบันทึกไฟล์เป็นชื่อ FirstDetection.py

++++สำหรับโค้ดตัวอย่างนี้+++++


โค้ดตัวอย่างที่แสดงเขาใช้โมเดลที่เรียกว่า RetinaNet เท่านั้น
ลองเล่นดู รันได้ไม่ยาก  ถ้าจะยากคงเป็นเรื่องทฤษีสำหรับผู้สนใจ
ก็หาอ่านจาก paper ต้นฉบับบโดยตรง หรือบทความออนไลน์ต่างๆ เพื่อความกระจ่าง
โครงสร้าง RetinaNet ที่มา https://arxiv.org/pdf/1708.02002.pdf

5) หาไฟล์รูปภาพมาทดสอบ

ในโค้ดจะระบุรูปภาพ ใช้เป็นอินพุตชื่อ “image.jpg”
ทั้งนี้ไฟล์ image.jpg
โมเดล resnet50_coco_best_v2.0.1.h5
และ FirstDetection.py
ทั้ง 3 ไฟล์จะอยู่ที่เดียวกันนะครับ

👉 6) แล้วรันด้วยคำสั่ง

python FirstDetection.py
หรือจะใช้ IDE รันก็ได้
(วิธีรัน python ไม่ยากศึกษาได้ตามเนต หรือตามคู่มือเด็ก ม.1)

👉 7) ผลลัพธ์จะได้ออกมาเป็นรูป imagenew.jpg

โดย AI จะตีกรอบในรูปว่ามีวัตถุอะไรได้บ้าง?
พร้อมบอกความน่าจะเป็น (เป็นตัวเลข) ว่าเป็นวัตถุอะไร
ถ้าไปดูที่คอนโซล จะบอกว่า
มันตรวจจับได้อะไรออกมา
ด้วยความน่าจะเป็นเท่าไร
(แต่ถ้ารูปขนาดใหญ่ ยิ่งเครื่องไม่แรงด้วยแล้ว ก็จะทำงานช้านะครับ)
traffic light : 50.23456811904907
traffic light : 60.74821352958679
person : 88.47966194152832
backpack : 87.8473162651062
handbag : 58.078956604003906
umbrella : 62.925803661346436
car : 82.95613527297974
person : 62.71200180053711
person : 75.42724013328552
person : 88.47867250442505
person : 94.76819634437561

สรุป จากผลลัพธ์ที่ได้ 

AI จะตรวจจับได้หลายสิ่ง ทั้งคน รถ กระเป๋า ไฟจราจร ร่ม ก็ทำได้
หรือจะพัฒนาต่อไปให้ตรวจับคนในรูปว่าเป็นใคร?
อย่างหลังจะเกินขอบเขตที่โค้ดทำได้
ต้องใช้อัลกอริทึมอื่นประกอบ
เช่น DeepFace ของเฟสบุ๊ค  ที่ใช้ระบุตัวคนบนรูปภาพได้

ขอให้โชคดีครับ กับโลกยุค AI
เรียนรู้ไว้ไม่เสียหาย เพราะเราคงปฏิเสธมันไม่ได้
ยิ่ง AI มีเขียนไว้ในยุทธศาสตร์ 20 ปี ของบ้านเรา เชียวน๊า

เครดิต




ความคิดเห็น

โพสต์ยอดนิยมจากบล็อกนี้

วิธีใช้ Google Form ส่งข้อความเข้า LINE Notify

วิธีใช้ Google Form ส่งข้อความเข้า LINE Notify           ขั้นตอนต่อไปนี้จะข้ามส่วนของรายละเอียดบางอย่างไป ซึ่งก่อนจะทำตรงนี้ควรจะรู้แล้วว่า LINE Notify ใช้ทำอะไร และ Access Token จะเอามาจากไหน แต่จะพยายามอธิบายให้ครอบคลุมที่สุดก็แล้วกัน Update: 2019/06/10 ในท้ายบทความได้เพิ่มคำอธิบายเรื่องการส่งข้อมูลหลายกล่องข้อมูล (คอลั่ม) พร้อมกับ code ที่วนลูปข้อมูลทุกกล่อง เพื่อความสะดวกในการส่งข้อมูลในรูปแบบเดิม สร้าง Google Form วิธีสร้างก็ง่ายแสนง่าย เข้าไปที่  https://docs.google.com/forms  จากนั้น คลิกตรงเครื่องหมาย + ตามภาพ จะได้ form หน้าตาแบบนี้มา แก้ไขตามสะดวกเลย ตัวอย่างเอาแบบนี้แล้วกัน จะลองส่งข้อความคลิกที่รูป “ตา” พิมพ์ข้อความอะไรก็ได้ แล้ว กด Submit โลด กลับไปหน้า Form ของเราใน tab แรก มันก็จะมี RESPONSES เข้ามา เมื่อคลิกดูก็จะพบข้อความที่เราเพิ่งพิมพ์ไปเมื่อตะกี้ ใส่ code ใน Script Editor คลิกที่ จุด 3 จุด ด้านขวาบน แล้วเลือก  <> Script Editor จะพบหน้าเปล่าๆ ที่ไม่คุ้นเคย ตรงนี้แหละที่เราจะมาใส่ code ใ...

คาร์บอนฟุตพริ้นท์ (Carbon Footprint)

คาร์บอนฟุตพริ้นท์ ( Carbon Footprint) คาร์บอนฟุตพริ้นท์ ( Carbon Footprint) คืออะไร ในภาวะโลกร้อนที่นับวันยิ่งทวีความรุนแรงขึ้น ซึ่งสาเหตุที่สำคัญคงหนึไม่พ้นเกิดจากกิจกรรมต่างของมนุษย์เรานั่นเอง ทั้งจากการใช้พลังงาน การทำลายทรัพยากรธรรมชาติเช่น การตัดไม้ทำลายป่า การขนส่ง และการขยายตัวของภาคอุตสาหกรรม และในปัจจุบันเราจะพบว่าในหลาย ๆ ประเทศได้มีความตื่นตัวในเรื่องเกี่ยวกับภาวะโลกร้อนกันมากขึ้น และสิ่งหนึ่งที่ให้ความสนใจก็คือ การที่จะร่วมมือกันผลิตและบริโภคผลิตัณฑ์ที่เป็นมิตรกับสิ่งแวดล้อม โดยมีทั้งการเชิญให้ผู้ผลิตได้เข้าร่วมโครงการเพื่อให้ได้รับเครื่องหมายคาร์บอนฟุตพริ้นท์ และเชิญชวนให้ผู้บริโภคหันมาซื้อผลิตภัณฑ์ที่มีฉลากแสดงข้อมูลคาร์บอนฟุตพริ้นท์อีกด้วย คาร์บอนฟุตพริ้นท์ ( Carbon Footprint, CF) คือ การวัดผลกระทบสิ่งแวดล้อมด้านการเปลี่ยนแปลงภูมิอากาศ ซึ่งเกี่ยวข้องกับปริมาณการปล่อยก๊าซเรือนกระจก ( Greenhouse Gases, GHGs) จากกระบวนการผลิตสินค้าตลอดวัฎจักรชีวิต ( Product Life Cycle) โดยเริ่มตั้งแต่ การจัดหาวัตถุดิบนำไปแปรรูป ผลิต จดจำหน่าย การใช้งาน และการจัดการหลังจากผลิ...

ทำความเข้าใจ LM, NTLM, NTLMv2

ทำความเข้าใจ LM, NTLM, NTLMv2  วันนี้เราจะมาทำความเข้าใจเกี่ยวกับรูปแบบการเก็บ password ของ Windows โดยแต่ก่อนจนถึงปัจจุบันก็มีพัฒนาการมาเรื่อยๆครับ ซึ่งจะเริ่มจาก LM (Lan Manager) hash โดย LM นั้นเป็นรูปแบบดั้งเดิมในการเก็บ password ของ Windows ตั้งแต่ยุค 1980 ซึ่งในช่วงนั้นยังมีจำนวน charset ที่ยังจำกัดอยู่(16-bits characters) ซึ่งทำให้การ crack password นั้นทำได้ง่ายมากโดยดึงจาก SAM database บน Windows หรือว่า NTDS บน Domain Controller (Active Directory) ได้เลย โดยขั้นตอนการเปลี่ยน password อยู่ในรูปแบบ LM hash คือ เปลี่ยนอักษรทั้งหมดเป็นตัวใหญ่ หากตัวอักษรไม่ครบ 14 ตัวอักษรก็จะเติมตัวอักษรทั้งหมดให้เต็มด้วย NULL characters แบ่งเป็น 2 กลุ่ม กลุ่มละ 7 ตัวอักษร สร้าง DES key จาก character 7 ตัวทั้ง 2 กลุ่ม ก็จะได้ DES key 2 ชุด (ชุดละ 64 bit) นำ DES key ไปเข้ารหัส static string “KGS!@#$%” ด้วย DES (ECB) นำ encrypted strings ทั้ง 2 อันมาต่อกัน ก็จะได้เป็น LM Hash เช่น สมมติ password เป็น password password => password000000 PASSWORD000000 PASSWOR...