ข้ามไปยังเนื้อหาหลัก
ProgrammerThailand

ไอเดีย (Idea) idea ai embeddings

ไอเดีย #90: ระบบค้นหารูปภาพด้วยข้อความ (semantic image search)

ฝ่ายประชาสัมพันธ์ของหน่วยงานหรือโรงเรียนมีรูปกิจกรรมสะสมเป็นแสนรูป พอผู้บริหารขอ "รูปงานกีฬาสีที่นักเรียนถือธงเมื่อสองปีก่อน" ก็ต้องเปิดโฟลเดอร์ไล่ดูทีละรูป เพราะชื่อไฟล์เป็นตัวเลขจากกล้องทั้งหมด ไอเดียนี้คือระบบค้นหารูปภาพด้วยข้อความ (semantic image search) ที่พิมพ์บรรยายเป็นภาษาธรรมดาแล้วเจอรูปที่ตรงความหมาย โดยไม่ต้องติดแท็กทีละรูป

ใครจะใช้

  • เจ้าหน้าที่ประชาสัมพันธ์/ช่างภาพ — อัปโหลดอัลบั้ม ค้นหา ดาวน์โหลด
  • บุคลากรทั่วไป — ค้นหาและขอใช้รูปตามสิทธิ์
  • ผู้ดูแลระบบ — จัดการอัลบั้ม สิทธิ์ และการประมวลผล

ฟีเจอร์ขั้นต่ำ (MVP)

  • อัปโหลดรูปจำนวนมากเป็นอัลบั้ม อ่าน EXIF (วันที่ถ่าย) และสร้าง thumbnail
  • สร้าง image embedding ด้วยโมเดลที่แปลงทั้งรูปและข้อความไปอยู่ใน vector space เดียวกัน
  • เก็บ embedding ใน pgvector พร้อม index สำหรับค้นหาเร็ว
  • ค้นด้วยข้อความ เช่น "เด็กนักเรียนวิ่งแข่งบนสนามหญ้า" แล้วเรียงผลตามความใกล้
  • กรองเพิ่มด้วยช่วงวันที่ อัลบั้ม หรือกิจกรรม
  • ค้นหาด้วยรูป: อัปโหลดรูปตัวอย่างแล้วหารูปที่คล้ายกัน
  • หน้าแสดงผลแบบ grid โหลดแบบ lazy load

ต่อยอดได้อีก

  • ทดสอบและเลือกโมเดลที่เข้าใจคำค้นภาษาไทยได้ดี หรือแปลคำค้นเป็นอังกฤษก่อน
  • สร้างคำบรรยายรูปอัตโนมัติเพื่อเสริม full-text search (ให้คนแก้ได้)
  • ตรวจรูปซ้ำหรือรูปเกือบเหมือนกัน เพื่อลดพื้นที่
  • คัดรูปเด่นของแต่ละกิจกรรมเพื่อทำอัลบั้มสรุป

โครงข้อมูลตั้งต้น

CREATE TABLE photo (
  id BIGSERIAL PRIMARY KEY,
  album_id INT NOT NULL,
  file_path TEXT NOT NULL,
  taken_at TIMESTAMP,
  caption TEXT,
  embedding VECTOR(512)   -- ขนาดตาม model
);
CREATE INDEX ON photo USING hnsw (embedding vector_cosine_ops);

ตารางอื่น: album (ชื่อ วันที่ กิจกรรม visibility), embedding_job (สถานะการประมวลผล), search_log (คำค้นและรูปที่ผู้ใช้คลิก ใช้ปรับปรุงผล)

ระดับความยาก และสิ่งที่จะได้เรียนรู้

ปานกลาง — ส่วนใหญ่เป็นงานต่อชิ้นส่วน ไม่ต้องเทรนโมเดลเอง

  • เข้าใจแนวคิด multimodal embedding และ cosine similarity
  • ทำ background job ประมวลผลรูปจำนวนมาก (อาจต้องใช้ GPU หรือ service แยกภาษา Python)
  • ใช้ index แบบ approximate nearest neighbor ใน pgvector
  • จัดการ storage รูปและ thumbnail อย่างมีประสิทธิภาพ

ข้อควรระวัง

  • รูปที่มีใบหน้าคน โดยเฉพาะเด็กนักเรียน เป็นข้อมูลส่วนบุคคล ต้องจำกัดสิทธิ์และวัตถุประสงค์การใช้ตาม PDPA และไม่ควรทำระบบจดจำใบหน้าโดยไม่มีฐานทางกฎหมายและความยินยอม
  • ผลค้นหาด้วย AI อาจมีอคติหรือผิดพลาด ไม่ควรใช้ผลอัตโนมัติไปเผยแพร่โดยไม่มีคนเลือกรูป
  • ถ้าส่งรูปไปประมวลผลภายนอก ต้องพิจารณาความเสี่ยงเรื่องข้อมูลรั่ว การรันโมเดลเองอาจเหมาะกว่า

ใครเคยลองค้นรูปด้วยคำภาษาไทยผ่าน embedding แล้วบ้างครับ ผลออกมาเป็นอย่างไร ต้องแปลเป็นอังกฤษก่อนไหม? และคลังรูปที่มีเป็นแสนรูป ควรประมวลผลบนเครื่องตัวเองหรือเช่า GPU ชั่วคราว มาเล่าให้ฟังหน่อย ใครทำแล้วเอามาโชว์ในกระทู้ได้เลย

0 คะแนน

0 คำตอบ

ยังไม่มีคำตอบ

รู้คำตอบ? ช่วยแบ่งปันได้เลย

ตอบคำถามนี้

เข้าสู่ระบบเพื่อตอบคำถามและโหวต

เข้าสู่ระบบ สมัครสมาชิก