Last active
October 20, 2022 23:59
-
-
Save victormurcia/731bf00f0157d0eee4c5a8dbddc8ff3a to your computer and use it in GitHub Desktop.
get player jersey colors for whole video
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| def getJerseyColorsFromMP4(jsonPath,MP4Path,whichVideo,nClusters): | |
| #Make the list of mp4 and json files from each camera | |
| print('Retrieving MP4 and JSON files...') | |
| mp4List = getListOfFiles(MP4Path , ".mp4") | |
| jsonList = getListOfFiles(jsonPath , ".json") | |
| #Find the json file to use for the current video | |
| jval = matchJSON2MP4(jsonList, jsonPath, mp4List, MP4Path, whichVideo) | |
| #Get json dictionary of all bounding boxes in video | |
| bb_dict = read_json_dict(jsonList[jval])#This is for first video in the LCamera folder | |
| #Find first frame with detections | |
| firstFrame = findFirstFrame(bb_dict) | |
| #Determine frame spacing | |
| frameSpacing = findFrameSpacing(bb_dict) | |
| #Which frame to look at | |
| whichFrame = 0 | |
| whichFrameAdj = firstFrame + whichFrame*frameSpacing #Adjust for video data to match json detection | |
| nf = int(count_frames(mp4List[whichVideo])/10) #Number of frames in video | |
| print('Initializing arrays...') | |
| #Initialize arrays | |
| dom_color1, dom_color2,dom_color3 = [],[],[] | |
| frame_list,bb_list,video_list = [],[],[] | |
| #Insert loop here for frames | |
| print('Starting jersey color detection ...') | |
| while whichFrameAdj < nf: | |
| for i in tqdm(range(nf), desc="Processing Frame"):#Add progress bar for frames processed | |
| #Get a frame from video | |
| frame = get_frame(mp4List[whichVideo], whichFrameAdj) | |
| #Convert color from BGR to RGB | |
| frame = cv2.cvtColor(frame, cv2.COLOR_BGR2RGB) | |
| #Make a copy of the frame to store for display of all the bounding boxes | |
| frame_copy = frame.copy() | |
| #Determine number of bounding boxes in current frame | |
| n_bbs = count_bboxes(bb_dict,whichFrame) | |
| #Get BB coordinates for current frame | |
| bbs_frame = get_bb4frame(bb_dict,whichFrame) #BB coordinates for current frame | |
| #Loop over bounding boxes in current frame | |
| for bb in range(n_bbs): | |
| #print('****Frame ' + str(whichFrameAdj) + ' BB ' + str(bb) + '****') | |
| frame_list.append(whichFrameAdj) #Append frame ID to list | |
| bb_list.append(bb) | |
| video_list.append(whichVideo) | |
| x1 ,y1 ,x2 ,y2 = makeRectangleFromJSON(bbs_frame,bb) #Coordinates for current BB | |
| currentbox = frame[y1:y2,x1:x2] | |
| cv2.rectangle(frame_copy, (x1, y1), (x2, y2), (0, 0, 255), 2) | |
| #Crop the bounding box | |
| croped_bb = crop_image(currentbox,howMuch) | |
| #Do the clustering | |
| rgb_array = KMeansMaskGreen(croped_bb, nClusters, | |
| lowHue, highHue, lowSat, highSat, loBright, hiBright) | |
| #Append dominant RGB colors into respective arrays | |
| dom_color1.append(rgb_array[0]) | |
| dom_color2.append(rgb_array[1]) | |
| dom_color3.append(rgb_array[2]) | |
| whichFrame += 1 | |
| whichFrameAdj = firstFrame + whichFrame*frameSpacing #Adjust for video data to match json | |
| print('Making pandas dataframe containing results...') | |
| jerseyColor_df = pd.DataFrame({'Video ID': video_list, | |
| 'Frame ID': frame_list, | |
| 'BB in Frame': bb_list, | |
| 'Jersey Color 1': dom_color1, | |
| 'Jersey Color 2': dom_color2, | |
| 'Jersey Color 3': dom_color3}) | |
| print('PROCESS COMPLETED') | |
| return jerseyColor_df |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment