2 คะแนน โดย GN⁺ 2026-03-26 | 1 ความคิดเห็น | แชร์ทาง WhatsApp
  • ค้นหาฉากในไฟล์วิดีโอ เช่น วิดีโอจาก dashcam ด้วยภาษาธรรมชาติ และ ตัดช่วงที่ตรงกันออกมาโดยอัตโนมัติ ด้วยระบบ semantic search
  • ใช้โมเดล Google Gemini Embedding 2 เพื่อ ฝังตัววิดีโอโดยตรงเป็นเวกเตอร์ และจัดเก็บไว้ใน ChromaDB เพื่อเปรียบเทียบกับ text query ได้โดยตรง
  • ใช้ ffmpeg เพื่อ แบ่งวิดีโอเป็นชังก์แบบซ้อนทับกัน แล้วทำ embedding โดยคืนค่าช่วงที่คล้ายที่สุดได้ด้วยความเร็วระดับ ต่ำกว่าหนึ่งวินาที
  • มีฟีเจอร์ preprocessing และ skip เฟรมนิ่ง เพื่อลดค่าใช้จ่ายในการเรียก API โดยการทำดัชนีวิดีโอ 1 ชั่วโมงมีค่าใช้จ่ายประมาณ $2.84
  • ใช้ ความสามารถในการฝังตัววิดีโอโดยตรงของ Gemini Embedding 2 เพื่อให้ค้นหาเชิงความหมายในวิดีโอความยาวหลายชั่วโมงได้อย่างรวดเร็วโดยไม่ต้องสร้างคำบรรยายอัตโนมัติ

ภาพรวม

  • SentrySearch เป็นเครื่องมือสำหรับทำ semantic search กับวิดีโอ dashcam โดยเมื่อผู้ใช้ป้อนคำค้นด้วยภาษาธรรมชาติ ระบบจะส่งคืน คลิปที่ถูกตัดมาแล้ว (trimmed clip) ซึ่งมีฉากนั้นอยู่
  • ใช้โมเดล Google Gemini Embedding 2 เพื่อ ฝังตัววิดีโอโดยตรงเป็นเวกเตอร์ และเก็บไว้ในฐานข้อมูลแบบโลคัล ChromaDB
  • จากนั้นฝัง text query ลงในเวกเตอร์สเปซเดียวกันเพื่อค้นหาชิ้นส่วนวิดีโอที่คล้ายที่สุด
  • ผลการค้นหาจะถูกตัดออกจากไฟล์ต้นฉบับและบันทึกโดยอัตโนมัติ พร้อมความเร็วในการค้นหาระดับ sub-second

วิธีการทำงาน

  • วิดีโอจะถูกแบ่งเป็น ช่วงซ้อนทับกัน (overlapping chunks) และแต่ละช่วงจะถูกฝังตัวโดยตรงผ่านโมเดล Gemini Embedding
  • เวกเตอร์ embedding แต่ละตัวจะถูกเก็บไว้ใน ChromaDB และเมื่อค้นหา text query จะถูกแปลงไปยังเวกเตอร์สเปซเดียวกันเพื่อทำการจับคู่
  • ช่วงที่มีความคล้ายสูงสุดจะถูกตัดออกจากวิดีโอต้นฉบับโดยอัตโนมัติและบันทึกเป็นคลิป
  • ใช้ ffmpeg สำหรับการแบ่งและตัดวิดีโอ และหากไม่ได้ติดตั้งในระบบ จะใช้ imageio-ffmpeg โดยอัตโนมัติ

การติดตั้งและการตั้งค่าเริ่มต้น

  • ติดตั้งได้บนสภาพแวดล้อม Python 3.10 ขึ้นไปด้วยคำสั่งต่อไปนี้
    • หลัง git clone ให้รัน pip install -e .
  • ใช้คำสั่ง sentrysearch init เพื่อตั้งค่า Gemini API key และบันทึกลงในไฟล์ .env
    • ระบบจะทำ test embedding เพื่อตรวจสอบความถูกต้องของคีย์
  • หากตั้งค่าด้วยตนเอง สามารถคัดลอก .env.example แล้วเพิ่ม API key เองได้

คำสั่งและตัวเลือกหลัก

  • index

    • สแกนไฟล์ .mp4 แบบ recursive ภายในโฟลเดอร์ที่กำหนดเพื่อทำดัชนี
    • แต่ละไฟล์จะถูกแบ่งเป็นหลาย chunk แล้วนำไปทำ embedding
    • ตัวเลือก
      • --chunk-duration : ความยาวชังก์ (หน่วยวินาที)
      • --overlap : ความยาวช่วงซ้อนทับระหว่างชังก์
      • --no-preprocess : ข้ามการลดความละเอียดและลดจำนวนเฟรม
      • --target-resolution : ความละเอียดเป้าหมายระหว่าง preprocessing (ค่าเริ่มต้น 480p)
      • --target-fps : อัตราเฟรมเป้าหมายระหว่าง preprocessing (ค่าเริ่มต้น 5fps)
      • --no-skip-still : ทำ embedding ทุกช่วงรวมถึงช่วงเฟรมนิ่ง
  • search

    • ตัวอย่าง: sentrysearch search "red truck running a stop sign"
    • ผลลัพธ์จะแสดงพร้อมคะแนนความคล้าย และผลลัพธ์ที่ดีที่สุดจะถูกตัดและบันทึกอัตโนมัติ
    • หากคะแนนความคล้ายต่ำกว่า threshold เริ่มต้น (0.35) จะมี prompt ให้ยืนยัน
    • ตัวเลือก
      • --results N : จำนวนผลลัพธ์ที่จะแสดง
      • --output-dir DIR : พาธสำหรับบันทึกคลิป
      • --no-trim : ปิดการตัดคลิปอัตโนมัติ
      • --threshold : ปรับค่า threshold ของความคล้าย
  • stats

    • แสดงจำนวนชังก์ที่ถูกทำดัชนีทั้งหมดและจำนวนไฟล์ต้นฉบับ
  • --verbose

    • แสดงข้อมูลดีบัก เช่น มิติของ embedding, เวลาในการตอบสนองของ API, คะแนนความคล้าย เป็นต้น

พื้นหลังทางเทคนิค

  • Gemini Embedding 2 สามารถ ฝังตัววิดีโอโดยตรง และเปรียบเทียบกับ text query ได้ใน เวกเตอร์สเปซขนาด 768 มิติ เดียวกัน
  • ไม่จำเป็นต้องมีขั้นตอนสร้างคำบรรยายหรือ caption จากเฟรมแยกต่างหาก
  • ตัวอย่างเช่น text query อย่าง “red truck at a stop sign” สามารถนำไปเปรียบเทียบกับคลิปวิดีโอความยาว 30 วินาทีได้โดยตรง
  • ความสามารถนี้ทำให้ ค้นหาเชิงความหมายในวิดีโอความยาวหลายชั่วโมงได้ในระดับต่ำกว่าหนึ่งวินาที

โครงสร้างต้นทุน

  • ภายใต้ค่าตั้งต้น (ชังก์ 30 วินาที, overlap 5 วินาที) ค่าใช้จ่ายในการทำดัชนีวิดีโอ 1 ชั่วโมงอยู่ที่ประมาณ $2.84
    • Gemini API ประมวลผลเพียง 1 เฟรมต่อวินาทีจากวิดีโอที่อัปโหลด
    • กระบวนการ preprocessing จะลดขนาดเป็น 480p, 5fps เพื่อ เพิ่มประสิทธิภาพการส่งข้อมูล และ หลีกเลี่ยง timeout
  • การเพิ่มประสิทธิภาพเพื่อลดต้นทุน

    • preprocessing : ลดขนาดข้อมูลที่อัปโหลดและเวลาที่ใช้ส่งข้อมูล
    • still-frame skipping : ข้ามการทำ embedding ในช่วงที่ไม่มีการเปลี่ยนแปลงทางภาพ
      • มีประโยชน์กับวิดีโอที่บันทึกยาวระหว่างจอดรถ
    • search query มีเพียงการทำ text embedding จึงแทบไม่มีค่าใช้จ่าย
    • ตัวเลือกเพิ่มเติมสำหรับการปรับจูน
    • --chunk-duration, --overlap : ปรับจำนวนครั้งในการเรียก API
    • --no-skip-still : ทำ embedding ทุกชังก์
    • --target-resolution, --target-fps : ปรับคุณภาพของ preprocessing
    • --no-preprocess : ส่งชังก์ต้นฉบับโดยตรง

ข้อจำกัดและการปรับปรุงในอนาคต

  • การตรวจจับเฟรมนิ่ง ใช้วิธี heuristic ที่อิงกับการเปรียบเทียบขนาดไฟล์ JPEG จึงอาจพลาดการเคลื่อนไหวเล็กน้อยหรือรวมช่วงนิ่งผิดพลาดได้
  • คุณภาพการค้นหาขึ้นอยู่กับขอบเขตของชังก์ หากเหตุการณ์คร่อมอยู่ระหว่างสองชังก์ อาจจับได้ไม่สมบูรณ์
    • ในอนาคตสามารถปรับปรุงได้ด้วยการแบ่งชังก์ตาม scene detection
  • Gemini Embedding 2 ยังอยู่ในขั้น preview และพฤติกรรมของ API รวมถึงราคาอาจเปลี่ยนแปลงได้

ความเข้ากันได้และข้อกำหนด

  • ทำงานกับไฟล์วิดีโอทุกชนิดที่เป็นรูปแบบ .mp4 และ ไม่ได้จำกัดเฉพาะวิดีโอ Tesla Sentry Mode
  • ค้นหาไฟล์ .mp4 ทั้งหมดแบบ recursive โดยไม่ขึ้นกับโครงสร้างโฟลเดอร์
  • ข้อกำหนด
    • Python 3.10 ขึ้นไป
    • ต้องติดตั้ง ffmpeg (หรือใช้ imageio-ffmpeg อัตโนมัติ)
    • ต้องมี Gemini API key (ขอคีย์ฟรีได้ที่: aistudio.google.com/apikey)

1 ความคิดเห็น

 
GN⁺ 2026-03-26
ความเห็นจาก Hacker News
  • รู้สึกว่าวิธีการติดตั้งใช้งานแบบนี้เจ๋งมากอยู่จริง ๆ ถึงตอนนี้ embeddings ก็ยังมีส่วนที่ให้ความรู้สึกเหมือนเวทมนตร์อยู่
    แต่สิ่งที่กังวลที่สุดคือเทคโนโลยีแบบนี้อาจพาไปสู่ สังคมเฝ้าระวัง ในโลกจริง
    ตอนนี้มีกล้องอยู่มากมายก็จริง แต่ในทางปฏิบัติเป็นไปไม่ได้เลยที่มนุษย์จะดูภาพทั้งหมดได้ จึงยังพอมีความไม่เปิดเผยตัวตนและความเป็นส่วนตัวเหลืออยู่บ้าง
    แต่ถ้า AI สามารถวิเคราะห์วิดีโอทั้งหมดแบบเรียลไทม์ และตรวจจับบุคคลหรือพฤติกรรมที่ต้องการด้วยภาษาธรรมชาติได้ การเฝ้าระวังแบบเบ็ดเสร็จ (panopticon) ก็อาจกลายเป็นความจริง
    แม้จะมีการใช้งานเชิงบวกอย่างการตรวจจับอาชญากรรมหรือตรวจจับการหกล้ม แต่ถ้าไม่มีการกำกับดูแล ผลลัพธ์ก็น่าจะอันตรายมาก

    • ตอนนี้มันกำลัง ถูกสร้างขึ้นจริง อยู่แล้ว ผมเคยได้ยินการหารือเรื่องสัญญากล้อง ALPR ในการประชุมสภาเมือง แล้วก็ได้รู้จักผลิตภัณฑ์แดชบอร์ดชื่อ Fusus
      เขาบอกว่ามันรวมระบบกล้องหลายแบบ, ALPR และสัญญาณเตือนไว้ด้วยกัน และยัง ค้นหาวิดีโอด้วยภาษาธรรมชาติ ได้ด้วย
      ต่อไปก็มีแผนจะรวมกล้องที่ประชาชนติดตั้งเองด้วย สุดท้ายถ้าเชื่อมกับบริการอย่าง Citizen app โลกที่กล้องของเพื่อนบ้านเชื่อมตรงเข้าระบบตำรวจอาจมาถึงจริงก็ได้
      เป็นทิศทางที่น่ากังวลมาก
    • ตอนนี้ยังทำดัชนีแบบเรียลไทม์ได้ยากเพราะต้นทุน ($2.50/ชั่วโมง) และ latency แต่ไม่นานก็น่าจะทำได้
      เพราะงั้นผมคิดว่าสำคัญมากที่จะประมวลผลเรื่องพวกนี้ด้วย โมเดลโลคัล เพื่อไม่ให้วิดีโอถูกส่งออกไปภายนอก
      แต่โดยรวมแล้วทิศทางของเทคโนโลยีนี้ต้องคิดกันอย่างรอบคอบ
    • กล้องส่วนใหญ่ไม่ได้เปิดให้หน่วยงานเดียวเข้าถึงทั้งหมด และถ้ารัฐจะขอดูก็ต้องมี หมายศาล (subpoena)
      ปัญหาจะเกิดเมื่อมีการติดตั้งใช้งานในวงกว้างแบบ Flock หรือ Ring หรือในกรณีที่บริษัทเดียวเข้าถึงวิดีโอทั้งหมดได้
    • ในเชิงเทคนิค ระบบเฝ้าระวังแบบเบ็ดเสร็จ ทำได้อยู่แล้ว ตอนนี้แค่ยังมีต้นทุนสูงเท่านั้น
    • ถ้าโมดูลการมองเห็นแบบนี้ไปรันได้บน ASIC กำลังต่ำ เมื่อไร โดรนอาจกลายเป็นอาวุธที่น่ากลัวมาก
  • ดูเหมือนว่า AI แบบมัลติโหมด จะก่อให้เกิด การแข่งขันทางอาวุธ ระหว่างการตรวจจับโฆษณากับการแทรกโฆษณา
    ก่อนหน้านี้ผมเคยลองใช้โมเดลก่อน Gemini มาทดลองลบโฆษณาด้วย AI และเทคโนโลยีครั้งนี้ก็ดูทรงพลังขึ้นมาก น่าจะระบุโฆษณาแล้วปิดเสียงหรือลบออกได้แทบจะทันที
    สรุปการทดลองที่เกี่ยวข้องไว้ ที่นี่

    • เป็นบทความที่น่าสนใจ มีคนหนึ่งวาดภาพอนาคตของการค้นหาเว็บด้วย AI ไว้ แต่ข้อสรุปไม่ได้สดใสนัก
      สุดท้ายแล้วโฆษณาคงไม่หายไป ผู้ให้บริการ AI อาจรับ whitelist โฆษณา หรือแย่กว่านั้น AI อาจ โปรโมตสินค้าที่เป็นโฆษณา เสียเอง
  • เมื่อไม่กี่เดือนก่อนผมซื้อ กล้องติดรถ Rexing มา แต่เข้าถึงวิดีโอได้ลำบากมาก เลยคิดจะสร้างระบบเอง
    เป้าหมายคือให้ค้นดูและดาวน์โหลดวิดีโอได้โดยไม่ต้องถอด SD card
    ตอนที่กำลังเลื่อนดูวิดีโอที่อัดไว้ก็คิดขึ้นมาว่า “ถ้าค้นหาฉากนี้ด้วย ภาษาธรรมชาติ ได้ก็คงดี” พอเห็นโปรเจกต์นี้แล้วก็อยากเอาไปใช้ทันทีเลย
    ขอบคุณที่แชร์

  • สงสัยว่าเอาเทคโนโลยีนี้ไปใช้กับ ซอฟต์แวร์ตัดต่อวิดีโอ ได้ไหม
    เช่น ในปลั๊กอินของ Premiere แค่บอกว่า “ลบทุกฉากที่มีแมวออกให้หน่อย” แล้วมันสร้าง EDL (Edit Decision List) ให้อัตโนมัติ

    • เป็นไอเดียที่ดีมาก ผมเองก็คิดว่านี่คือก้าวถัดไปเหมือนกัน
      SentrySearch คืนค่า in/out timestamp ที่แม่นยำสำหรับคำค้นด้วยภาษาธรรมชาติได้อยู่แล้ว และยังตัดคลิปอัตโนมัติด้วย ffmpeg ด้วย
      การต่อยอดไปเป็น EDL หรือปลั๊กอินของ Premiere จึงเป็นพัฒนาการที่เป็นธรรมชาติ
      ผมไม่ใช่ผู้เชี่ยวชาญ Premiere แต่ถ้ามีใครลองทำ ตัวส่งออก EDL หรือปลั๊กอิน ผมยินดีช่วยรีวิวและรวม PR ให้
      ถ้าเริ่มทำแล้วอยากให้แจ้งผ่าน GitHub issue
  • สงสัยว่าสิ่งนี้ทำงานบน โมเดลโลคัล ได้หรือเปล่า

  • นอกจากกล้องติดรถแล้ว ยังน่าสนใจสำหรับการใช้งานแบบ เฝ้าระวังในบ้าน ด้วย

    • ระบบเฝ้าระวังในบ้านส่วนใหญ่ บันทึกเฉพาะตอนตรวจพบการเคลื่อนไหว อยู่แล้ว เลยลดพื้นที่ค้นหาไปได้มาก
      ถ้าเลื่อนไปมาหน่อยก็หาช่วงประมาณ 30 วินาทีที่มีคนเดินเข้ามาหน้าประตูได้ไม่ยาก
    • ฟีเจอร์แบบนี้น่าจะกลายเป็น ความสามารถพื้นฐานของระบบรักษาความปลอดภัยในบ้าน ทุกระบบในอนาคต
      ผมเคยเสียเวลาหลายชั่วโมงไล่ดูวิดีโอเพื่อเช็กว่าแมววิ่งออกไปตอนประตูเปิดหรือเปล่า สุดท้ายมันแค่ซ่อนอยู่ในบ้าน
  • ผมเองก็กำลังทำ โปรเจกต์ embeddings อยู่ แต่ยังเป็นแค่ต้นแบบ
    ของผมไม่ได้ใช้ Gemini แต่กำลังทำ reverse connections สำหรับเกมพัซเซิลแบบเชื่อมโยง
    ดูเพิ่มเติมได้ ที่นี่

  • ผมเห็นส่วนโค้ดที่ใช้ “ตรวจว่าชิ้นส่วนวิดีโอส่วนใหญ่เป็นเฟรมหยุดนิ่งหรือไม่” แล้วคิดว่าถ้าใช้ select และพารามิเตอร์ scene ของ ffmpeg ร่วมกันก็น่าจะจัดการอัตโนมัติได้

  • ผมทำงานอยู่ในสาย content/video intelligence
    Gemini เป็นเครื่องมือที่เหมาะกับ use case แบบนี้มากจริง ๆ

  • ผมหัวเราะตอนเห็นเดโมค้นหาว่า “ตอนที่มีรถคันหนึ่งปาดหน้าผมตอนกลางคืน โดยมีที่วางจักรยานติดอยู่ด้านหลัง”
    เดาว่านั่นน่าจะเป็น แรงจูงใจที่แท้จริง ของการทำโปรเจกต์นี้

    • ก็คงไม่ผิดนัก