diff --git a/camera/SCP.py b/camera/SCP.py new file mode 100644 index 0000000..b789159 --- /dev/null +++ b/camera/SCP.py @@ -0,0 +1,45 @@ +import tempfile, pexpect + +def scp(src_name, dest_name, host, user, password, timeout=30, bg_run=False): + """SSH'es to a host using the supplied credentials and executes a command. + Throws an exception if the command doesn't return 0. + bgrun: run command in the background""" + + fname = tempfile.mktemp() + fout = open(fname, 'w') + + options = '-q -oStrictHostKeyChecking=no -oUserKnownHostsFile=/dev/null -oPubkeyAuthentication=no' + if bg_run: + options += ' -f' + scp_cmd = 'scp %s %s@%s:%s' % (src_name, user, host, dest_name) + child = pexpect.spawn(scp_cmd, timeout=timeout, encoding='UTF-8') + child.expect(['password: ']) + child.sendline(password) + child.logfile = fout + + child.expect(pexpect.EOF) + + + # We expect any of these three patterns... + #i = child.expect (['Permission denied', 'Terminal type', '[#\$] ']) + #if i==0: + # print('Permission denied on host. Can\'t login') + # child.kill(0) + #elif i==1: + # print('Login OK... need to send terminal type.') + # child.sendline('vt100') + # child.expect('[#\$] ') + #elif i==2: + # print('Login OK.') + # print('Shell command prompt', child.after) + + child.close() + fout.close() + + fin = open(fname, 'r') + stdout = fin.read() + fin.close() + + if 0 != child.exitstatus: + raise Exception(stdout) + return stdout diff --git a/camera/person-detection.py b/camera/person-detection.py new file mode 100644 index 0000000..7b83323 --- /dev/null +++ b/camera/person-detection.py @@ -0,0 +1,52 @@ +# import the necessary packages +from __future__ import print_function +from imutils.object_detection import non_max_suppression +from imutils import paths +import numpy as np +import argparse +import imutils +import cv2 + +# construct the argument parse and parse the arguments +ap = argparse.ArgumentParser() +ap.add_argument("-i", "--images", required=True, help="path to images directory") +args = vars(ap.parse_args()) + +# initialize the HOG descriptor/person detector +hog = cv2.HOGDescriptor() +hog.setSVMDetector(cv2.HOGDescriptor_getDefaultPeopleDetector()) + +# loop over the image paths +for imagePath in paths.list_images(args["images"]): + # load the image and resize it to (1) reduce detection time + # and (2) improve detection accuracy + image = cv2.imread(imagePath) + image = imutils.resize(image, width=min(400, image.shape[1])) + orig = image.copy() + + # detect people in the image + (rects, weights) = hog.detectMultiScale(image, winStride=(4, 4), + padding=(8, 8), scale=1.05) + + # draw the original bounding boxes + for (x, y, w, h) in rects: + cv2.rectangle(orig, (x, y), (x + w, y + h), (0, 0, 255), 2) + + # apply non-maxima suppression to the bounding boxes using a + # fairly large overlap threshold to try to maintain overlapping + # boxes that are still people + rects = np.array([[x, y, x + w, y + h] for (x, y, w, h) in rects]) + pick = non_max_suppression(rects, probs=None, overlapThresh=0.65) + + # draw the final bounding boxes + for (xA, yA, xB, yB) in pick: + cv2.rectangle(image, (xA, yA), (xB, yB), (0, 255, 0), 2) + + # show some information on the number of bounding boxes + filename = imagePath[imagePath.rfind("/") + 1:] + print("[INFO] {}: {} original boxes, {} after suppression".format(filename, len(rects), len(pick))) + + # show the output images + #cv2.imshow("Before NMS", orig) + #cv2.imshow("After NMS", image) + #cv2.waitKey(0)