You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
IoT-For-Beginners/translations/th/4-manufacturing/lessons/2-check-fruit-from-device/pi-camera.md

14 KiB

ถ่ายภาพ - Raspberry Pi

ในส่วนนี้ของบทเรียน คุณจะเพิ่มเซ็นเซอร์กล้องให้กับ Raspberry Pi และอ่านภาพจากกล้อง

ฮาร์ดแวร์

Raspberry Pi ต้องการกล้อง

กล้องที่คุณจะใช้คือ Raspberry Pi Camera Module กล้องนี้ถูกออกแบบมาให้ใช้งานร่วมกับ Raspberry Pi และเชื่อมต่อผ่านตัวเชื่อมต่อเฉพาะบน Pi

💁 กล้องนี้ใช้ Camera Serial Interface, โปรโตคอลจาก Mobile Industry Processor Interface Alliance หรือที่รู้จักในชื่อ MIPI-CSI ซึ่งเป็นโปรโตคอลเฉพาะสำหรับการส่งภาพ

เชื่อมต่อกล้อง

กล้องสามารถเชื่อมต่อกับ Raspberry Pi ได้โดยใช้สายริบบิ้น

งาน - เชื่อมต่อกล้อง

กล้อง Raspberry Pi

  1. ปิดการทำงานของ Pi

  2. เชื่อมต่อสายริบบิ้นที่มาพร้อมกับกล้องเข้ากับตัวกล้อง โดยดึงคลิปพลาสติกสีดำในตัวจับออกเล็กน้อย จากนั้นเลื่อนสายเข้าไปในช่องเสียบ โดยให้ด้านสีน้ำเงินหันออกจากเลนส์ และด้านที่เป็นแถบโลหะหันเข้าหาเลนส์ เมื่อสายเข้าไปจนสุดแล้ว ให้ดันคลิปพลาสติกสีดำกลับเข้าที่

    คุณสามารถดูภาพเคลื่อนไหวที่แสดงวิธีเปิดคลิปและใส่สายได้ใน เอกสารการเริ่มต้นใช้งาน Raspberry Pi Camera module

    สายริบบิ้นที่เชื่อมต่อกับโมดูลกล้อง

  3. ถอด Grove Base Hat ออกจาก Pi

  4. สอดสายริบบิ้นผ่านช่องสำหรับกล้องใน Grove Base Hat โดยให้ด้านสีน้ำเงินของสายหันไปทางพอร์ตอนาล็อกที่มีป้ายกำกับ A0, A1 เป็นต้น

    สายริบบิ้นที่ผ่าน Grove Base Hat

  5. ใส่สายริบบิ้นเข้ากับพอร์ตกล้องบน Pi อีกครั้ง โดยดึงคลิปพลาสติกสีดำขึ้น ใส่สายเข้าไป แล้วดันคลิปกลับเข้าที่ ด้านสีน้ำเงินของสายควรหันไปทางพอร์ต USB และ Ethernet

    สายริบบิ้นที่เชื่อมต่อกับพอร์ตกล้องบน Pi

  6. ติดตั้ง Grove Base Hat กลับเข้าที่

เขียนโปรแกรมสำหรับกล้อง

ตอนนี้ Raspberry Pi สามารถเขียนโปรแกรมเพื่อใช้งานกล้องได้โดยใช้ไลบรารี Python PiCamera

งาน - เปิดใช้งานโหมดกล้องแบบเก่า

น่าเสียดายที่เมื่อมีการปล่อย Raspberry Pi OS Bullseye ซอฟต์แวร์กล้องที่มาพร้อมกับ OS ได้เปลี่ยนไป ทำให้ PiCamera ไม่สามารถใช้งานได้โดยค่าเริ่มต้น ขณะนี้มีการพัฒนาไลบรารีใหม่ชื่อ PiCamera2 แต่ยังไม่พร้อมใช้งาน

ในตอนนี้ คุณสามารถตั้งค่า Pi ให้เข้าสู่โหมดกล้องแบบเก่าเพื่อให้ PiCamera ใช้งานได้ พอร์ตกล้องยังถูกปิดใช้งานโดยค่าเริ่มต้น แต่การเปิดใช้งานซอฟต์แวร์กล้องแบบเก่าจะเปิดพอร์ตกล้องโดยอัตโนมัติ

  1. เปิด Pi และรอให้บูตเสร็จ

  2. เปิด VS Code โดยตรงบน Pi หรือเชื่อมต่อผ่าน Remote SSH extension

  3. รันคำสั่งต่อไปนี้ในเทอร์มินัล:

    sudo raspi-config nonint do_legacy 0
    sudo reboot
    

    คำสั่งนี้จะเปิดการตั้งค่าเพื่อเปิดใช้งานซอฟต์แวร์กล้องแบบเก่า จากนั้นรีบูต Pi เพื่อให้การตั้งค่ามีผล

  4. รอให้ Pi รีบูต จากนั้นเปิด VS Code อีกครั้ง

งาน - เขียนโปรแกรมสำหรับกล้อง

เขียนโปรแกรมสำหรับอุปกรณ์

  1. จากเทอร์มินัล สร้างโฟลเดอร์ใหม่ในไดเรกทอรีบ้านของผู้ใช้ pi ชื่อ fruit-quality-detector และสร้างไฟล์ในโฟลเดอร์นี้ชื่อ app.py

  2. เปิดโฟลเดอร์นี้ใน VS Code

  3. เพื่อโต้ตอบกับกล้อง คุณสามารถใช้ไลบรารี Python PiCamera ติดตั้งแพ็กเกจ Pip สำหรับไลบรารีนี้ด้วยคำสั่งต่อไปนี้:

    pip3 install picamera
    
  4. เพิ่มโค้ดต่อไปนี้ในไฟล์ app.py ของคุณ:

    import io
    import time
    from picamera import PiCamera
    

    โค้ดนี้นำเข้าไลบรารีที่จำเป็น รวมถึงไลบรารี PiCamera

  5. เพิ่มโค้ดต่อไปนี้ด้านล่างเพื่อเริ่มต้นกล้อง:

    camera = PiCamera()
    camera.resolution = (640, 480)
    camera.rotation = 0
    
    time.sleep(2)
    

    โค้ดนี้สร้างออบเจ็กต์ PiCamera และตั้งค่าความละเอียดเป็น 640x480 แม้ว่าจะรองรับความละเอียดที่สูงกว่า (สูงสุด 3280x2464) แต่ตัวจำแนกภาพทำงานกับภาพที่มีขนาดเล็กกว่ามาก (227x227) ดังนั้นจึงไม่จำเป็นต้องถ่ายภาพที่มีขนาดใหญ่กว่า

    บรรทัด camera.rotation = 0 ตั้งค่าการหมุนของภาพ สายริบบิ้นจะเข้ามาที่ด้านล่างของกล้อง แต่หากกล้องของคุณถูกหมุนเพื่อให้ชี้ไปยังวัตถุที่คุณต้องการจำแนกได้ง่ายขึ้น คุณสามารถเปลี่ยนบรรทัดนี้เป็นจำนวนองศาที่ต้องการหมุน

    กล้องที่ห้อยลงมาบนกระป๋องเครื่องดื่ม

    ตัวอย่างเช่น หากคุณแขวนสายริบบิ้นไว้ด้านบนของกล้อง ให้ตั้งค่าการหมุนเป็น 180:

    camera.rotation = 180
    

    กล้องต้องใช้เวลาสองสามวินาทีในการเริ่มทำงาน ดังนั้นจึงมี time.sleep(2)

  6. เพิ่มโค้ดต่อไปนี้ด้านล่างเพื่อถ่ายภาพในรูปแบบข้อมูลไบนารี:

    image = io.BytesIO()
    camera.capture(image, 'jpeg')
    image.seek(0)
    

    โค้ดนี้สร้างออบเจ็กต์ BytesIO เพื่อเก็บข้อมูลไบนารี ภาพจะถูกอ่านจากกล้องในรูปแบบไฟล์ JPEG และเก็บไว้ในออบเจ็กต์นี้ ออบเจ็กต์นี้มีตัวชี้ตำแหน่งเพื่อบอกว่าขณะนี้อยู่ที่ตำแหน่งใดในข้อมูล ดังนั้นบรรทัด image.seek(0) จะย้ายตำแหน่งนี้กลับไปที่จุดเริ่มต้นเพื่อให้สามารถอ่านข้อมูลทั้งหมดได้ในภายหลัง

  7. ด้านล่างนี้ เพิ่มโค้ดต่อไปนี้เพื่อบันทึกภาพลงในไฟล์:

    with open('image.jpg', 'wb') as image_file:
        image_file.write(image.read())
    

    โค้ดนี้เปิดไฟล์ชื่อ image.jpg เพื่อเขียน จากนั้นอ่านข้อมูลทั้งหมดจากออบเจ็กต์ BytesIO และเขียนลงในไฟล์

    💁 คุณสามารถถ่ายภาพโดยตรงไปยังไฟล์แทนออบเจ็กต์ BytesIO ได้โดยการส่งชื่อไฟล์ไปยังคำสั่ง camera.capture เหตุผลที่ใช้ BytesIO คือในบทเรียนถัดไป คุณจะสามารถส่งภาพไปยังตัวจำแนกภาพได้

  8. ชี้กล้องไปที่บางสิ่งและรันโค้ดนี้

  9. ภาพจะถูกถ่ายและบันทึกเป็น image.jpg ในโฟลเดอร์ปัจจุบัน คุณจะเห็นไฟล์นี้ในตัวสำรวจของ VS Code เลือกไฟล์เพื่อดูภาพ หากภาพต้องการการหมุน ให้ปรับบรรทัด camera.rotation = 0 ตามความเหมาะสมและถ่ายภาพใหม่

💁 คุณสามารถหาโค้ดนี้ได้ในโฟลเดอร์ code-camera/pi

😀 โปรแกรมกล้องของคุณสำเร็จแล้ว!


ข้อจำกัดความรับผิดชอบ:
เอกสารนี้ได้รับการแปลโดยใช้บริการแปลภาษา AI Co-op Translator แม้ว่าเราจะพยายามให้การแปลมีความถูกต้องมากที่สุด แต่โปรดทราบว่าการแปลอัตโนมัติอาจมีข้อผิดพลาดหรือความไม่ถูกต้อง เอกสารต้นฉบับในภาษาดั้งเดิมควรถือเป็นแหล่งข้อมูลที่เชื่อถือได้ สำหรับข้อมูลที่สำคัญ ขอแนะนำให้ใช้บริการแปลภาษามืออาชีพ เราไม่รับผิดชอบต่อความเข้าใจผิดหรือการตีความผิดที่เกิดจากการใช้การแปลนี้