ליגת הכדורגל הלאומית (NFL) היא אחת מליגות הספורט הפופולריות ביותר בארצות הברית והיא ליגת הספורט היקרה ביותר בעולם. ה-NFL, BioCore ו-AWS מחויבות לקדם את ההבנה האנושית סביב אבחון, מניעה וטיפול בפציעות הקשורות לספורט כדי להפוך את משחק הכדורגל לבטוח יותר. מידע נוסף על מאמצי הבריאות והבטיחות של שחקן ה-NFL זמין באתר אתר NFL.
השמיים שירותים מקצועיים של AWS הצוות שיתף פעולה עם ה-NFL ו-Biocore כדי לספק פתרונות מבוססי למידת מכונה (ML) לזיהוי השפעות הקסדה מצילומי משחק באמצעות טכניקות ראייה ממוחשבת (CV). עם מספר תצוגות מצלמה זמינות מכל משחק, פיתחנו פתרונות לזיהוי השפעות הקסדה מכל אחת מהתצוגות הללו ולמזג את תוצאות ההשפעה של הקסדה.
המוטיבציה מאחורי שימוש במספר תצוגות מצלמה נובעת מהגבלה של מידע כאשר אירועי ההשפעה נלכדים עם תצוגה אחת בלבד. עם פרספקטיבה אחת בלבד, חלק מהשחקנים עלולים לחסום זה את זה או להיחסם על ידי חפצים אחרים על המגרש. לכן, הוספת פרספקטיבות נוספות מאפשרת למערכת ה-ML שלנו לזהות יותר השפעות שאינן נראות בתצוגה אחת. כדי להציג את התוצאות של תהליך ההיתוך שלנו וכיצד הצוות משתמש בכלי הדמיה כדי לעזור להעריך את ביצועי המודל, פיתחנו בסיס קוד שכיסה ויזואלית את תוצאות זיהוי ריבוי הצפיות. תהליך זה עוזר לזהות את מספר ההשפעות בפועל שחווים שחקנים בודדים על ידי הסרת השפעות כפולות שזוהו במספר תצוגות.
בפוסט זה, אנו משתמשים במערך הנתונים הזמין לציבור מ- NFL – תחרות Kaggle Impact Detection והצג תוצאות למיזוג שתי תצוגות. מערך הנתונים כולל תיבות תוחמות לקסדה בכל מסגרת ותוויות השפעה שנמצאות בכל סרטון. בפרט, אנו מתמקדים בביטול שכפול והצגה של סרטונים עם המזהה 57583_000082
בתצוגות אזור הקצה והצד. אתה יכול להוריד את סרטוני הקצה והצד, וגם תוויות אמת קרקע.
תנאים מוקדמים
הפתרון דורש את הדברים הבאים:
התחל ב- SageMaker Studio Lab והתקן את החבילות הנדרשות
אתה יכול להפעיל את המחברת מה- GitHub מאגר או מ- SageMaker Studio Lab. בפוסט זה, אנו מריצים את המחברת מסביבת SageMaker Studio Lab. אנו בוחרים ב-SageMaker Studio Lab מכיוון שהיא חינמית, מספקת הפעלות עוצמתיות למשתמשי CPU ו-GPU, ו-15GB של אחסון מתמשך שיחסוך אוטומטית את הסביבה שלך, ויאפשר לך להמשיך מאיפה שהפסקת. כדי להשתמש ב- SageMaker Studio Lab, לבקש ולהגדיר חשבון חדש. לאחר אישור החשבון, בצע את השלבים הבאים:
- בקר aws-samples repo GitHub.
- ב
README
סעיף, בחר פתח את מעבדת סטודיו.
זה מפנה אותך לסביבת SageMaker Studio Lab שלך.
- בחר את סוג מחשוב המעבד שלך ולאחר מכן בחר התחל זמן ריצה.
- לאחר תחילת זמן הריצה, בחר העתק לפרויקט, אשר פותח חלון חדש עם סביבת Jupyter Lab.
עכשיו אתה מוכן להשתמש במחברת!
- להרחיב
fuse_and_visualize_multiview_impacts.ipynb
ופעל לפי ההוראות במחברת.
התא הראשון במחברת מתקין את חבילות Python הדרושות כגון פנדות ו-OpenCV:
%pip install pandas
%pip install opencv-contrib-python-headless
ייבא את כל חבילות Python הדרושות והגדר אפשרויות פנדה לחוויית הדמיה טובה יותר:
import os
import cv2
import pandas as pd
import numpy as np
pd.set_option('mode.chained_assignment', None)
אנו משתמשים בפנדות לבליעה ולניתוח דרך קובץ ה-CSV עם תיבות התוחמות של הקסדה המוערות, כמו גם השפעות. אנו משתמשים ב-NumPy בעיקר למניפולציה של מערכים ומטריצות. אנו משתמשים ב-OpenCV לקריאה, כתיבה וטיפול בנתוני תמונה ב-Python.
הכן את הנתונים על ידי מיזוג תוצאות משתי תצוגות
כדי למזג את שתי נקודות המבט יחד, אנו משתמשים ב- train_labels.csv
מהתחרות של Kaggle כדוגמה כי היא מכילה השפעות של אמת קרקע גם מהקצה וגם מהצד. הפונקציה הבאה לוקחת את מערך הנתונים של הקלט ומוציאה מסגרת נתונים ממוזגת אשר מבוטלת עבור כל ההשמעות במערך הקלט:
def prep_data(df): df['game_play'] = df['gameKey'].astype('str') + '_' + df['playID'].astype('str').str.zfill(6) return df def dedup_view(df, windows): # define view df = df.sort_values(by='frame') view_columns = ['frame', 'left', 'width', 'top', 'height', 'video'] common_columns = ['game_play', 'label', 'view', 'impactType'] label_cleaned = df[view_columns + common_columns] # rename columns sideline_column_rename = {col: 'Sideline_' + col for col in view_columns} endzone_column_rename = {col: 'Endzone_' + col for col in view_columns} sideline_columns = list(sideline_column_rename.values()) # create two dataframes, one for sideline, one for endzone label_endzone = label_cleaned.query('view == "Endzone"') label_endzone.rename(columns=endzone_column_rename, inplace=True) label_sideline = label_cleaned.query('view == "Sideline"') label_sideline.rename(columns=sideline_column_rename, inplace=True) # prepare sideline labels label_sideline['is_dup'] = False for columns in sideline_columns: label_endzone[columns] = np.nan label_endzone['is_dup'] = False # iterrate endzone rows to find matches and dedup for index, row in label_endzone.iterrows(): player = row['label'] frame = row['Endzone_frame'] impact_type = row['impactType'] sideline_row = label_sideline[(label_sideline['label'] == player) & ((label_sideline['Sideline_frame'] >= frame - windows // 2) & (label_sideline['Sideline_frame'] <= frame + windows // 2 + 1)) & (label_sideline['is_dup'] == False) & (label_sideline['impactType'] == impact_type)] if len(sideline_row) > 0: sideline_index = sideline_row.index[0] label_sideline['is_dup'].loc[sideline_index] = True for col in sideline_columns: label_endzone[col].loc[index] = sideline_row.iloc[0][col] label_endzone['is_dup'].loc[index] = True # calculate overlap perc not_dup_sideline = label_sideline[label_sideline['is_dup'] == False] final_output = pd.concat([not_dup_sideline, label_endzone]) return final_output def fuse_df(raw_df, windows): outputs = [] all_game_play = raw_df['game_play'].unique() for game_play in all_game_play: df = raw_df.query('game_play ==@game_play') output = dedup_view(df, windows) outputs.append(output) output_df = pd.concat(outputs) output_df['gameKey'] = output_df['game_play'].apply(lambda x: x.split('_')[0]).map(int) output_df['playID'] = output_df['game_play'].apply(lambda x: x.split('_')[1]).map(int) return output_df
כדי להפעיל את הפונקציה, אנו מפעילים את בלוק הקוד הבא כדי לספק את המיקום של train_labels.csv
נתונים ולאחר מכן בצע הכנת נתונים כדי להוסיף עמודה נוספת ולחלץ רק את שורות ההשפעה. לאחר הפעלת הפונקציה, אנו שומרים את הפלט למשתנה dataframe שנקרא fused_df
.
# read the annotated impact data from train_labels.csv
ground_truth = pd.read_csv('train_labels.csv') # prepare game_play column using pipe(prep_data) function in pandas then filter the dataframe for just rows with impacts
ground_truth = ground_truth.pipe(prep_data).query('impact == 1') # loop over all the unique game_plays and deduplicate the impact results from sideline and endzone
fused_df = fuse_df(ground_truth, windows=30)
צילום המסך הבא מציג את האמת.
צילום המסך הבא מציג את דוגמאות מסגרות הנתונים הממוזגות.
גרף וקוד וידאו
לאחר שנמזג את תוצאות ההשפעה, אנו משתמשים במוצר שנוצר fused_df
כדי לכסות את התוצאות על סרטוני הקצה והצד שלנו ולמזג את שתי הצפיות יחד. אנחנו משתמשים בפונקציה הבאה בשביל זה, והכניסות הדרושות הן הנתיבים לסרטון הקצה, וידאו בצד, fused_df
dataframe, ואת נתיב הפלט הסופי עבור הווידאו החדש שנוצר. הפונקציות המשמשות בסעיף זה מתוארות בסעיף הסימון של המחברת המשמשת ב- SageMaker Studio Lab.
def get_video_and_metadata(vid_path): vid = cv2.VideoCapture(vid_path) total_frame_number = vid.get(cv2.CAP_PROP_FRAME_COUNT) width = int(vid.get(cv2.CAP_PROP_FRAME_WIDTH)) height = int(vid.get(cv2.CAP_PROP_FRAME_HEIGHT)) fps = vid.get(cv2.CAP_PROP_FPS) return vid, total_frame_number, width, height, fps def overlay_impacts(frame, fused_df, game_key, play_id, frame_cnt, h1): # look for duplicates duplicates = fused_df.query(f"gameKey == {int(game_key)} and playID == {int(play_id)} and is_dup == True and Sideline_frame == @frame_cnt") frame_has_impact = False if len(duplicates) > 0: for duplicate in duplicates.itertuples(index=False): if frame_cnt == duplicate.Sideline_frame: frame_has_impact = True if frame_has_impact: cv2.rectangle(frame, #frame to be edited (int(duplicate.Sideline_left), int(duplicate.Sideline_top)), #(x,y) of top left corner (int(duplicate.Sideline_left) + int(duplicate.Sideline_width), int(duplicate.Sideline_top) + int(duplicate.Sideline_height)), #(x,y) of bottom right corner (0,0,255), #RED boxes thickness=3) cv2.rectangle(frame, #frame to be edited (int(duplicate.Endzone_left), int(duplicate.Endzone_top)+ h1), #(x,y) of top left corner (int(duplicate.Endzone_left) + int(duplicate.Endzone_width), int(duplicate.Endzone_top) + int(duplicate.Endzone_height) + h1), #(x,y) of bottom right corner (0,0,255), #RED boxes thickness=3) cv2.line(frame, #frame to be edited (int(duplicate.Sideline_left), int(duplicate.Sideline_top)), #(x,y) of point 1 in a line (int(duplicate.Endzone_left), int(duplicate.Endzone_top) + h1), #(x,y) of point 2 in a line (255, 255, 255), # WHITE lines thickness=4) else: # if no duplicates, look for sideline then endzone and add to the view sl_impacts = fused_df.query(f"gameKey == {int(game_key)} and playID == {int(play_id)} and is_dup == False and view == 'Sideline' and Sideline_frame == @frame_cnt") if len(sl_impacts) > 0: for impact in sl_impacts.itertuples(index=False): if frame_cnt == impact.Sideline_frame: frame_has_impact = True if frame_has_impact: cv2.rectangle(frame, #frame to be edited (int(impact.Sideline_left), int(impact.Sideline_top)), #(x,y) of top left corner (int(impact.Sideline_left) + int(impact.Sideline_width), int(impact.Sideline_top) + int(impact.Sideline_height)), #(x,y) of bottom right corner (0, 255, 255), #YELLOW BOXES thickness=3) ez_impacts = fused_df.query(f"gameKey == {int(game_key)} and playID == {int(play_id)} and is_dup == False and view == 'Endzone' and Endzone_frame == @frame_cnt") if len(ez_impacts) > 0: for impact in ez_impacts.itertuples(index=False): if frame_cnt == impact.Endzone_frame: frame_has_impact = True if frame_has_impact: cv2.rectangle(frame, #frame to be edited (int(impact.Endzone_left), int(impact.Endzone_top)+ h1), #(x,y) of top left corner (int(impact.Endzone_left) + int(impact.Endzone_width), int(impact.Endzone_top) + int(impact.Endzone_height) + h1 ), #(x,y) of bottom right corner (0, 255, 255), #YELLOW BOXES thickness=3) return frame, frame_has_impact def generate_impact_video(ez_vid_path:str, sl_vid_path:str, fused_df:pd.DataFrame, output_path:str, freeze_impacts=True): #define video codec to be used for VIDEO_CODEC = "MP4V" # parse game_key and play_id information from the name of the files game_key = os.path.basename(ez_vid_path).split('_')[0] # parse game_key play_id = os.path.basename(ez_vid_path).split('_')[1] # parse play_id # get metadata such as total frame number, width, height and frames per second (FPS) from endzone (ez) and sideline (sl) videos ez_vid, ez_total_frame_number, ez_width, ez_height, ez_fps = get_video_and_metadata(ez_vid_path) sl_vid, sl_total_frame_number, sl_width, sl_height, sl_fps = get_video_and_metadata(sl_vid_path) # define a video writer for the output video output_video = cv2.VideoWriter(output_path, #output file name cv2.VideoWriter_fourcc(*VIDEO_CODEC), #Video codec ez_fps, #frames per second in the output video (ez_width, ez_height+sl_height)) # frame size with stacking video vertically # find shorter video and use the total frame number from the shorter video for the output video total_frame_number = int(min(ez_total_frame_number, sl_total_frame_number)) # iterate through each frame from endzone and sideline for frame_cnt in range(total_frame_number): frame_has_impact = False frame_near_impact = False # reading frames from both endzone and sideline ez_ret, ez_frame = ez_vid.read() sl_ret, sl_frame = sl_vid.read() # creating strings to be added to the output frames img_name = f"Game key: {game_key}, Play ID: {play_id}, Frame: {frame_cnt}" video_frame = f'{game_key}_{play_id}_{frame_cnt}' if ez_ret == True and sl_ret == True: h, w, c = ez_frame.shape h1,w1,c1 = sl_frame.shape if h != h1 or w != w1: # resize images if they're different ez_frame = cv2.resize(ez_frame,(w1,h1)) frame = np.concatenate((sl_frame, ez_frame), axis=0) # stack the frames vertically frame, frame_has_impact = overlay_impacts(frame, fused_df, game_key, play_id, frame_cnt, h1) cv2.putText(frame, #image frame to be modified img_name, #string to be inserted (30, 30), #(x,y) location of the string cv2.FONT_HERSHEY_SIMPLEX, #font 1, #scale (255, 255, 255), #WHITE letters thickness=2) cv2.putText(frame, #image frame to be modified str(frame_cnt), #frame count string to be inserted (w1-75, h1-20), #(x,y) location of the string in the top view cv2.FONT_HERSHEY_SIMPLEX, #font 1, #scale (255, 255, 255), # WHITE letters thickness=2) cv2.putText(frame, #image frame to be modified str(frame_cnt), #frame count string to be inserted (w1-75, h1+h-20), #(x,y) location of the string in the bottom view cv2.FONT_HERSHEY_SIMPLEX, #font 1, #scale (255, 255, 255), # WHITE letters thickness=2) output_video.write(frame) # Freeze for 60 frames on impacts if frame_has_impact and freeze_impacts: for _ in range(60): output_video.write(frame) else: break frame_cnt += 1 output_video.release() return
כדי להפעיל פונקציות אלו, אנו יכולים לספק קלט כפי שמוצג בקוד הבא, אשר יוצר סרטון הנקרא output.mp4
:
generate_impact_video('57583_000082_Endzone.mp4', '57583_000082_Sideline.mp4', fused_df, 'output.mp4')
זה יוצר סרטון כפי שמוצג בדוגמה הבאה, כאשר התיבות התוחמות האדומות הן פגיעות שנמצאות הן בתצוגות הקצה והן בתצוגות הצד, והתיבות התוחמות הצהובות הן השפעות שנמצאות בתצוגה אחת בלבד באזור הקצה או בקו הצד.
סיכום
בפוסט זה, הדגמנו כיצד צוותי NFL, Biocore ו-AWS ProServe עובדים יחד כדי לשפר את זיהוי ההשפעה על ידי מיזוג תוצאות ממספר צפיות. זה מאפשר לצוותים לבצע ניפוי באגים ולדמיין כיצד המודל מתפקד מבחינה איכותית. ניתן להגדיל את תהליך זה בקלות לשלוש תצוגות או יותר; בפרויקטים שלנו, השתמשנו בעד שבע תצוגות שונות. זיהוי פגיעות של קסדה על ידי צפייה בסרטונים מצפייה אחת בלבד יכול להיות קשה בגלל חסימת צפייה, אך זיהוי השפעות ממספר צפיות ומיזוג התוצאות מאפשר לנו לשפר את ביצועי הדגם שלנו.
כדי להתנסות בפתרון זה, בקר ב- aws-samples repo GitHub ועיין ב fuse_and_visualize_multiview_impacts.ipynb מחברת. ניתן ליישם טכניקות דומות גם בתעשיות אחרות כגון ייצור, קמעונאות ואבטחה, כאשר ריבוי תצוגות יועיל למערכת ML לזהות טוב יותר יעדים עם ראייה מקיפה יותר.
למידע נוסף על בריאות ובטיחות שחקני NFL, בקר באתר אתר NFL ו הסבר NFL: חדשנות בבריאות ובטיחות של שחקנים.
על המחברים
כריס בומהואר הוא מהנדס למידת מכונה בשירותים מקצועיים של AWS. לכריס יש ניסיון של למעלה מ-6 שנים בפיתוח פתרונות למידת מכונה מפוקחת ובלתי מפוקחת בתעשיות שונות. כיום, הוא מבלה את רוב זמנו בסיוע ללקוחות בתעשיות הספורט, הבריאות והחקלאות לתכנן ולבנות פתרונות למידת מכונה מקצה לקצה.
בן פנקר הוא מדען נתונים בכיר בשירותים מקצועיים של AWS וסייע ללקוחות לבנות ולפרוס פתרונות ML בתעשיות החל מספורט, בריאות ועד ייצור. יש לו דוקטורט. בפיזיקה מאוניברסיטת Texas A&M ו-6 שנות ניסיון בתעשייה. בן נהנה מבייסבול, לקרוא ולגדל את ילדיו.
סם האדלסטון הוא מדען נתונים ראשי ב-Biocore LLC, המשמש כמוביל הטכנולוגיה של תוכנית הספורטאים הדיגיטליים של ה-NFL. Biocore הוא צוות מהנדסים ברמה עולמית שבסיסו בשרלוטסוויל, וירג'יניה, המספק מחקר, בדיקות, מומחיות ביו-מכניקה, מודלים ושירותי הנדסה אחרים ללקוחות המוקדשים להבנה והפחתת פציעה.
ג'רוויס לי הוא מדען נתונים בכיר עם שירותים מקצועיים של AWS. הוא עובד עם AWS למעלה מחמש שנים, ועובד עם לקוחות על למידת מכונה ובעיות ראייה ממוחשבת. מחוץ לעבודה הוא נהנה לרכוב על אופניים.
טיילר מולנבך הוא מוביל העיסוק העולמי עבור ML עם שירותים מקצועיים של AWS. הוא אחראי להניע את הכיוון האסטרטגי של ML לשירותים מקצועיים ולהבטיח שהלקוחות יממשו הישגים עסקיים משנים באמצעות אימוץ טכנולוגיות ML.
קווין סונג הוא מדען נתונים בשירותים מקצועיים של AWS. הוא בעל תואר דוקטור בביופיזיקה ויש לו למעלה מ-5 שנות ניסיון בתעשייה בבניית פתרונות ראייה ממוחשבת ולמידת מכונה.
בטי ג'אנג הוא מדען נתונים עם ניסיון של 10 שנים בנתונים וטכנולוגיה. התשוקה שלה היא לבנות פתרונות למידת מכונה חדשניים כדי להניע שינויים טרנספורמטיביים עבור חברות. בזמנה הפנוי היא נהנית לטייל, לקרוא וללמוד על טכנולוגיות חדשות.
- הפצת תוכן ויחסי ציבור מופעל על ידי SEO. קבל הגברה היום.
- Platoblockchain. Web3 Metaverse Intelligence. ידע מוגבר. גישה כאן.
- מקור: https://aws.amazon.com/blogs/machine-learning/analyze-and-visualize-multi-camera-events-using-amazon-sagemaker-studio-lab/
- 1
- 10
- 100
- 202
- 7
- a
- אודות
- חֶשְׁבּוֹן
- הישגים
- לרוחב
- הוסיף
- נוסף
- אימוץ
- לאחר
- חקלאות
- תעשיות
- מאפשר
- אמזון בעברית
- אמזון SageMaker
- סטודיו SageMaker של אמזון
- Amazon SageMaker Studio Lab
- לנתח
- ו
- יישומית
- מאושר
- סביב
- אתלט
- באופן אוטומטי
- זמין
- AWS
- שירותים מקצועיים של AWS
- בייסבול
- מבוסס
- כי
- מאחור
- תועלת
- מוטב
- ביופיסיקה
- לחסום
- חסום
- תַחתִית
- תיבות
- לשבור
- לִבנוֹת
- בִּניָן
- עסקים
- נקרא
- חדר
- שינויים
- בחרו
- בחירה
- לקוחות
- קוד
- בסיס קוד
- טור
- עמודות
- מְחוּיָב
- חברות
- תחרות
- להשלים
- מַקִיף
- לחשב
- המחשב
- ראייה ממוחשבת
- מכיל
- בפינה
- לִיצוֹר
- יוצרים
- לקוחות
- נתונים
- הכנת נתונים
- מדען נתונים
- מוקדש
- מופגן
- לפרוס
- מְתוּאָר
- עיצוב
- זוהה
- איתור
- מפותח
- מתפתח
- אחר
- קשה
- דיגיטלי
- כיוון
- להורדה
- נהיגה
- נהיגה
- כפילויות
- כל אחד
- בקלות
- מַאֲמָצִים
- או
- מה שמאפשר
- מקצה לקצה
- מהנדס
- הנדסה
- מהנדסים
- הבטחתי
- סביבה
- להעריך
- אירועים
- כל
- דוגמה
- דוגמאות
- ניסיון
- לְנַסוֹת
- מומחיות
- מוסבר
- תמצית
- שדה
- שלח
- קבצים
- לסנן
- סופי
- ראשון
- להתמקד
- לעקוב
- הבא
- כדורגל
- מצא
- fps
- מסגרת
- חופשי
- להקפיא
- החל מ-
- פונקציה
- פונקציות
- היתוך
- מִשְׂחָק
- נוצר
- מייצר
- לקבל
- GitHub
- גלוֹבָּלִי
- GPU
- קרקע
- יש
- בְּרִיאוּת
- בריאות
- גובה
- לעזור
- עזר
- עזרה
- עוזר
- מחזיק
- איך
- HTTPS
- בן אנוש
- ID
- לזהות
- זיהוי
- תמונה
- תמונות
- פְּגִיעָה
- השפעות
- לייבא
- לשפר
- in
- כולל
- מדד
- בנפרד
- תעשיות
- תעשייה
- מידע
- חדשנות
- חדשני
- קלט
- להתקין
- הוראות
- IT
- רק אחד
- מפתח
- הילדים
- מעבדה
- תווית
- תוויות
- עוֹפֶרֶת
- ליגה
- ליגות
- למידה
- הגבלה
- קו
- קווים
- LLC
- מיקום
- נראה
- מכונה
- למידת מכונה
- לעשות
- מניפולציה
- ייצור
- למזג
- מיזוג
- מידע נוסף
- יכול
- ML
- מצב
- מודל
- שונים
- יותר
- רוב
- הכי פופולארי
- מוטיבציה
- מספר
- שם
- לאומי
- הכרחי
- חדש
- טכנולוגיות חדשות
- NFL
- מחברה
- מספר
- קהות
- אובייקטים
- ONE
- OpenCV
- נפתח
- אפשרויות
- OS
- אחר
- בחוץ
- חבילות
- דובי פנדה
- מסוים
- שותף
- תשוקה
- נתיב
- לְבַצֵעַ
- ביצועים
- ביצוע
- פרספקטיבה
- נקודות מבט
- פיסיקה
- לבחור
- אפלטון
- מודיעין אפלטון
- אפלטון נתונים
- לְשַׂחֵק
- שחקן
- שחקנים
- נקודה
- פופולרי
- הודעה
- חזק
- תרגול
- להכין
- מניעה
- מנהל
- בעיות
- תהליך
- מקצועי
- תָכְנִית
- פרויקטים
- לספק
- מספק
- בפומבי
- פיתון
- העלאה
- טִוּוּחַ
- RE
- חומר עיוני
- קריאה
- מוכן
- להבין
- Red
- בדבר
- הסרת
- מאגר
- נדרש
- דורש
- מחקר
- אחראי
- תוצאות
- קמעוני
- לַחֲזוֹר
- רכיבה
- שׁוּרָה
- הפעלה
- ריצה
- בטוח יותר
- בְּטִיחוּת
- בעל חכמים
- SageMaker Studio Lab
- שמור
- להרחבה
- מַדְעָן
- שְׁנִיָה
- סעיף
- אבטחה
- לחצני מצוקה לפנסיונרים
- משמש
- שירותים
- הפעלות
- סט
- שבע
- צוּרָה
- לְהַצִיג
- ראווה
- הראה
- הופעות
- דומה
- יחיד
- מידה
- פִּתָרוֹן
- פתרונות
- כמה
- ספורט
- לערום
- הערימה
- החל
- התחלות
- הברית
- צעדים
- אחסון
- אסטרטגי
- סטודיו
- כזה
- מערכת
- לוקח
- מטרות
- נבחרת
- צוותי
- טכניקות
- טכנולוגיות
- טכנולוגיה
- בדיקות
- טקסס
- השמיים
- לכן
- שְׁלוֹשָׁה
- דרך
- זמן
- ל
- היום
- יַחַד
- כלים
- חלק עליון
- סה"כ
- טרנספורמטיבית
- נסיעה
- טיפול
- נָכוֹן
- הבנה
- ייחודי
- מאוחד
- ארצות הברית
- אוניברסיטה
- us
- להשתמש
- משתמש
- מנוצל
- ניצול
- בעל ערך
- שונים
- וִידֵאוֹ
- וידאו
- לצפיה
- נופים
- וירג'יניה
- נראה
- חזון
- ראיה
- W
- צופה
- אשר
- לבן
- מי
- ויקיפדיה
- יצטרך
- חלונות
- תיק עבודות
- עובד
- רמה עולמית
- היה
- סופר
- כתיבה
- X
- שנים
- אתה
- YouTube
- זפירנט