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/he/4-manufacturing/lessons/2-check-fruit-from-device/pi-camera.md

9.5 KiB

לצלם תמונה - Raspberry Pi

בחלק זה של השיעור, תוסיפו חיישן מצלמה ל-Raspberry Pi שלכם ותצלמו תמונות באמצעותו.

חומרה

ה-Raspberry Pi זקוק למצלמה.

המצלמה שתשתמשו בה היא מודול מצלמה של Raspberry Pi. מצלמה זו תוכננה לעבוד עם ה-Raspberry Pi ומתחברת באמצעות מחבר ייעודי על הלוח.

💁 מצלמה זו משתמשת ב-Camera Serial Interface, פרוטוקול של Mobile Industry Processor Interface Alliance, הידוע כ-MIPI-CSI. זהו פרוטוקול ייעודי לשליחת תמונות.

חיבור המצלמה

ניתן לחבר את המצלמה ל-Raspberry Pi באמצעות כבל סרט.

משימה - חיבור המצלמה

מצלמת Raspberry Pi

  1. כבו את ה-Pi.

  2. חברו את כבל הסרט שמגיע עם המצלמה למצלמה. לשם כך, משכו בעדינות את הקליפס השחור במחזיק כך שייצא מעט, ואז החליקו את הכבל לתוך השקע, כאשר הצד הכחול פונה הרחק מהעדשה, והפסים המתכתיים פונים לכיוון העדשה. לאחר שהכבל נכנס עד הסוף, דחפו את הקליפס השחור חזרה למקומו.

    ניתן למצוא אנימציה שמראה כיצד לפתוח את הקליפס ולהכניס את הכבל בתיעוד Raspberry Pi Getting Started with the Camera module.

    כבל הסרט מוכנס למודול המצלמה

  3. הסירו את ה-Grove Base Hat מה-Pi.

  4. העבירו את כבל הסרט דרך החריץ למצלמה ב-Grove Base Hat. ודאו שהצד הכחול של הכבל פונה לכיוון הפורטים האנלוגיים המסומנים A0, A1 וכו'.

    כבל הסרט עובר דרך ה-Grove Base Hat

  5. הכניסו את כבל הסרט לשקע המצלמה ב-Pi. שוב, משכו את הקליפס השחור למעלה, הכניסו את הכבל, ואז דחפו את הקליפס חזרה. הצד הכחול של הכבל צריך לפנות לכיוון פורטי ה-USB והאת'רנט.

    כבל הסרט מחובר לשקע המצלמה ב-Pi

  6. החזירו את ה-Grove Base Hat למקומו.

תכנות המצלמה

כעת ניתן לתכנת את ה-Raspberry Pi לשימוש במצלמה באמצעות ספריית Python בשם PiCamera.

משימה - הפעלת מצב מצלמה ישן

לצערנו, עם שחרור מערכת ההפעלה Raspberry Pi OS Bullseye, תוכנת המצלמה שהגיעה עם המערכת השתנתה, ולכן כברירת מחדל PiCamera לא עובדת. ישנו תחליף בפיתוח, בשם PiCamera2, אך הוא עדיין לא מוכן לשימוש.

בינתיים, ניתן להגדיר את ה-Pi למצב מצלמה ישן כדי לאפשר ל-PiCamera לעבוד. שקע המצלמה גם מושבת כברירת מחדל, אך הפעלת תוכנת המצלמה הישנה תפעיל אותו אוטומטית.

  1. הפעילו את ה-Pi והמתינו עד שיסיים את תהליך האתחול.

  2. הפעילו את VS Code, או ישירות על ה-Pi, או באמצעות תוסף Remote SSH.

  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.

😀 תוכנית המצלמה שלכם הצליחה!


כתב ויתור:
מסמך זה תורגם באמצעות שירות תרגום מבוסס בינה מלאכותית Co-op Translator. למרות שאנו שואפים לדיוק, יש לקחת בחשבון שתרגומים אוטומטיים עשויים להכיל שגיאות או אי דיוקים. המסמך המקורי בשפתו המקורית צריך להיחשב כמקור סמכותי. עבור מידע קריטי, מומלץ להשתמש בתרגום מקצועי על ידי אדם. איננו נושאים באחריות לאי הבנות או לפרשנויות שגויות הנובעות משימוש בתרגום זה.