forked from tobybreckon/python-examples-cv
-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathgeneric_interface.py
More file actions
112 lines (71 loc) · 3.8 KB
/
generic_interface.py
File metadata and controls
112 lines (71 loc) · 3.8 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
################################################################################
# Example : perform generic live display from a video file
# specified on the command line (e.g. python FILE.py video_file) or from an
# attached web camera
# Author : Toby Breckon, toby.breckon@durham.ac.uk
# Copyright (c) 2015 - 2018 Toby Breckon, Engineering & Computing Science,
# Durham University, UK
# License : LGPL - http://www.gnu.org/licenses/lgpl.html
################################################################################
import cv2
import argparse
import sys
import math
################################################################################
keep_processing = True;
# parse command line arguments for camera ID or video file
parser = argparse.ArgumentParser(description='Perform ' + sys.argv[0] + ' example operation on incoming camera/video image')
parser.add_argument("-c", "--camera_to_use", type=int, help="specify camera to use", default=0)
parser.add_argument("-fs", "--fullscreen", action='store_true', help="run in full screen mode");
parser.add_argument('video_file', metavar='video_file', type=str, nargs='?', help='specify optional video file')
args = parser.parse_args()
################################################################################
# define video capture object
cap = cv2.VideoCapture();
# define display window name
windowName = "Live Camera Input"; # window name
# if command line arguments are provided try to read video_name
# otherwise default to capture from attached camera
if (((args.video_file) and (cap.open(str(args.video_file))))
or (cap.open(args.camera_to_use))):
# create window by name (as resizable)
cv2.namedWindow(windowName, cv2.WINDOW_NORMAL);
while (keep_processing):
# start a timer (to see how long processing and display takes)
start_t = cv2.getTickCount();
# if camera /video file successfully open then read frame
if (cap.isOpened):
ret, frame = cap.read();
# when we reach the end of the video (file) exit cleanly
if (ret == 0):
keep_processing = False;
continue;
# ***
# *** do any processing here ****
# ***
# display image
cv2.imshow(windowName,frame);
cv2.setWindowProperty(windowName, cv2.WND_PROP_FULLSCREEN,
cv2.WINDOW_FULLSCREEN & args.fullscreen);
# stop the timer and convert to ms. (to see how long processing and display takes)
stop_t = ((cv2.getTickCount() - start_t)/cv2.getTickFrequency()) * 1000;
# start the event loop - essential
# cv2.waitKey() is a keyboard binding function (argument is the time in milliseconds).
# It waits for specified milliseconds for any keyboard event.
# If you press any key in that time, the program continues.
# If 0 is passed, it waits indefinitely for a key stroke.
# (bitwise and with 0xFF to extract least significant byte of multi-byte response)
# here we use a wait time in ms. that takes account of processing time already used in the loop
# wait 40ms or less depending on processing time taken (i.e. 1000ms / 25 fps = 40 ms)
key = cv2.waitKey(max(2, 40 - int(math.ceil(stop_t)))) & 0xFF;
# It can also be set to detect specific key strokes by recording which key is pressed
# e.g. if user presses "x" then exit / press "f" for fullscreen display
if (key == ord('x')):
keep_processing = False;
elif (key == ord('f')):
args.fullscreen = not(args.fullscreen);
# close all windows
cv2.destroyAllWindows()
else:
print("No video file specified or camera connected.");
################################################################################