מצלמת רספברי פיי מופעלת בעוצמת קול

טכנולוגיה נאותה

הרפתקאותיי עם רספברי פי, חלק מי יודע כמה: והפעם איך להפעיל מצלמה באמצעות עוצמת קול (סוג של מצלמת ריגול או משהו כזה) באמצעות רספברי פי.

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

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

לעומת זאת רספברי פיי – מתחברת בusb למה שנרצה, מצלמת ומזרימה בלי בעיה אמיתית (1080P אבל זה לגמרי מספיק. אין סיבה ל4k במצלמות אבטחה), והכי כיף – ארץ האפשרויות הבלתי מוגבלות שנקראת לינוקס, או Raspberry OS.

אז קודם הדגמה קטנה על איך זה עובד (סלחו לי על הצילום, ניסיתי לא לעשות מזה סיפור גדול), ובהמשך, איך עושים את זה:

 

המערכת

המערכת שלנו מכילה רספברי פי 3 מודל b, מיקרופון חלל (Omnidirectional, שמיועד להקליט חלל ולא אדם ספציפי), ומצלמת רספברי פי. זה הכל.

רספברי פי ומצלמה

רספברי פי ומצלמה

הגדרת המצלמה

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

הגדרת המיקרופון

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

בדיקת מכשירים פנויים להקלטה ראשונית

ולאחר מכן ננסה להקליט במקרה של ההגדרות כאן למעלה, הניסיון הסתכם בכתיבת הפקודה הבאה בטרמינל: arecord -f dat -r 192 -D hw:2,0 -d 5 -c 2 test.wav

כשהתוצאה של הפקודה הייתה כשזה הפלט, צריך להפחית את מספר ערוצי ההקלטה - אחרי האות c. עד למינימום שזה 1

הורדתי את כמות הערוצים ל1

וכשהתוצאה הייתה:כשזה הפלט, צריך לשנות את קצב הדגימה למה שכתוב שהוא מקבל מהמיקרופון - אחרי המילה Got

כתוב במפורש בתוצאה שהשתמשתי בהגדרה בסיסית לא נכונה של הקצב, והוא לא 192k אלא 48k. את התוצאות הללו ניקח אתנו לשלב הבא.

התקנת Soundmeter ושימוש בסיסי

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

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

אז איך עושים את זה?

פותחים את הטרמינל ומעתיקים את השורה הבאה, שתתקין את כל הDependencies שהן התוכנות שהפונקציה שאנחנו מחפשים עושה בהם שימוש, והם לאו דווקא מותקנות בברירת מחדל במערכת שלנו:

$ sudo apt-get install portaudio19-dev python-dev alsa-utils

אחרי שההתקנה מסתיימת אפשר להתקין את התוכנה עצמה:

$ pip install soundmeter pyaudio

ועכשיו נשאר רק להצמיד את ההגדרות הנכונות של המיקרופון לתוכנה, כי היא לא בהכרח יודעת מה ההגדרות של המיקרופון. אז נכנסם לתקייה הנסתרת ~/.soundmeter/config

ותחת הכותרת דואגים שהקצב ומספר הערוצים יתאימו למה שמצאתם כשחקרתם את המיקרופון

[soundmeter]
frames_per_buffer = 2048
format = 8
channels = 1
rate = 48000
audio_segment_length = 0.5
rms_as_trigger_arg = False

שבמקרה של המיקרופון שאני השתמשתי בו, הקצב הוא 48000, ומספר הערוצים הוא 1 (מיקרופון מונו).

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

$ soundmeter --collect --seconds 10
Collecting RMS values...
   154  Timeout
Collected result:
    min:        152
    max:        211
    avg:        156

 

הקובץ recorder.sh - הפעלת המצלמה

אוקי, אז עכשיו נתחיל בתוכן של הקובץהחדש.

#!/bin/sh

DATE=$(date + "%Y-%m-%d_%H%M")

STATION="livingroom"
killall soundmeter

raspivid -t 60000 -o Desktop/vid_"$DATE"_"$STATION".h264

soundmeter --trigger +1000 4 -d --action exec --exec recorder.sh

וכעת, הסבר (לפי שורה):

1. הגדרת הקובץ כקובץ shell. הכרחי כדי שהרספברי יקרא אותו ככזה.
3. השמה של תאריך ושעה בתוך המשתנה DATE
5. הגדרה של מיקום (לא הכרחי – כאילו לדמות מצב שבו יש כמה וכמה מצלמות כאלו) – כרגע הגדרתי livingroom. השם הזה יופיע בשמות הקבצים.
7. פתיחה של תוכנת הקלטת הוידאו הגנרית של רספברי פי, והקלטה של קטע בין 60 שניות, ולאחר מכן שמירה שלו בקובץ שהתחילית שלו היא vid ואחר כך התאריך והמיקום כמו שהגדרנו אותו, ואת הקובץ הוא ישמור כרגע בתקייה Desktop בפורמט שנקרא h.264.
8. ואז פתיחה מחודשת של soundmeter עם אותם פרמטרים מקודם, קול מעל עוצמה של 1000 כל 2 שניות יפעיל את הקובץ recorder.sh, וחוזר חלילה.

את התוכן הזה שומרים בתוך קובץ חדש recorder.sh בתקיית pi ברספרי שלכם, ואז נכנסים לטרמינל ודואגים להרשאות על ידי

$ chmod +x recorder.sh

 

להכניס את התוכנה לעבודה מתמשכת

נייצר עוד קובץ בשם soundmeterstop.sh, שידאג כל הזמן שsoundmeter עובד ולא נכבה.

#!/bin/sh
killall soundmeter 
soundmeter --trigger +1000 4 --action exec --exec recorder.sh

מה שהקובץ הזה עושה הוא להרוג את כל התהליכים של soundmeter ולפתוח אותם שוב. נשנה גם את ההרשאות לקובץ הזה על ידי chmod -x ושם הקובץ עם המיקום שלו.  זה כשלעצמו לא מספיק, עכשיו צריך לגרום לקובץ הזה לרוץ באופן עקבי.

אז נפתח את הCrontab ידידנו, שמאפשר לנו לתזמן פעולות בצורה אוטומטית ושליווה אותנו גם במדריך אחר, על ידי כתיבה בטרינל:

crontab -e

ונכתוב בו, מתחת למה שכבר כתוב ומתחת להערות:

0 */1 * * * /home/pi/soundmeterstop.sh

מה שיפעיל כל שעה עגולה את הקובץ soundmeterstop.sh. לפרטים נוספים אפשר לראות את החלק שמסביר על crontab במדריך פעולות חוזרות ברסברי פיי בעזרת פקודות Shell.

וכעת ניצור קובץ חדש בשם soundmeterstop.sh בתקיית pi, ובוא נכתוב:

#!/bin/sh
killall soundmeter 
soundmeter --trigger +1000 4 --action exec --exec recorder.sh

הסבר לפי שורות:

  1. תחילת קובץ הShell
  2. תסגור את כל האירועים של soundmeter
  3. תפתח מחדש את soundmeter ותמתין ל2 שניות רצופות (לפי הaudio_segment_length שהגדרנו בקובץ ההגדרות שיהיה 0.5). אם התנאי מתבצע, תבצע את הפעלת הקובץ recorder.sh

וזהו

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

לתוכן זה נכתבו 0 תגובות

עליך להתחבר כדי לבצע פעולה זו...

הצטרפות

דילוג לתוכן