-
Notifications
You must be signed in to change notification settings - Fork 0
/
capture-positives.py
75 lines (65 loc) · 2.34 KB
/
capture-positives.py
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
import glob
import os
import sys
import select
import picamera
import cv2
import config
import face
# Prefix for positive training image filenames.
POSITIVE_FILE_PREFIX = 'positive_'
def is_letter_input(letter):
# Utility function to check if a specific character is available on stdin.
# Comparison is case insensitive.
if select.select([sys.stdin,],[],[],0.0)[0]:
input_char = sys.stdin.read(1)
return input_char.lower() == letter.lower()
return False
if __name__ == '__main__':
camera = config.get_camera()
# Create the directory for positive training images if it doesn't exist.
if not os.path.exists(config.POSITIVE_DIR):
os.makedirs(config.POSITIVE_DIR)
# Find the largest ID of existing positive images.
# Start new images after this ID value.
files = sorted(glob.glob(os.path.join(config.POSITIVE_DIR,
POSITIVE_FILE_PREFIX + '[0-9][0-9][0-9].pgm')))
count = 0
if len(files) > 0:
# Grab the count from the last filename.
count = int(files[-1][-7:-4])+1
print 'Capturing training images.'
print 'Enter your name'
s1=raw_input()
print 'Type c (and press enter) to capture an image.'
print 'Press Ctrl-C to quit.'
while True:
# Check if button was pressed or 'c' was received, then capture image.
if is_letter_input('c'):
print 'Capturing image...'
result = None
while(result==None):
image = camera.read()
cv2.imshow("input",image)
image = cv2.cvtColor(image, cv2.COLOR_RGB2GRAY)
result = face.detect_single(image)
# Convert image to grayscale.
#image = cv2.cvtColor(image, cv2.COLOR_RGB2GRAY)
# Get coordinates of single face in captured image.
#result = face.detect_single(image)
if result is None:
#print 'Could not detect single face! Check the image in capture.pgm' \
# ' to see what was captured and try again with only one face visible.'
image = camera.read()
continue
x, y, w, h = result
# Crop image as close as possible to desired face aspect ratio.
# Might be smaller if face is near edge of image.
crop = face.crop(image, x, y, w, h)
# Save image to file.
#filename = os.path.join(config.POSITIVE_DIR, '%s' % s1 + '%03d.pgm' % count)
fielfol = '/training/positive/'
filename = os.path.join(config.POSITIVE_DIR , '%s' % s1 + '%03d.pgm' %count)
cv2.imwrite(filename, crop)
print 'Found face and wrote training image', filename
count += 1