7.7 KiB
לכידת תמונה - חומרה וירטואלית לאינטרנט של הדברים (IoT)
בחלק זה של השיעור, תוסיפו חיישן מצלמה למכשיר ה-IoT הווירטואלי שלכם, ותקראו תמונות ממנו.
חומרה
מכשיר ה-IoT הווירטואלי ישתמש במצלמה מדומה ששולחת תמונות מקבצים או מהמצלמה שלכם.
הוספת מצלמה ל-CounterFit
כדי להשתמש במצלמה וירטואלית, עליכם להוסיף אחת לאפליקציית CounterFit.
משימה - הוספת מצלמה ל-CounterFit
הוסיפו מצלמה לאפליקציית CounterFit.
-
צרו אפליקציית Python חדשה במחשב שלכם בתיקייה בשם
fruit-quality-detector
עם קובץ יחיד בשםapp.py
וסביבת עבודה וירטואלית של Python, והוסיפו את חבילות ה-Pip של CounterFit.⚠️ ניתן לעיין בהוראות ליצירה והגדרה של פרויקט Python ב-CounterFit בשיעור הראשון אם יש צורך.
-
התקינו חבילת Pip נוספת כדי להוסיף CounterFit shim שיכול לתקשר עם חיישני מצלמה על ידי סימולציה של חלק מחבילת Picamera Pip. ודאו שאתם מתקינים זאת מתוך טרמינל עם סביבת העבודה הווירטואלית מופעלת.
pip install counterfit-shims-picamera
-
ודאו שאפליקציית ה-Web של 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. למרות שרזולוציות גבוהות יותר נתמכות, מסווג התמונות עובד על תמונות קטנות בהרבה (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.
😀 תוכנית המצלמה שלכם הצליחה!
כתב ויתור:
מסמך זה תורגם באמצעות שירות תרגום מבוסס בינה מלאכותית Co-op Translator. למרות שאנו שואפים לדיוק, יש לקחת בחשבון שתרגומים אוטומטיים עשויים להכיל שגיאות או אי דיוקים. המסמך המקורי בשפתו המקורית צריך להיחשב כמקור סמכותי. עבור מידע קריטי, מומלץ להשתמש בתרגום מקצועי על ידי אדם. איננו נושאים באחריות לאי הבנות או לפרשנויות שגויות הנובעות משימוש בתרגום זה.