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 113 114 115 116
| import face_recognition import cv2 import time import threading import serial
framewidth = 640
ser = serial.Serial('COM5', 9600)
s = 23 slast = 23
class MyThread(threading.Thread): def __init__(self, func, name=''): threading.Thread.__init__(self) self.name = name self.func = func
def run(self): if self.name == "send": matter1() elif self.name == "change": matter2()
def matter1(): while True: global s global slast if (s != slast): ser.write(bytes(str(s), encoding="utf8")) print(s) slast = s time.sleep(2)
def matter2(): global s video_capture = cv2.VideoCapture(0)
obama_image = face_recognition.load_image_file("obama.jpg") obama_face_encoding = face_recognition.face_encodings(obama_image)[0] lijiawei_image = face_recognition.load_image_file("lijiawei.jpg") lijiawei_face_encoding = face_recognition.face_encodings(lijiawei_image)[0] known_face_encodings = [ obama_face_encoding, lijiawei_face_encoding] known_face_names = [ "Obama", "lijiawei"]
num = 0 process_this_frame = True while True: ret, frame = video_capture.read()
small_frame = cv2.resize(frame, (0, 0), fx=0.25, fy=0.25) rgb_small_frame = small_frame[:, :, ::-1]
if process_this_frame: face_locations = face_recognition.face_locations(rgb_small_frame) face_encodings = face_recognition.face_encodings(rgb_small_frame, face_locations) process_this_frame = not process_this_frame
for (top, right, bottom, left), face_encoding in zip(face_locations, face_encodings): top *= 4 right *= 4 bottom *= 4 left *= 4
s = int((left + right - 1) / framewidth * 45 / 2)
matches = face_recognition.compare_faces(known_face_encodings, face_encoding) name = "Unknown" for i in range(len(known_face_names)): if matches[i]: name = known_face_names[i] else: pass
cv2.putText(frame, "cam", (50, 100), cv2.FONT_HERSHEY_DUPLEX, 1, (0, 0, 255), 1) num = num + 1 filename = "output/frames_%s.jpg" % num cv2.imwrite(filename, frame)
cv2.rectangle(frame, (left, top), (right, bottom), (0, 0, 255), 2) cv2.rectangle(frame, (left, bottom - 35), (right, bottom), (0, 0, 255), cv2.FILLED) font = cv2.FONT_HERSHEY_DUPLEX cv2.putText(frame, name, (left + 6, bottom - 6), font, 1.0, (255, 255, 255), 1)
cv2.imshow('Video', frame)
if cv2.waitKey(1) & 0xFF == ord('q'): break
video_capture.release() cv2.destroyAllWindows()
if __name__ == '__main__': thing1 = MyThread(matter1, "send") thing2 = MyThread(matter2, "change") thing1.start() thing2.start() thing1.join() thing2.join() ser.close()
|