11 KiB
จับภาพ - ฮาร์ดแวร์ IoT เสมือน
ในส่วนนี้ของบทเรียน คุณจะเพิ่มเซ็นเซอร์กล้องให้กับอุปกรณ์ IoT เสมือนของคุณ และอ่านภาพจากกล้องนั้น
ฮาร์ดแวร์
อุปกรณ์ IoT เสมือนจะใช้กล้องจำลองที่ส่งภาพจากไฟล์หรือจากเว็บแคมของคุณ
เพิ่มกล้องใน CounterFit
เพื่อใช้กล้องเสมือน คุณต้องเพิ่มกล้องในแอป CounterFit
งาน - เพิ่มกล้องใน CounterFit
เพิ่มกล้องในแอป CounterFit
-
สร้างแอป Python ใหม่ในคอมพิวเตอร์ของคุณในโฟลเดอร์ชื่อ
fruit-quality-detector
โดยมีไฟล์เดียวชื่อapp.py
และสร้างสภาพแวดล้อมเสมือนของ Python (virtual environment) จากนั้นเพิ่มแพ็กเกจ pip ของ CounterFit⚠️ คุณสามารถดู คำแนะนำในการสร้างและตั้งค่าโปรเจกต์ Python ของ CounterFit ในบทเรียนที่ 1 หากจำเป็น
-
ติดตั้งแพ็กเกจ Pip เพิ่มเติมเพื่อเพิ่ม CounterFit shim ที่สามารถสื่อสารกับเซ็นเซอร์กล้องโดยจำลองบางส่วนของ แพ็กเกจ Picamera Pip ตรวจสอบให้แน่ใจว่าคุณติดตั้งจากเทอร์มินัลที่เปิดใช้งาน virtual environment แล้ว
pip install counterfit-shims-picamera
-
ตรวจสอบให้แน่ใจว่าแอปเว็บ CounterFit กำลังทำงานอยู่
-
สร้างกล้อง:
-
ในกล่อง Create sensor ในแถบ Sensors ให้เลือก Sensor type เป็น Camera
-
ตั้งค่า Name เป็น
Picamera
-
เลือกปุ่ม Add เพื่อสร้างกล้อง
กล้องจะถูกสร้างและปรากฏในรายการเซ็นเซอร์
-
เขียนโปรแกรมกล้อง
ตอนนี้อุปกรณ์ IoT เสมือนสามารถเขียนโปรแกรมเพื่อใช้งานกล้องเสมือนได้แล้ว
งาน - เขียนโปรแกรมกล้อง
เขียนโปรแกรมสำหรับอุปกรณ์
-
ตรวจสอบให้แน่ใจว่าแอป
fruit-quality-detector
เปิดอยู่ใน VS Code -
เปิดไฟล์
app.py
-
เพิ่มโค้ดต่อไปนี้ที่ด้านบนของไฟล์
app.py
เพื่อเชื่อมต่อแอปกับ CounterFit:from counterfit_connection import CounterFitConnection CounterFitConnection.init('127.0.0.1', 5000)
-
เพิ่มโค้ดต่อไปนี้ในไฟล์
app.py
ของคุณ:import io from counterfit_shims_picamera import PiCamera
โค้ดนี้นำเข้าไลบรารีที่จำเป็น รวมถึงคลาส
PiCamera
จากไลบรารี counterfit_shims_picamera -
เพิ่มโค้ดต่อไปนี้ด้านล่างเพื่อเริ่มต้นกล้อง:
camera = PiCamera() camera.resolution = (640, 480) camera.rotation = 0
โค้ดนี้สร้างออบเจ็กต์ PiCamera และตั้งค่าความละเอียดเป็น 640x480 แม้ว่าจะรองรับความละเอียดที่สูงกว่า แต่ตัวจำแนกภาพ (image classifier) ทำงานกับภาพที่มีขนาดเล็กกว่ามาก (227x227) ดังนั้นจึงไม่จำเป็นต้องจับภาพที่มีขนาดใหญ่กว่า
บรรทัด
camera.rotation = 0
ตั้งค่าการหมุนของภาพเป็นองศา หากคุณต้องการหมุนภาพจากเว็บแคมหรือไฟล์ ให้ตั้งค่าตามความเหมาะสม ตัวอย่างเช่น หากคุณต้องการเปลี่ยนภาพกล้วยในโหมดแนวนอนของเว็บแคมให้เป็นแนวตั้ง ให้ตั้งค่าcamera.rotation = 90
-
เพิ่มโค้ดต่อไปนี้ด้านล่างเพื่อจับภาพในรูปแบบข้อมูลไบนารี:
image = io.BytesIO() camera.capture(image, 'jpeg') image.seek(0)
โค้ดนี้สร้างออบเจ็กต์
BytesIO
เพื่อเก็บข้อมูลไบนารี ภาพจะถูกอ่านจากกล้องในรูปแบบไฟล์ JPEG และเก็บไว้ในออบเจ็กต์นี้ ออบเจ็กต์นี้มีตัวชี้ตำแหน่งเพื่อระบุว่าข้อมูลอยู่ที่ตำแหน่งใด ดังนั้นบรรทัดimage.seek(0)
จะย้ายตำแหน่งกลับไปที่จุดเริ่มต้นเพื่อให้สามารถอ่านข้อมูลทั้งหมดได้ในภายหลัง -
ด้านล่างนี้ ให้เพิ่มโค้ดต่อไปนี้เพื่อบันทึกภาพลงในไฟล์:
with open('image.jpg', 'wb') as image_file: image_file.write(image.read())
โค้ดนี้เปิดไฟล์ชื่อ
image.jpg
เพื่อเขียน จากนั้นอ่านข้อมูลทั้งหมดจากออบเจ็กต์BytesIO
และเขียนลงในไฟล์💁 คุณสามารถจับภาพโดยตรงลงในไฟล์แทนออบเจ็กต์
BytesIO
ได้โดยส่งชื่อไฟล์ไปยังคำสั่งcamera.capture
เหตุผลที่ใช้BytesIO
คือในภายหลังในบทเรียนนี้ คุณสามารถส่งภาพไปยังตัวจำแนกภาพได้ -
ตั้งค่าภาพที่กล้องใน CounterFit จะจับภาพ คุณสามารถตั้งค่า Source เป็น File แล้วอัปโหลดไฟล์ภาพ หรือเลือก Source เป็น WebCam และภาพจะถูกจับจากเว็บแคมของคุณ ตรวจสอบให้แน่ใจว่าคุณเลือกปุ่ม Set หลังจากเลือกภาพหรือเลือกเว็บแคม
-
ภาพจะถูกจับและบันทึกเป็น
image.jpg
ในโฟลเดอร์ปัจจุบัน คุณจะเห็นไฟล์นี้ในตัวสำรวจของ VS Code เลือกไฟล์เพื่อดูภาพ หากภาพต้องการการหมุน ให้ปรับบรรทัดcamera.rotation = 0
ตามความเหมาะสมและถ่ายภาพใหม่
💁 คุณสามารถหาโค้ดนี้ได้ในโฟลเดอร์ code-camera/virtual-iot-device
😀 โปรแกรมกล้องของคุณสำเร็จแล้ว!
ข้อจำกัดความรับผิดชอบ:
เอกสารนี้ได้รับการแปลโดยใช้บริการแปลภาษา AI Co-op Translator แม้ว่าเราจะพยายามให้การแปลมีความถูกต้องมากที่สุด แต่โปรดทราบว่าการแปลโดยอัตโนมัติอาจมีข้อผิดพลาดหรือความไม่ถูกต้อง เอกสารต้นฉบับในภาษาดั้งเดิมควรถือเป็นแหล่งข้อมูลที่เชื่อถือได้ สำหรับข้อมูลที่สำคัญ ขอแนะนำให้ใช้บริการแปลภาษามืออาชีพ เราไม่รับผิดชอบต่อความเข้าใจผิดหรือการตีความผิดที่เกิดจากการใช้การแปลนี้