תוכן עניינים:

זיהוי כוכבים באמצעות מחשב ראייה (OpenCV): 11 שלבים (עם תמונות)
זיהוי כוכבים באמצעות מחשב ראייה (OpenCV): 11 שלבים (עם תמונות)

וִידֵאוֹ: זיהוי כוכבים באמצעות מחשב ראייה (OpenCV): 11 שלבים (עם תמונות)

וִידֵאוֹ: זיהוי כוכבים באמצעות מחשב ראייה (OpenCV): 11 שלבים (עם תמונות)
וִידֵאוֹ: מבוא למערכות ראיה ממוחשבות Vision Systems 2024, יולי
Anonim
זיהוי כוכבים באמצעות מחשב ראייה (OpenCV)
זיהוי כוכבים באמצעות מחשב ראייה (OpenCV)

מדריך זה יתאר לך כיצד ליצור תוכנית ראיית מחשב לזיהוי אוטומטי של דפוסי כוכבים בתמונה. השיטה משתמשת בספריית OpenCV (Open-Source Computer Vision) ליצירת קבוצה של מפלי HAAR מאומנים שניתן להשתמש בהם לזיהוי דפוסי כוכבים ספציפיים. אף על פי שמדריך זה נמצא בהקשר של זיהוי תבניות כוכבים, ניתן ליישם את תהליך OpenCV שאני מתאר גם על יישומים אחרים - כך שהוא מקווה שיהיה שימושי!

הפרויקט מסוכם בסרטון זה:

למה כתבתי את זה להוראה?

  1. שיטת זיהוי תבניות הכוכבים שאני מפתח אני מאמינה שיש לה פוטנציאל ליישם אותה על מגוון רחב של פרויקטים של אסטרונומיה חובבים - בין אם זו כיוון טלסקופ, סיווג תמונות אוטומטי, או אפילו בסופו של דבר חיישן כוכבים בקוד פתוח או CubeSat חובבני.
  2. יש כאן המון תוכנות טובות של OpenCV, אבל למרות זאת מצאתי שזה תהליך מאוד קשה ללמוד בהתחלה, אז אני מקווה שמדריך זה יהווה התייחסות טובה לאנשים אחרים המעוניינים להכשיר מסווגי HAAR ל- OpenCV (לא בהכרח לעשות עם אסטרונומיה אולי!).
  3. אני לא מתכנת בעצמי, אז הפרויקט הזה ממש דחף את ההבנה שלי. יש לקוות שכתיבת יצרנים אחרים, מנוסים יותר, יקבלו השראה לעבוד על הרעיון הזה ולתרום ל- GitHub ולהוראה באמצעות הערות בדף זה.
  4. אסטרונומיה חובבנית ושיטות התמצאות הן עניין גדול שלי, עיין במדריך הקודם שלי הכולל ארדואינו כוכב-ממצא לטלסקופים.

תמונת השער של Instructable זה היא של עיצוב קונספט 3U CubeSat שהשתתפתי בעיצוב שלו. השתמשתי בו כדי להמחיש את ההנחיה הזו מכיוון שהיישום המקורי של מערכת זיהוי הכוכבים של ראיית המחשב היה מיועד לחיישן התמצאות עבור CubeSats מתוצרת חובבנים, באמצעות מצלמת Raspberry Pi V2. אני מאמין שיש עוד יישומים פוטנציאליים נוספים של זיהוי כוכבי ראייה ממוחשבת, אבל אני חושב שזה הכי מגניב!

מילון מונחים קטן:

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

אשד - מסווג שהוכשר לזהות אובייקט מטרה ספציפי.

Fiducial Marker - סמן המוסיף נקודת התייחסות חזותית לתמונה.

HAAR - מאפיינים דמויי שיער הם סוג של תכונת תמונה המשמשת לאימון מסווג.

OpenCV - Open Source Computer Vision, ספרייה של כלי ראיית מחשבים.

Stellarium - תוכנת קוד פתוח לאסטרונומיה.

שלב 1: דרישות

OpenCV היא ספרייה מבוססת לינוקס, כך שלמרות שאפשר לכאורה להפעיל אותה היטב ב- Windows, יהיה לך הרבה יותר קל להריץ אותה בסביבת לינוקס (קח את זה ממני והרבה ימים לנסות להפעיל אותה במלואה. חלונות!). כניסוי, הורדתי והפעלתי את OpenCV ב- Raspberry Pi 3B+שלי, שהצליח, אם כי אימון מסווגים הוא תהליך עתיר זיכרון RAM, כך שאם אתה רוצה לעשות זאת בכל מהירות, המסלול המומלץ הוא לשכור שרת וירטואלי של Linux (שיכולה להיות זולה באופן מפתיע למעשה) במשך כמה ימים/שבועות/חודשים והשתמשו בה כסביבה ייעודית להפעיל את אימון המסווג. תוכל לשלוט בשרת ממחשב Windows באמצעות לקוח SSH כגון Putty. לאחר אימון המפלים באמצעות ה- VPS, ניתן להוריד אותם למחשב Windows שלך, ולהשתמש ב- Python להפעלת תוכנית זיהוי התמונות בסביבת Windows.

שרת וירטואלי של לינוקס:

יש צורך בשרת וירטואלי של Linux (VPS) לביצוע תהליכי ההכשרה של מפל HAAR. בתחילה שכרתי שרת עם 8 ג'יגה -בייט זיכרון RAM ואובונטו 16.04.6 (LTS) x64, ומאוחר יותר שני כדי להכפיל את הקצב שבו אוכל לאמן מפלים, אם כי תזדקק למינימום אחד בלבד

תוֹכנָה:

  • סטלריום - זו תוכנת פלנטריום/אסטרונומיה וירטואלית, הזמינה באופן חופשי. הוא ישמש לאסוף תמונות כוכבים מדומות לשימוש בבדיקות.
  • מרק - זהו לקוח SSH המשמש לשליטה ב- VPS באמצעות שורת הפקודה.
  • WinSCP - זה משמש לביצוע העברת קבצים ממחשב Windows.

שלב 2: הגדרת VPS

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

בערך, התהליך כולל:

  1. יצירת שרת לינוקס עם גרסת אובונטו נכונה.
  2. שדרוג ועדכון השרת.
  3. יצירת ספריית סביבת עבודה, שאליה מותקנת OpenCV.
  4. התקנה של כמה דברים חיוניים, כלומר מהדר, ספריות שונות וכריכות פייתון.

לאחר שלב זה, אתה מוכן להתחיל בהכנות לתהליך ההכשרה.

שלב 3: התהליך

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

תהליך בסיסי

  1. קיים מערך נתונים שלילי המורכב מכמה אלפי תמונות שאינן מכילות מושא עניין. יהיה עליך להעלות את זה ל- VPS.
  2. נוצרת תמונה חיובית אחת המכילה את מושא העניין. יהיה צורך להעלות זאת גם ל- VPS.
  3. התמונה החיובית היחידה מעוותת, מעוותת, מסתובבת וכו ', על ידי קבוצה של פרמטרים שנבחרו ומעוטפת במבחר של התמונות השליליות. זוהי דרך מלאכותית ליצור מערך נתונים חיובי גדול מתוך תמונה אחת. (עבור יישומים אחרים בעולם האמיתי, כגון זיהוי חתול, תוכל פשוט להשתמש בכמה אלפי תמונות של חתולים, אך לא תמיד שיטה זו מתאימה אם אין לך קבוצה כה גדולה של תמונות חיוביות. הגישה המלאכותית הנהוגה כאן יהיה פחות יעיל, אבל זו האפשרות היחידה למקרה שימוש כזה).
  4. תהליך אימון מופעל, שעובד בשלבים. כל שלב יאמן מפל לזיהוי תכונות שונות מסוג HAAR בתוך מערכי התמונות. כל שלב לוקח זמן אקספוננציאלי להשלים, והאפקטיביות של המסווג עולה כל פעם (אפשר גם להתאמן יתר על המידה רק שתדע!).
  5. מפל אחד מאומן יוכל לחפש אובייקט מטרה יחיד. אם ברצונך לזהות מספר עצמים ייחודיים, תזדקק למפל מאומן לכל אחד. במקרה זה, אימנתי כ -50 מפלים שונים לדפוסי כוכבים ייחודיים, כדי ליצור סט שיכול לכסות את חצי הכדור השמימי הצפוני.
  6. לבסוף, נעשה שימוש בתוכנית זיהוי המריצה כל מפל של קבוצה כנגד תמונת קלט. המפל יחפש את אובייקט היעד הנתון שלו בתוך תמונת הקלט.
  7. אם הוא מצליח, אובייקט המטרה יזוהה בתוך תמונת הקלט.

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

שלב 4: שלילי וחיובי

שליליות

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

חיובי

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

שלב 5: בקרת סטלריום

בקרת סטלריום
בקרת סטלריום
בקרת סטלריום
בקרת סטלריום

תיקיית Stellarium Scripts של מאגר GitHub מכילה שלוש תוכניות שכתבתי כדי לשלוט בשימוש ב- Stellarium. כדי להשתמש בהם, הנח אותם בתיקיית הסקריפטים של תיקיית ההתקנה שלך Stellarium. כדי להריץ אותם, תוכל לפתוח את חלון הסקריפטים מתוך תפריט Stellarium, או פשוט על ידי לחיצה כפולה על התוכנית בתיקיית הסקריפטים, שתפעיל את Stellarium ותפעיל את התוכנית שנבחרה באופן מיידי.

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

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

שלב 6: איש רוקט

איש הטיל
איש הטיל

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

אלטון

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

שלב 7: סמני אמונים

סמני אמונים
סמני אמונים

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

שלב 8: שימוש במפלים

שימוש במפלים
שימוש במפלים

כאשר אימנת קבוצה של מפלים, עליך לדעת כיצד להשתמש בהם כדי לזהות אובייקט בתמונה!

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

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

שלב 9: כיצד להישאר חיובי לגבי חיוביים כוזבים

כיצד להישאר חיובי לגבי חיוביים כוזבים
כיצד להישאר חיובי לגבי חיוביים כוזבים
כיצד להישאר חיובי לגבי חיוביים כוזבים
כיצד להישאר חיובי לגבי חיוביים כוזבים

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

התוכנית cascade_test19.py בתוך התיקייה Star Identification של ריפו GitHub משתמשת בשתי שיטות למיון התוצאות. ראשית, הפונקון detectMultiScale קובע מיניום וגודל התוצאה המרבי שניתן למצוא, וזה הגיוני, כגודל המשוער של תבנית כוכב היעד בתוך החלון (עבור העדשה הנתונה וההגדלה - תמונות הסטלריום המדומות שלי משתמשות במאפיינים של מצלמת Raspberry Pi V2) ידועה. שנית, הקוד יבחר את התוצאה עם תיבת הגבול הגדולה ביותר (בגבולות הקודמים). בבדיקה התברר שזהו החיובי האמיתי. שלישית, התוכנית קובעת מינימום 'רמות משקולות' (למעשה 'ערך ביטחון') הנדרש כדי להתייחס למזהה זה כחיובי אמיתי. בשיטה זו, המפלים היו יעילים במציאת התוצאה הנכונה.

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

שלב 10: דיון

דִיוּן
דִיוּן
דִיוּן
דִיוּן
דִיוּן
דִיוּן

אזורים לשיפור

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

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

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

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

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

שלב 11: מילה אחרונה

מילה אחרונה
מילה אחרונה

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

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

אתגר החלל
אתגר החלל
אתגר החלל
אתגר החלל

סגנית האתגר בחלל

מוּמלָץ: