class Detector(object):
    def __init__(self):
        # self.video_stream = VideoStream(
        #     src=0, usePiCamera=True, width=640, height=480, framerate=32)
        self.video_stream = cv2.VideoCapture(0)
        self.video_stream.set(cv2.CAP_PROP_FRAME_WIDTH, 640)
        self.video_stream.set(cv2.CAP_PROP_FRAME_HEIGHT, 480)

        self.fire_cascade = cv2.CascadeClassifier('fire_detection.xml')
        self.host = '192.168.43.52'
        self.port = 24485
        time.sleep(2)
        self.timeCheck = time.time()
        self.socket_client = SocketClient()
        print("init success...")

    def start(self):
        self.socket_client.connect(self.host, self.port)
        print('Connected...')
        while True:
            # Get the next frame.
            success, frame = self.video_stream.read()
            if not success:
                break

            # Show video stream
            #gray = cv2.cvtColor(frame, cv2.COLOR_BGR2GRAY)
            #fire = self.fire_cascade.detectMultiScale(frame, 1.2, 5)
            #for (x, y, w, h) in fire:
            #    cv2.rectangle(frame, (x, y), (x+w, y+h), (0, 0, 255), 2)
            #    font = cv2.FONT_HERSHEY_SIMPLEX
            #    roi_gray = gray[y:y+h, x:x+w]
            #    roi_color = frame[y:y+h, x:x+w]
            #    time.sleep(0.2)
            #    print('Detected')
            #    cv2.imwrite('sector2.png', frame)
            #    self.send_frame(frame)

            #cv2.imshow('out', frame)
            self.send_frame(frame)
            key = cv2.waitKey(1) & 0xFF

            # if the `q` key was pressed, break from the loop.
            if key == ord("q"):
                break
            self.timeCheck = time.time()
        self.stop()

    def send_frame(self, frame):
        encode_param = [int(cv2.IMWRITE_JPEG_QUALITY), 90]  #90的压缩率
        result, frame = cv2.imencode('.jpg', frame, encode_param)
        self.socket_client.send_frame(frame)

    def stop(self):
        self.video_stream.release()
        cv2.destroyAllWindows()
class Detector(object):
    def __init__(self):
        self.video_stream = VideoStream(
            src=0, usePiCamera=True, resolution=(640, 480), framerate=32).start()
        self.fire_cascade = cv2.CascadeClassifier('fire_detection.xml')
        self.host = '192.168.1.223'
        self.port = 8486
        time.sleep(2.0)
        self.timeCheck = time.time()
        self.socket_client = SocketClient()

    def start(self):
        self.socket_client.connect(self.host, self.port)
        print('Connected')
        while True:
            # Get the next frame.
            frame = self.video_stream.read()

            # Show video stream
            gray = cv2.cvtColor(frame, cv2.COLOR_BGR2GRAY)
            fire = self.fire_cascade.detectMultiScale(frame, 1.2, 5)
            for (x, y, w, h) in fire:
                cv2.rectangle(frame, (x, y), (x+w, y+h), (0, 0, 255), 2)
                font = cv2.FONT_HERSHEY_SIMPLEX
                roi_gray = gray[y:y+h, x:x+w]
                roi_color = frame[y:y+h, x:x+w]
                time.sleep(0.2)
                print('Detected')
                cv2.imwrite('sector2.png', frame)
                self.send_frame(frame)
            cv2.imshow('out', frame)
            key = cv2.waitKey(1) & 0xFF

            # if the `q` key was pressed, break from the loop.
            if key == ord("q"):
                break

            self.timeCheck = time.time()

    def send_frame(self, frame):
        encode_param = [int(cv2.IMWRITE_JPEG_QUALITY), 90]
        result, frame = cv2.imencode('.jpg', frame, encode_param)
        self.socket_client.send_frame(frame)

    def stop(self):
        cv2.destroyAllWindows()
        self.video_stream.stop()