Mercurial Hosting > traffic-intelligence
view scripts/manual_video_analysis.py @ 884:ac4bcbcc9cda
added manual data collection script, thanks Philip Morse!
author | Nicolas Saunier <nicolas.saunier@polymtl.ca> |
---|---|
date | Fri, 17 Mar 2017 17:52:19 -0400 |
parents | |
children | 7f61854fcc6d |
line wrap: on
line source
#! /usr/bin/env python import sys, argparse, cv2 parser = argparse.ArgumentParser(description='The program replays the video and allows to manually id vehicles and mark instants, eg when they cross given areas in the scene.') parser.add_argument('-i', dest = 'videoFilename', help = 'name of the video file', required = True) parser.add_argument('-f', dest = 'firstFrameNum', help = 'number of first frame number to display', default = 0, type = int) #Place this program in the same folder as the video you want to analyze #Use this program in combination with a screen marker program (For example, Presentation Assistant) to draw multiple lines on the screen #Press the "New vehicle" key (u) when a vehicle touches the first line. This will start a new line in the csv file and record the first frame number. #Press the "Next line" key (i) when the same vehicle touches every line except the first one, in order. This will record the subsequent frame numbers. #Press the SKIP key (o) when you make a mistake in the input. This will write SKIP in the csv file so that you can easily identify where you should remove the line #The output should give you a .csv file with the same name as your video file with columns in this format: #vehicle number, frame number at first line, frame number at second line, frame number at third line, etc... #You can easily spot mistakes in the csv file if the number of columns is wrong for a specific line, or you see a SKIP in a line. If this happens, just delete the row. #You can change the .mp4 to something else if your video files are in a different format #videoFilename = raw_input("Please Type in the video filename\n") args = parser.parse_args() cap = cv2.VideoCapture(args.videoFilename) i = args.videoFilename.rfind('.') if i>0: outputFilename = args.videoFilename[:i]+'.csv' else: outputFilename = args.videoFilename+'.csv' vehNumber = 0 out = open(outputFilename, 'a') print ("Commands:\nu: New Vehicle crossing the first line\ni: Vehicle crossing subsequent lines\no: Press o when you make a mistake in input\nd: Skip 100 frames\ns: Skip 10 frames\nc: Go back 100 frames\nx: Go back 10 frames\nSpacebar: Go forward one frame\nl: Skip to frame number\nq: Quit and end program") while(cap.isOpened()): ret, frame = cap.read() frame_no = int(cap.get(cv2.cv.CV_CAP_PROP_POS_FRAMES)) #gray = cv2.cvtColor(frame, cv2.COLOR_BGR2GRAY) cv2.imshow('frame',frame) key= cv2.waitKey(0) #Change the keys to record the vehicle in this section if key == ord('q'): break if key == ord('u'): out.write('\n'+str(vehNumber)+','+str(frame_no)+',') vehNumber+=1 print('New Vehicle') line_number = 0 if key == ord('i'): out.write(str(frame_no)+',') line_number = line_number+1 print('Line number '+str(line_number)) if key == ord('o'): out.write('SKIP') print('SKIPPED') #Change the number of frames skipped or the keys in this section elif key == ord('d'): cap.set(1,frame_no+100) elif key == ord('s'): cap.set(1,frame_no+10) elif key == ord('a'): cap.set(1,frame_no+1) elif key == ord('x'): cap.set(1,frame_no-10) elif key == ord('c'): cap.set(1,frame_no-100) elif key == ord('l'): frame_no = int(input("Please enter the frame number you would like to skip to\n")) cap.set(1,frame_no-5) cap.release() cv2.destroyAllWindows() #97a #115s #100d #102f #103g #104h #106j #107k #108l