คลังเก็บหมวดหมู่: Programming Notes

notes about what I have read and learnt in programming

gstreamer บน Windows

qtgst-win

จริงๆเขียนโปรแกรมแบบนี้มาหลายปีแล้ว แต่วิธีการก็ต่างกันไปเรื่อยๆครับ คราวนี้มาเขียนบน Windows เพราะเริ่มจะกลับมา deploy งานบน x86 และ win10 บ้าง

ใช้ gstreamer บน Windows ค่อนข้างน่าเวียนหัว โดยเฉพาะเมื่อ อยากใช้ qt-gstreamer และ ms visual studio compiler ทำให้รู้ว่าการมี pkg-config บน linux ช่วยได้เยอะ แต่ลอง pkg-config (win 64) แล้วมัน crash ก็งงๆอยู่ว่าทำไม เดี๋ยวค่อยหาสาเหตุอีกที

gstreamer นี่เอามาใช้ เพื่อ แสดง live preview จาก stream rtsp ของกล้อง IP

ตอนแรกจะใช้ command line ด้วย ffmpeg เพื่อ capture ภาพ ติดตรงต้องเก็บเป็นไฟล์ก่อน แล้วถึงจะดึงภาพมาแสดงได้ พอรู้ว่า OpenCV สามารถดึงภาพจาก stream rtsp ได้ด้วย ก็เลยเปลี่ยนมาใช้ เพราะทำให้สามารถเอามาทำ image processing ต่อและเอาไปแสดงบน Qt/QML Quick control ได้โดยการ copy memory ได้เลย ไม่ต้อง save ก่อน (เอ แต่เดี๋ยวก็ต้อง save อยู่ดีนี่ – – !) ส่วนนี้ต้องให้มันทำงาน แยก thread ออกมาจาก main thread ที่ทำ GUI ไม่งั้น live preview ก็จะกระตุกเวลา capture ภาพ อันนี้เป็นสิ่งที่ผมชอบใช้ Qt เพราะทำให้การใช้ thread เป็นเรื่องง่ายขึ้นเยอะ

ข้อสังเกต คือปัจจุบัน สามารถแยกงานออกแบบ GUI ออกมาได้เกือบสิ้นเชิง ด้วยการใช้ Qt/QML ซึ่งดีต่อการทำงานเป็นทีมมาก

สุดท้าย เอา command line สำหรับ capture ภาพจาก stream rtsp มาฝาก มี 2 วิธี

  1. ใช้ gstreamer แต่คำสั่งนี้ บางทีก็ capture ไม่ได้ ไม่รู้ทำไมเหมือนกัน
    D:\gstreamer\1.0\x86_64\bin>gst-launch-1.0  rtspsrc location=”rtsp://admin:admin@192.168.1.108:554″ latency=10 num_buffers=10 ! decodebin ! videoconvert ! pngenc snapshot=TRUE ! filesink location=img.png
  2. ใช้ ffmpeg อันนี้ ชัวร์ป้าบ
    ffmpeg.exe -i rtsp://192.168.1.xx:554 -y -f image2 -vframes 1 test.jpg

อัพเดต 10 มี.ค. 2560 ไม่รู้มีใครเจอเหมือนกับผมมั้ย การใช้ OpenCV เปิด stream จะมี dalay อยู่พอสมควร เมื่อเทียบกับ gstreamer ที่สามารถกำหนด option เพื่อลด delay ได้ สุดท้ายก็เลยเปลี่ยนมาใช้การ capture frame ด้วย gstreamer ครับ

อ่านบัตรประชาชนรุ่นใหม่

ไม่ค่อยได้มาเขียนในนี้เท่าไรเลยพักนี้ ด้วยเหตุที่ทำหลายอย่างพร้อมๆกัน หากจะมีอะไรอยากเขียนนิดๆหน่อยๆก็ไปเขียนลงใน facebook แบบทันทีทันใดเลย

ปลายปีอีกละ ก็เอาซะหน่อย ลองสรุปดูว่าทำอะไรไปบ้าง

  • ความคืบหน้าการเปิด mocap studio ก็ต้องเลื่อนออกไปก่อน กำลังศึกษา 3D modeling จากประสบการณ์การทำเดโม การพูดคุยกับ modeller รวมทั้ง animator ยังต้องพัฒนาการสื่อสาร ประเด็นหลักคือ เรายังรู้ด้านกราฟิกน้อยเกินไป แม้ว่าจะมีความรู้ด้าน technical และเครื่องมือพอสมควรแล้ว แต่ยังไม่สามารถทำงานร่วมกันได้อย่างราบรื่น ก็เลยต้องถอยมาตั้งหลักก่อน
  • หลังจากที่ทำ signage ทำ kiosk มาบ้างแล้ว ปีหน้าจะเริ่มโปรเจ็คใหม่ๆ อย่างเช่น การทำตู้ check-in , car parking system และ target board ในโรงงาน จากที่ปีนี้ ได้งานเขียนทั้ง อ่าน 1D, 2D barcode, อ่านบัตรประชาชน, RFID รวมทั้งการใช้งานเครื่องพิมพ์ใบเสร็จ ก็ทำมาหมดแล้ว ต่อไปก็จะพัฒนา ตู้ที่สามารถจ่ายบัตร ทอนเงินได้ ยังมี requirement อ่านข้อมูลจาก passport เข้ามาด้วย

พูดถึงการอ่านบัตรประชาชน เคยเขียนโปรแกรมไปเมื่อนานมาแล้ว โดยอาศัยข้อมูลจาก code c# ที่มีผู้เผยแพร่เอาไว้ (ThaiNationalIDCard) มาแปลงเป็น c++ เมื่อเร็วๆนี้ได้พบว่า บัตรประชาขนมีรุ่นใหม่ออกมา และโค้ดเดิมไม่สามารถอ่านได้ ก็ได้ข้อมูลจากท่านเดิมนี่ละที่อุตส่าห์มาอัพเดตโค้ดไว้ ขอขอบคุณมา ณ ที่นี้ด้วยครับ เพราะได้ลองเข้าไปหาข้อมูลในเว็บของกรมการปกครอง ก็ไม่อยู่เสียแล้ว (อันนี้ไม่เข้าใจ) สอบถามจากผู้ขายเครื่องอ่านบัตร เค้าก็ไม่อยากตอบเท่าไร เพราะเค้าขายโปรแกรมด้วย (อันนี้ก็พอเข้าใจ)