def
findBrightestArea7x5(arr): cx=7 # Anzahl Elemente auf der X-Achse cy=5 # Anzahl Elemente auf der Y-Achse w=91 # Breite eines Elements h=96 # Höhe eines Elements max_seg=None max_seg_idx_x=None max_seg_sum=0 for x in range(cx): # über die Segmente auf der X-Achse seg=arr[:, 1+x*w:1+x*w+w] tmp=np.sum(seg) if tmp>max_seg_sum: max_seg=seg # hellstes Segment auf der X-Achse max_seg_idx_x=x # X-Index merken max_seg_sum=tmp # dessen Helligkeits-Wert max_seg_idx_y=None max_seg_sum=0 for y in range(cy): # über die Segmente auf der Y-Achse seg=max_seg[y*h:y*h+h, :] tmp=np.sum(seg) if tmp>max_seg_sum: max_seg_sum=tmp max_seg_idx_y=y return(max_seg_idx_x, max_seg_idx_y) class IP_Cam: [...] def gotoMatrixElement(self, x, y): # 0,0 1,0 2,0 3,0 4,0 5,0 6,0 # 0,1 1,1 2,1 3,1 4,1 5,1 6,1 # 0,2 1,2 2,2 (3,2) 4,2 5,2 6,2 # 0,3 1,3 2,3 3,3 4,3 5,3 6,3 # 0,4 1,4 2,4 3,4 4,4 5,4 6,4 nam={0:"UP ", 2:"DOWN ", 4:"LEFT ", 6:"RIGHT", None:""} if y<2: dv=self.UP elif y>2: dv=self.DOWN else: dv=None if x<3: dh=self.LEFT elif x>3: dh=self.RIGHT else: dh=None tv=0 if not dv is None: if y in (0, 4): tv=0.581 elif y in (1, 3): tv=0.325 th=0 if not dh is None: if x in (0, 6): th=2.63 elif x in (1, 5): th=1.72 elif x in (2, 4): th=0.93 print(x, y, nam[dv], nam[dh], tv, th) if not dv is None and not dh is None: # wenn beide Achsen bewegt werden sollen if dv==self.UP: if dh==self.LEFT: if tv>th: # mehr vertikal self.gotoDirection(self.LEFT_UP, th) self.gotoDirection(self.UP, tv-th) else: # mehr horizontal self.gotoDirection(self.LEFT_UP, tv) self.gotoDirection(self.LEFT, th-tv) else: # dh==self.RIGHT if tv>th: # mehr vertikal self.gotoDirection(self.RIGHT_UP, th) self.gotoDirection(self.UP, tv-th) else: # mehr horizontal self.gotoDirection(self.RIGHT_UP, tv) self.gotoDirection(self.RIGHT, th-tv) else: # dv==self.DOWN if dh==self.LEFT: if tv>th: # mehr vertikal self.gotoDirection(self.LEFT_DOWN, th) self.gotoDirection(self.DOWN, tv-th) else: # mehr horizontal self.gotoDirection(self.LEFT_DOWN, tv) self.gotoDirection(self.LEFT, th-tv) else: # dh==self.RIGHT if tv>th: # mehr vertikal self.gotoDirection(self.RIGHT_DOWN, th) self.gotoDirection(self.DOWN, tv-th) else: # mehr horizontal self.gotoDirection(self.RIGHT_DOWN, tv) self.gotoDirection(self.RIGHT, th-tv) else: if not dv is None: self.gotoDirection(dv, tv) if not dh is None: self.gotoDirection(dh, th) if __name__=="__main__": cam=IP_Cam() img1=cam.getImageGrayscale() while True: time.sleep(0.2) img2=cam.getImageGrayscale() diff=cam.removeNoise(img1-img2) diff_sum=np.sum(diff) #diff_sum_p="{:,}".format(diff_sum) #print(diff_sum_p) if diff_sum>500000: t=datetime.datetime.utcnow() cam.saveImage(img1, "d_%s-1"%(t.strftime("%Y%m%d%H%M%S%f"))) cam.saveImage(img2, "d_%s-2"%(t.strftime("%Y%m%d%H%M%S%f"))) x, y=findBrightestArea7x5(diff) cam.saveImage(diff, "d_%s-d(%d,%d)"%(t.strftime("%Y%m%d%H%M%S%f"), x, y)) cam.gotoMatrixElement(x, y) time.sleep(0.2) img2=cam.getImageGrayscale() img1=img2 |