def diffCheckProcess(self): interval = self.param['interval'] while True: sTime = FXTimeUtil.getT() if self.movementValMean < self.param['movementCheck']['thr']: if self.debugLevel >= 2: print "no movements. diff check" img = self.getImg() if img==None: continue imgGray = cv2.cvtColor(img, cv2.COLOR_RGB2GRAY) imgGray = cv2.GaussianBlur(imgGray, (5,5),0) lapImg = cv2.Laplacian(imgGray, cv2.CV_32F, ksize=3) #lapImg = lapImg.astype(np.uint8) #conjunction #kernel = cv2.getStructuringElement(cv2.MORPH_ELLIPSE, (5, 5)) #lapImg = cv2.dilate(lapImg, kernel, iterations=2) #lapImg = cv2.erode(lapImg, kernel, iterations=2) if self.diffCheckImg == None: self.diffCheckImg = lapImg diffImg = cv2.absdiff(lapImg, self.diffCheckImg) ret, diffImg = cv2.threshold(diffImg, 10, 255, cv2.THRESH_BINARY) diffImg = diffImg.astype(np.uint8) #noise reduction kernel = cv2.getStructuringElement(cv2.MORPH_ELLIPSE, (3, 3)) diffImg = cv2.erode(diffImg, kernel, iterations=2) diffImg = cv2.dilate(diffImg, kernel, iterations=2) diffImg = cv2.bitwise_and(diffImg, self.diffCheckMask) if self.debugLevel >= 1: dispImg = diffImg.copy() dispImg = FXImageUtil.scaleImage(diffImg, 0.25) cv2.imshow("diffImg", dispImg) val = cv2.mean(diffImg) val = float(val[0]) self.diffVal = val self.diffCheckImg = lapImg if self.debugLevel >= 2: print "HD difference val: %f" % self.diffVal if useRoyWeb: ps.send('diff', self.diffVal, 'v', 'diffVal') if self.diffVal > self.param['thr']: print "difference is detected" thumbSize = self.param['dstThumb']['size'] thumbImg = cv2.resize(img, (thumbSize[0], thumbSize[1])) if self.thumbRectFlag: kernel = cv2.getStructuringElement(cv2.MORPH_ELLIPSE, (100, 100)) diffImgArea = cv2.dilate(diffImg, kernel) diffImgArea = cv2.erode(diffImgArea, kernel) contours, hierarchy = cv2.findContours(diffImgArea, cv2.RETR_EXTERNAL, cv2.CHAIN_APPROX_NONE) #get max rectangle areas = [cv2.contourArea(contour) for contour in contours] cnt_max = [contours[areas.index(max(areas))]][0] rect = cv2.boundingRect(cnt_max) #draw rectangle offset = 20 pt1 = (int((rect[0]-offset) * self.thumbScale), int((rect[1]-offset) * self.thumbScale)) pt2 = (int((rect[0]+rect[2]+offset) * self.thumbScale), int((rect[1]+rect[3]+offset) * self.thumbScale)) cv2.rectangle(thumbImg, pt1, pt2, self.thumbRectColor, thickness=self.thumbRectThickness) self.handleWBCapture(img, thumbImg) if self.debugLevel >= 1: dispImg = FXImageUtil.scaleImage(img, 0.25) cv2.imshow("captured wb", dispImg) dispImg = FXImageUtil.scaleImage(diffImg, 0.25) cv2.imshow("captured wb diff", dispImg) else: if self.debugLevel >= 2: print "movement is detected. skip diff check" duration = FXTimeUtil.getT() - sTime if duration < interval: time.sleep(interval - duration) duration = interval cv2.waitKey(1)