Mercurial Hosting > traffic-intelligence
changeset 886:d2eb8c93f7de
rename
author | Nicolas Saunier <nicolas.saunier@polymtl.ca> |
---|---|
date | Tue, 21 Mar 2017 17:51:38 -0400 |
parents | 7f61854fcc6d |
children | e2452abba0e7 |
files | scripts/manual-video-analysis.py scripts/manual_video_analysis.py |
diffstat | 2 files changed, 98 insertions(+), 98 deletions(-) [+] |
line wrap: on
line diff
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/scripts/manual-video-analysis.py Tue Mar 21 17:51:38 2017 -0400 @@ -0,0 +1,98 @@ +#! /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. Use this program in combination with a screen marker program (For example, Presentation Assistant) to draw multiple lines on the screen.''', + epilog = '''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 +You can easily spot mistakes in the csv file for a line with number, SKIP. If this happens, just delete the previous vehicle observation.''', + formatter_class=argparse.RawDescriptionHelpFormatter) +parser.add_argument('-i', dest = 'videoFilename', help = 'name of the video file', required = True) +parser.add_argument('-o', dest = 'outputFilename', help = 'name of the output file (csv file)') +parser.add_argument('-f', dest = 'firstFrameNum', help = 'number of first frame number to display', default = 0, type = int) + +args = parser.parse_args() + +print('''Commands: +u: New vehicle crossing the first line +i: Vehicle crossing subsequent lines +o: Press o when you make a mistake in input +p: Press p for a new pedestrian event (eg crossing) +d: Skip 100 frames +s: Skip 10 frames +c: Go back 100 frames +x: Go back 10 frames +Spacebar: Go forward one frame +l: Skip to frame number +q: Quit and end program''') + +cap = cv2.VideoCapture(args.videoFilename) +cap.set(cv2.cv.CV_CAP_PROP_POS_FRAMES, args.firstFrameNum) +cv2.namedWindow('Video', cv2.WINDOW_NORMAL) + +# output filename +if args.outputFilename is None: + i = args.videoFilename.rfind('.') + if i>0: + outputFilename = args.videoFilename[:i]+'.csv' + else: + outputFilename = args.videoFilename+'.csv' +else: + outputFilename = args.outputFilename +vehNumber = 0 +lineNum = -1 +out = open(outputFilename, 'a') + +while(cap.isOpened()): + ret, frame = cap.read() + frameNum = int(cap.get(cv2.cv.CV_CAP_PROP_POS_FRAMES)) + cv2.putText(frame, str(frameNum), (1,20), cv2.FONT_HERSHEY_PLAIN, 1, (255, 0,0)) + cv2.imshow('Video',frame) + + key= cv2.waitKey(0) +#Change the keys to record the vehicle in this section + if key == ord('q'): + break + elif key == ord('u') or key == ord('i'): + if key == ord('u'): + vehNumber += 1 + lineNum = 0 + print('New Vehicle') + out.write('{},{}\n'.format(vehNumber,frameNum)) + if vehNumber >= 1 and key == ord('i'): + lineNum = lineNum+1 + print('Line number {}'.format(lineNum)) + elif key == ord('o'): + out.write('{},SKIP\n'.format(vehNumber)) + print('SKIPPED') + elif key == ord('p'): + print("New Pedestrian") + out.write('Pedestrian,{}\n'.format(frameNum)) +#Change the number of frames skipped or the keys in this section + elif key == ord('d'): + cap.set(1,frameNum+100) + elif key == ord('s'): + cap.set(1,frameNum+10) + elif key == ord('a'): + cap.set(1,frameNum+1) + elif key == ord('x'): + cap.set(1,frameNum-10) + elif key == ord('c'): + cap.set(1,frameNum-100) + elif key == ord('l'): + frameNum = int(raw_input("Please enter the frame number you would like to skip to\n")) + cap.set(cv2.cv.CV_CAP_PROP_POS_FRAMES,frameNum-5) + + +cap.release() +cv2.destroyAllWindows() + +#97a +#115s +#100d +#102f +#103g +#104h +#106j +#107k +#108l
--- a/scripts/manual_video_analysis.py Tue Mar 21 17:48:14 2017 -0400 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,98 +0,0 @@ -#! /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. Use this program in combination with a screen marker program (For example, Presentation Assistant) to draw multiple lines on the screen.''', - epilog = '''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 -You can easily spot mistakes in the csv file for a line with number, SKIP. If this happens, just delete the previous vehicle observation.''', - formatter_class=argparse.RawDescriptionHelpFormatter) -parser.add_argument('-i', dest = 'videoFilename', help = 'name of the video file', required = True) -parser.add_argument('-o', dest = 'outputFilename', help = 'name of the output file (csv file)') -parser.add_argument('-f', dest = 'firstFrameNum', help = 'number of first frame number to display', default = 0, type = int) - -args = parser.parse_args() - -print('''Commands: -u: New vehicle crossing the first line -i: Vehicle crossing subsequent lines -o: Press o when you make a mistake in input -p: Press p for a new pedestrian event (eg crossing) -d: Skip 100 frames -s: Skip 10 frames -c: Go back 100 frames -x: Go back 10 frames -Spacebar: Go forward one frame -l: Skip to frame number -q: Quit and end program''') - -cap = cv2.VideoCapture(args.videoFilename) -cap.set(cv2.cv.CV_CAP_PROP_POS_FRAMES, args.firstFrameNum) -cv2.namedWindow('Video', cv2.WINDOW_NORMAL) - -# output filename -if args.outputFilename is None: - i = args.videoFilename.rfind('.') - if i>0: - outputFilename = args.videoFilename[:i]+'.csv' - else: - outputFilename = args.videoFilename+'.csv' -else: - outputFilename = args.outputFilename -vehNumber = 0 -lineNum = -1 -out = open(outputFilename, 'a') - -while(cap.isOpened()): - ret, frame = cap.read() - frameNum = int(cap.get(cv2.cv.CV_CAP_PROP_POS_FRAMES)) - cv2.putText(frame, str(frameNum), (1,20), cv2.FONT_HERSHEY_PLAIN, 1, (255, 0,0)) - cv2.imshow('Video',frame) - - key= cv2.waitKey(0) -#Change the keys to record the vehicle in this section - if key == ord('q'): - break - elif key == ord('u') or key == ord('i'): - if key == ord('u'): - vehNumber += 1 - lineNum = 0 - print('New Vehicle') - out.write('{},{}\n'.format(vehNumber,frameNum)) - if vehNumber >= 1 and key == ord('i'): - lineNum = lineNum+1 - print('Line number {}'.format(lineNum)) - elif key == ord('o'): - out.write('{},SKIP\n'.format(vehNumber)) - print('SKIPPED') - elif key == ord('p'): - print("New Pedestrian") - out.write('Pedestrian,{}\n'.format(frameNum)) -#Change the number of frames skipped or the keys in this section - elif key == ord('d'): - cap.set(1,frameNum+100) - elif key == ord('s'): - cap.set(1,frameNum+10) - elif key == ord('a'): - cap.set(1,frameNum+1) - elif key == ord('x'): - cap.set(1,frameNum-10) - elif key == ord('c'): - cap.set(1,frameNum-100) - elif key == ord('l'): - frameNum = int(raw_input("Please enter the frame number you would like to skip to\n")) - cap.set(cv2.cv.CV_CAP_PROP_POS_FRAMES,frameNum-5) - - -cap.release() -cv2.destroyAllWindows() - -#97a -#115s -#100d -#102f -#103g -#104h -#106j -#107k -#108l