תוכן עניינים:
2025 מְחַבֵּר: John Day | [email protected]. שונה לאחרונה: 2025-01-13 06:57
הרעיון הוא להעלות תמונות וסרטונים שנעשו עם מצלמה המופעלת בתנועה המחוברת ל- Raspberry Pi כדי להעלות קבצים לענן. תוכנת 'Motion' תומכת בהעלאה ל- Google Drive דרך PyDrive. במאמר זה 'Motion' משמש להעלאה לתמונות Google.
חוּמרָה:
פטל פי 3B+
מצלמת רשת Logitech C920
בחירת החומרה לא נקבעה, פשוט לקחתי את מה שיש בהישג יד.
דרישות מוקדמות:
לנוחות פטל פיי צריך להיות ברשת המקומית שלך - כדי לשלוט בה ללא צג/מקלדת ולהעלות/להוריד קבצים. בשביל זה אתה צריך להיות סוכן ssh במחשב האישי שלך (למשל מרק).
תודה רבה ל ssandbac על הדרכה נהדרת. אם אתה צריך מידע נוסף על אופן ההתקנה של סביבה עיין במאמר זה. שאלתי ממנה התקנת תנועה והגדרת צעדים והוספתי כמה שינויים. בפרט, במקום לשלוח קבצים והתראות בדוגמה זו דוגמה זו משתמשת בהעלאה לאלבום משותף של תמונות Google וקבלת הודעות מסוג "תמונות שנוספו" בסרגל ההודעות.
להלן השלבים:
שלב 1: התקן Linux Motion על פטל
במיוחד בדוגמה זו נעשה שימוש בתנועה v4.0.
1.1 עדכון pi
pi@raspberrypi: ~ $ sudo apt-get update
pi@raspberrypi: ~ $ sudo apt-get upgrade
1.2 הורדת תנועה
pi@raspberrypi: ~ $ sudo apt-get להתקין תנועה
1.3 כעת ערוך קובץ זה עם השינויים הבאים
pi@raspberrypi: ~ $ sudo nano /etc/motion/motion.conf
# התחל במצב שד (רקע) ושחרר מסוף (ברירת מחדל: כבוי)
הדמון על
# השתמש בקובץ כדי לשמור הודעות יומנים, אם לא נעשה שימוש ב- stderr ו- syslog. (ברירת מחדל: לא מוגדרת)
logfile /var/log/motion/motion.log
# רוחב התמונה (פיקסלים). טווח תקף: תלוי במצלמה, ברירת מחדל: 352
רוחב 1920
# גובה התמונה (פיקסלים). טווח תקף: תלוי במצלמה, ברירת מחדל: 288
גובה 1080
# מספר הפריימים המרבי שצריך לצלם בשנייה.
מסגרת 30
# מציין את מספר התמונות שצולמו מראש (שנאגרו) מלפני תנועה
pre_capture 5
# מספר המסגרות שצריך ללכוד לאחר תנועה כבר לא מזוהה
post_capture 5
# פלט תמונות 'רגילות' בעת זיהוי תנועה (ברירת מחדל: מופעל)
פלט_תמונות כבוי
# האיכות (באחוזים) שישמש את דחיסת ה- jpeg
איכות 100
# השתמש ב- ffmpeg כדי לקודד סרטים בזמן אמת
ffmpeg_output_movies כבוי
# או הטווח 1 - 100 שבו 1 פירושו האיכות הגרועה ביותר ו -100 הוא הטוב ביותר.
ffmpeg_variable_bitrate 100
# בעת יצירת סרטונים, יש לשכפל מסגרות לפי הסדר
ffmpeg_duplicate_frames שקר
# בול להפעלה או השבתה של אקסטייפ (ברירת מחדל: כבוי)
use_extpipe on
extpipe ffmpeg -y -f rawvideo -pix_fmt yuv420p -video_size %wx %h -framerate %fps -i צינור: 0 -vcodec libx264 -הגדרה מהירה במיוחד -f mp4 %f.mp4
target_dir/var/lib/motion
# פקודה לביצוע בעת קובץ סרט
; on_movie_end sudo python3 /var/lib/motion/photos.py %f.mp4 &
השאר את האחרונה עם נקודה -פסיק לעת עתה (הגיב) ללא תגובה לאחר שהבטחת שהקלטת וידיאו והעלאה פועלים.
1.4 לאחר מכן שנה
pi@raspberrypi: ~ $ sudo nano/etc/default/motion
pi@raspberrypi: ~ $ start_motion_daemon = כן
שלב 2: הגדר את ממשק ה- API של תמונות Google עבור Python
2.1 מומלץ ליצור חשבון חדש למטרה זו כדי לשתף אלבום עם החשבון הראשי שלך כדי לקבל התראות כאשר מוסיפים קבצים חדשים, ועוד שטח אחסון. הפעל את ממשק ה- API של תמונות Google עבור החשבון שאתה עומד להשתמש בו להעלאה.
אתה אמור לקבל קובץ credentials.json לאחר מכן.
2.2 הגדרת סביבת פייתון
בעיקרון הגדרת הסביבה נדרשת רק על פטל. אבל זה דורש אישור oauth שהוא נוח יותר לביצוע במחשב. כדי לעשות זאת על פטל, עליך לחבר אליו צג/מקלדת או להתקין ממשק משתמש מרוחק של שולחן עבודה. בדיוק התקנתי את אותה סביבה על פטל ועל מחשב שני. אז השלבים 2.2.1..2.2.3 בוצעו במחשב, 2.2.1, 2.2.2, 2.2.5, 2.2.6 ב- Rpi
2.2.1 התקן את פייתון 3
2.2.2 התקן חבילות Google api בהתאם למדריך*(ראה 5.1)
במחשב
pip3 להתקין-שדרג את google-api-python-client google-auth-httplib2 google-auth-oauthlib
על פטל
pi@raspberrypi: ~ $ sudo pip3 install-שדרוג google-api-python-client google-auth-httplib2 google-auth-oauthlib
2.2.3 בדוק העלאת סקריפט לתמונות גוגל.. הוא ממוקם ב github שלי. הכנס אותו לאותה ספרייה עם credentials.json.
2.2.4 צלם קצת ובדק העלאה
python3 photos.py image.jpg
התקן תלות חסרות אם יש ונסה שוב. כתוצאה מכך אתה צריך לקבל token.pickle בספריית התסריט וגם אלבום משותף חדש שנוצר בממשק האינטרנט של תמונות Google שלך עם image.jpg. ככל שאתה מקבל token.pickle אתה כבר לא צריך credentials.json עבור photos.py באותה ספרייה.
2.2.5 שתף את האלבום עם החשבון על מה שאתה רוצה לקבל הודעות על מדיה חדשה. הוסף חשבון זה לטלפון שלך.
2.2.6 שים photos.py ו- token.pickle ב-/var/lib/motion על פטל. משתמש 'pi' אינו יכול לכתוב ל'הגדרות של התנועה ', לכן העלה תחילה ל- /home /pi
scp photos.py token.pickle pi@IP:/home/pi
לאחר מכן היכנס לפטל והעבר את הקבצים תחת סודו
ssh pi@IP
pi@raspberrypi: ~ $ sudo mv photos.py token.pickle/var/lib/motion
2.2.7 בדוק כיצד ההעלאה פועלת על פטל. קח תמונה עם fswebcam ונסה להעלות אותה
pi@raspberrypi: ~ $ sudo fswebcam /var/lib/motion/image.jpg
pi@raspberrypi: ~ $ sudo python3 /var/lib/motion/photos.py /var/lib/motion/image.jpg
באלבום "helloworld" אמורה להיות image-j.webp
שלב 3: בדוק
3.1 התחל שירות תנועה
pi@raspberrypi: ~ $ sudo service motion start
אתה יכול לשנות את הפקודה ל "עצור" או "הפעלה מחדש"
3.2 אפשר יומני תנועה
pi@raspberrypi: ~ $ tail -f /var/log/motion/motion.log
3.2 צפה בפלט המצלמה בהתקן אחר המחובר לאותה רשת מקומית. היכנס לדפדפן:
IP: 8081
3.3 מבט ביומנים המתן עד שתזוהה התנועה והקובץ NAME.mp4 ייכתב ב-/var/lib/motion. לאחר מכן הפעל העלאת סקריפט באופן ידני
pi@raspberrypi: ~ $ sudo python3 /var/lib/motion/photos.py /var/lib/motion/NAME.mp4
בדוק את עקבות הפיתון. המתן עד event_end יופיע ב- motion.log. לאחר מכן עבור אל אלבום "helloworld" בתמונות Google שלך ובדוק אם יש סרטון שהועלה.
3.4 אם ההעלאה הצליחה ביטול תגובה ב- /etc/motion.conf השורה:
pi@raspberrypi: ~ $ sudo nano /etc/motion.conf
# פקודה לביצוע כאשר קובץ סרט מוכן
on_movie_end sudo python3 /var/lib/motion/photos.py %f.mp4 &
pi@raspberrypi: ~ $ סנכרון
pi@raspberrypi: ~ $ sudo service motion service restart
3.5 התבוננות ביומני התנועה ובאלבום בדוק אם הסרטון הועלה אוטומטית.
3.6 לחלופין, שתף את האלבום עם החשבון הראשי שלך כדי לקבל הודעה בעת הוספת הסרטון או התמונה החדשה.
שלב 4: אופציונלי: הגדר גישה לאינטרנט למצלמת הזרמת זמן אמת
שלב זה מבוסס על הדרכת Parreno של מישל. פשוט בחרתי FreeDNS במקום NoIP כפי שהומלץ כאן.
4.1 הגדר גישה מורשית לשרת תנועה של הזרמת וידאו:
pi@raspberrypi: ~ $ sudo nano /etc/motion/motion.conf
# הגדר את שיטת האימות (ברירת מחדל: 0)
# 0 = מושבת
# 1 = אימות בסיסי
# 2 = עיכול MD5 (האימות הבטוח יותר)
stream_auth_method 2
# אימות לזרם. שם משתמש לתחביר: סיסמא
# ברירת מחדל: לא מוגדר (מושבת)
שם משתמש webcontrol_authentication: סיסמא
# מספר מסגרת מקסימלי לזרמי זרמים (ברירת מחדל: 1)
stream_maxrate 30
# הגבל את חיבורי הזרם ל- localhost בלבד (ברירת מחדל: מופעל)
stream_localhost כבוי
אם אינך מתכוון להשתמש בממשק בקרת האינטרנט מהרשת החיצונית השאירו אותו מושבת (כברירת מחדל)
# הגבל את חיבורי השליטה ל- localhost בלבד (ברירת מחדל: מופעל)
webcontrol_localhost מופעל
כמו כן, מכיוון שפטל עובר לרשת, אני ממליץ לשנות את סיסמת הפטל המוגדרת כברירת מחדל
pi@raspberrypi: ~ $ passwd
למרות שיציאת ssh 22 אינה מנותבת מחדש לפטל, עדיין.
4.2 עבור לאתר FreeDNS
4.3 הרשמה
4.4 הוסף תת -דומיין (לחברים -> תת -דומיינים)
4.5 בחר לקוח DNS להתקנה על פטל (לחברים -> DNS דינאמי -> משאבי DNS סינמיים -> לקוחות DNS דינאמיים)
בחרתי ב- wget_script update.sh מאת אדם דין (בתחתית הדף)
ישנם מצייני מקום _YOURAPIKEYHERE_ ו- _YOURDOMAINHERE_. כדי לקבל אותם עבור אל (לחברים -> DNS דינאמי)
ובעמוד למטה תמצא דוגמאות לסקריפטים עם ה- APIKEY ו- DOMAIN שלך (זה שנוסף ב 4.4). לקחתי את הערכים האלה מסקריפט Wget והחלפתי את _YOURAPIKEYHERE_ ו- _YOURDOMAINHERE_ ב- update.sh
4.6 לאחר מכן הפעל את update.sh על פטל. זה עשוי לדרוש dnsutils עבור nslookup. התקן אותו אז:
pi@raspberrypi: ~ $ sudo apt-get dnsutils
4.7 לאחר מכן הגדר את הנתב שלך לנתב מחדש בקשות עולם חיצוני ליציאת 8081 ל- ip של הפטל
4.8 שמור את ה- ip עבור MAC של הפטל שלך בהגדרת DHCP כך של- Rpi תמיד יהיה אותו IP
4.9 לאחר מכן היכנס בדפדפן בהתקן שאינו מחובר לרשת המקומית:
הדומיין שלך: 8081
הזן את האישורים שהגדרת ב motion.conf.
בדוק כיצד הסרטון עובד.
4.10 על מנת לעדכן את DDNS באופן אוטומטי הגדרת משימת cron. ראה quick_cron_example על (לחברים -> DNS דינאמי)
שלב 5: טיפים
5.1 היו קשובים בהתקנת חבילות פיתון על פטל. ביליתי יום בניפוי באגים - הבעיה הייתה שמסוף התסריט רץ היטב, אך התקשרתי מחזרה לאירוע בתנועה לא עשתה זאת. מה שהחמיר את זה הוא שהעקבות מהתסריט לא היו זמינות במקרה האחרון.
הסיבה הייתה שבעקבות המדריך התקנתי את החבילות עבור משתמש 'pi' (אשר כברירת מחדל היא בספריית /home /pi ומוגבלת עבור משתמשים אחרים) אך כדי להריץ את הסקריפט כילד של שירות 'תנועה' החבילות חייבות להיות זמין גם למשתמש 'תנועה'. אז לבסוף תיקנתי את זה בהתקנת החבילות כ
sudo pip3…
זו עדיין לא דרך נכונה שעובדת. התקנה ללא sudo as pip3 -מערכת נתנה לי טעויות משום מה.
בהתאם לכך התסריט נקרא גם תחת סודו (ראה motion.conf).
במהלך פתרון הבעיות הזה ביצעתי הרבה שינויים מיותרים ואני לא בטוח מה נחוץ ועכשיו עצלן מכדי להחזיר אותם בהדרגה ולראות מתי זה מפסיק לעבוד. במיוחד, ניתנו זכויות מנהל תנועה:
pi@raspberrypi: ~ $ תנועה קבוצות
motion: motion adm sudo משתמשי וידיאו אודיו netdev pi
pi@raspberrypi: ~ $ sudo cat /etc/sudoers.d/010_pi-nopasswd
pi ALL = (ALL) NOPASSWD: ALL
תנועה ALL = (ALL) NOPASSWD: ALL
כמו כן, החלפת בעלי הקבצים והרשאות דומים להעלאה ל- Google Drive. כנראה שזה יכול לעזור לך במקרה שיש לך בעיה דומה.
5.2 ממשק API של תמונות Google מאפשר להוסיף קבצים לאלבומים משותפים רק כך שכל מי שיש לו את הקישור יוכל לגשת אליו. אין לשתף אותו בקישור ולמחוק סרטים ישנים או להעביר אותם לאשפה או מהאלבום. במקרה האחרון הם נשארים בחשבון.
5.3 עוזר התמונות של Google מזהה פנים, וזה די שימושי אם איכות המצלמה בסדר. כבונוס הוא יוצר סוגים של מדיה מפוארת של אוספים וגיפים וכו '.
5.4 ניסיתי להשתמש במודם USB LTE 4G לגישה לאינטרנט והנה התוצאות שלי Huawei E3372h-153 עובד עם פטל ללא בעיות ותוכנות נוספות 5.4.2 אפשר גם נקודה חמה כך ש- Rasperry משותפת לחיבור אינטרנט באמצעות wifi. יש https://howtoraspberrypi.com/create-a-wi-fi-hotspot-in-less-than-10-minutes-with-pi-raspberry/ מדריך פשוט מאוד כיצד לעשות זאת באמצעות RaspAP. 5.4.3 DNS דינאמי לא עבד ברשת 4G של הקארי שלי. יש הסבר מדוע
5.5 לאחר השימוש במערכת זו במשך מספר שבועות, למרות שסרטונים נוחים יותר לצפייה והעלאה, תמונות Google עובדות טוב יותר עם תמונות. למשל זה מאפשר דברים/פנים לקבץ ניתוח תמונות בלבד, ורק אז לחפש פרצופים/דברים מהתמונות בסרטונים, אך לא להפך. אז אני הולך לבדוק תמונות שמעלות סרטונים במקום.