class tracking(): def __init__(self, port, technique, window_mode, shapes, writing, rect_height, rect_width): self.technique = technique self.shapes = shapes self.writing = writing self.rect_height = rect_height self.rect_width = rect_width self.ard = Arduino(port) print('access port available') self.cap = cv2.VideoCapture(0) print('camera available') fourcc = cv2.VideoWriter_fourcc(*'XVID') self.writer = cv2.VideoWriter("videos/" + self.create_file_name(), fourcc, self.video_speed(), (640, 480)) self.face_cascade = cv2.CascadeClassifier( 'haarcascades/haarcascade_frontalface_default.xml') cv2.namedWindow(self.technique, window_mode) self.xValue = 90 self.yValue = 90 self.height = 0 self.width = 0 self.yScrCen = 0 self.xScrCen = 0 self.yScrSaf = 0 self.xScrSaf = 0 self.xFaceCen = 0 self.yFaceCen = 0 self.xDep = 0 self.yDep = 0 self.nbImages = 0 self.oldNbImages = 0 self.tpsPre = time.time() def init_moteur(self): self.xValue = 90 self.yValue = 90 self.ard.servoAttach(1, 6) self.ard.servoAttach(2, 7) self.ard.servoWrite(1, self.xValue) self.ard.servoWrite(2, self.yValue) print('moteur initialisation succeeded') def init_screen_values(self): _, frame = self.cap.read() self.height, self.width = frame.shape[:2] self.height = int(self.height / 1) self.width = int(self.width / 1) self.yScrCen = int(self.height / 2) self.xScrCen = int(self.width / 2) self.yScrSaf = int(self.height / self.rect_height) self.xScrSaf = int(self.width / self.rect_width) def image(self): _, frame = self.cap.read() frame = cv2.flip(frame, 1) #size = (self.width, self.height) #frame = cv2.resize(frame, size, interpolation = 3) gray = cv2.cvtColor(frame, cv2.COLOR_BGR2GRAY) return (frame, gray) def detect_faces(self, gray): faces = self.face_cascade.detectMultiScale(gray, 1.3, 5) return faces def face_center(self, x, y, w, h): self.xFaceCen = x + int(w / 2) self.yFaceCen = y + int(h / 2) def calcul_deplacement(self): print(self.yScrCen) print(self.yFaceCen) xEcart = abs(self.xScrCen - self.xFaceCen) # - self.xScrSaf yEcart = abs(self.yScrCen - self.yFaceCen) # - self.yScrSaf self.xDep = int(xEcart / 50) + 1 self.yDep = int(yEcart / 50) + 1 self.xDep = xEcart self.yDep = yEcart def moove_camera(self): """ if(self.xScrCen - self.xScrSaf > self.xFaceCen): self.xValue += self.xDep if(self.xValue > 180): self.xValue = 180 if(self.xScrSaf + self.xScrCen < self.xFaceCen): self.xValue -= self.xDep if(self.xValue < 0): self.xValue = 0 if(self.yScrCen + self.yScrSaf < self.yFaceCen): self.yValue -= self.yDep if(self.yValue < 90-YLIMIT): self.yValue = 90-YLIMIT if(self.yScrCen - self.yScrSaf > self.yFaceCen): self.yValue += self.yDep if(self.yValue > 90+YLIMIT): self.yValue = 90+YLIMIT self.ard.servoWrite(1, self.xValue) self.ard.servoWrite(2, self.yValue) """ invX = 1 invY = 1 if (self.xScrCen < self.xFaceCen): invX = 0 if (self.yScrCen < self.yFaceCen): invY = 0 print("x : {} y : {}".format(self.xDep, self.yDep)) self.ard.mapping(self.xDep, self.yDep, invX, invY) def add_face_lines(self, frame, x, y, w, h): if (self.shapes): cv2.rectangle(frame, (x, y), (x + w, y + h), (255, 0, 0), 2) #cv2.line(frame, (self.xFaceCen-10, self.yFaceCen), (self.xFaceCen+10, self.yFaceCen), (0,255,0), 4) #cv2.line(frame, (self.xFaceCen, self.yFaceCen-10), (self.xFaceCen, self.yFaceCen+10), (0,255,0), 4) def add_lines(self, frame): if (self.shapes): cv2.line(frame, (0, self.yScrCen), (self.width, self.yScrCen), (0, 0, 0), 2) cv2.line(frame, (self.xScrCen, 0), (self.xScrCen, self.height), (0, 0, 0), 2) cv2.line( frame, (self.xScrCen - self.xScrSaf, self.yScrCen - self.yScrSaf), (self.xScrCen + self.xScrSaf, self.yScrCen - self.yScrSaf), (0, 0, 0), 2) cv2.line( frame, (self.xScrCen - self.xScrSaf, self.yScrCen + self.yScrSaf), (self.xScrCen + self.xScrSaf, self.yScrCen + self.yScrSaf), (0, 0, 0), 2) cv2.line( frame, (self.xScrCen - self.xScrSaf, self.yScrCen - self.yScrSaf), (self.xScrCen - self.xScrSaf, self.yScrCen + self.yScrSaf), (0, 0, 0), 2) cv2.line( frame, (self.xScrCen + self.xScrSaf, self.yScrCen - self.yScrSaf), (self.xScrCen + self.xScrSaf, self.yScrCen + self.yScrSaf), (0, 0, 0), 2) def afficher_image(self, frame): if (deFace): frame = cv2.flip(frame, 1) cv2.imshow(self.technique, frame) self.add_image() def writing_image(self, frame): if (self.writing): self.writer.write(frame) def release_all(self): self.stopMotor() self.cap.release() cv2.destroyAllWindows() self.ard.close() def create_file_name(self): dateNow = datetime.now() date = dateNow.strftime("%d-%b %Hh%M") file_name = 'project-' if (self.technique == 'tracking'): file_name += 'track ' elif (self.technique == 'detection'): file_name += 'detect ' else: print('wrong value of "technique"') file_name += str(date) + ".avi" return file_name def video_speed(self): if (self.technique == 'tracking'): return 29 elif (self.technique == 'detection'): return 14 else: print('wrong value of "technique"') def add_image(self): self.nbImages += 1 def one_second(self): diff = time.time() - self.tpsPre if (diff >= 1): ecart = self.nbImages - self.oldNbImages self.oldNbImages = self.nbImages self.tpsPre = time.time() return True, ecart else: return False, None def stopMotor(self): self.ard.stop()
port = 'COM3' ard = Arduino(port) print('access port available') testX = 0 testY = 90 xValue = testX yValue = testY ard.servoAttach(1, 6) ard.servoAttach(2, 7) ard.servoWrite(1, xValue) ard.servoWrite(2, yValue) time.sleep(2) ard.mapping(10) time.sleep(1) ard.mapping(20) time.sleep(1) ard.mapping(30) time.sleep(1) ard.mapping(40) time.sleep(1) ard.mapping(50) time.sleep(1) ard.mapping(200) time.sleep(1) ard.close() print("finished succefully")
import time import struct import serial from commandesPython import Arduino #time.sleep(5) print("starting") time.sleep(1) port = 'COM5' ard = Arduino(port) print('access port available') test = 0 xValue = test yValue = test ard.servoAttach(1, 7) ard.servoWrite(1, xValue) time.sleep(2) ard.mapping(100) time.sleep(1) ard.mapping(240) ard.close() print("finished succefully") time.sleep(2)