示例#1
0
class Server():
    def __init__(self, portNo):
        self.host = socket.gethostname()
        print("host ", self.host)
        self.port = portNo
        print("port ", self.port)
        self.size = 4096
        self.sock = socket.socket()
        print("sock 1", self.sock)
        self.sock.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1)
        print("sock 2", self.sock)
        self.sock.bind((self.host, self.port))
        print("sock 3", self.sock)
        self.sock.listen(1)
        print("sock 4", self.sock)
        self.conn, self.addr = self.sock.accept()
        print("sock 5", self.sock)
        print("Client connected")

        self.billReader = BillReader()
        self.currencyRecognizer = CurrencyRecognizer()
        # self.currencyRecognizer.configure("D:\\TP_PROGS\\Projects\\TeProjSahara\\progs\\Sahara-System-For-Aiding-Visually-Impaired-master\\Sahara-System-For-Aiding-Visually-Impaired-master\\Server_side\\DataFiles\\yolov3.weights",\
        #      "D:\\TP_PROGS\\Projects\\TeProjSahara\\progs\\Sahara-System-For-Aiding-Visually-Impaired-master\\Sahara-System-For-Aiding-Visually-Impaired-master\\Server_side\\DataFiles\\yolov3-tiny.cfg", \
        #          ('10','20','50','100','200','500','2000'))
        self.summarizer = Summarizer()
        self.textRecognizer = TextRecognizer()
        self.bot = Bot()
        self.objectDet = DetectObject()
        self.maskDet = DetectMask()

    def fetchData(self):
        data = b""
        try:
            while True:
                dataChunk = self.conn.recv(self.size)
                data += dataChunk
                if dataChunk.endswith(b"eof"):
                    data = data[:-3]
                    imgString, command = data.split(b"mof")
                    nparr = np.frombuffer(imgString, np.uint8)
                    image = cv2.imdecode(nparr, cv2.IMREAD_UNCHANGED)
                    break

            return image, command

        except ValueError:
            return None, ""

    def selectModule(self, image, command):
        msg = ""
        intent, _ = self.bot.getIntent(command.decode("utf-8"))
        cv2.imshow('image', image)
        cv2.waitKey(0)
        cv2.destroyAllWindows()
        image = cv2.cvtColor(image, cv2.COLOR_BGR2RGB)
        # cv2.imshow('image', image)
        # cv2.waitKey(0)
        # cv2.destroyAllWindows()
        print(intent)
        global flag

        if flag == 1:
            if intent == "Next":
                msg, temp = self.currencyRecognizer.readCurr(image)
                if temp == 0:
                    pass
                else:
                    totCash.append(temp)
                    msg = msg + " say NEXT to continue, STOP for final amount"

            elif intent == "Stop":
                finalAmt = totAmt()
                msg = "Total amount of cash in your hand is equal to " + str(
                    finalAmt)
                flag = 0
            else:
                msg = "I didnt catch what you said, Please repeat"

        else:
            if intent == "CurrencyRecognition":
                msg, _ = self.currencyRecognizer.readCurr(image)
            elif intent == "BillReading":
                msg = self.billReader.readBill(image)
            elif intent == "TextSummarization":
                text = self.textRecognizer.ocr(image)
                msg = self.summarizer.generateSummary(text)
            elif intent == "BasicTextReading":
                msg = self.textRecognizer.ocr(image)
            elif intent == "Object":
                msg = self.objectDet.objDetect(image)
            elif intent == "Mask":
                msg = self.maskDet.masKDetect(image)

            elif intent == "TotalCash":
                msg, temp = self.currencyRecognizer.readCurr(image)
                totCash.append(temp)
                if temp == 0:
                    pass
                else:
                    msg = msg + " To continue totalling say the word NEXT. To get the final total say STOP"
                    flag = 1
            else:
                msg = "I didnt catch what you said. Please repeat"

        print(msg)
        return msg

    def sendReply(self, msg):
        msg = ".".join(msg.splitlines())
        msg += '\n'
        self.conn.send(msg.encode())

    def keepListening(self):
        print("on")
        while True:
            image, command = self.fetchData()
            print("image", command)
            if len(command) != 0:
                msgFromModule = self.selectModule(image, command)
                self.sendReply(msgFromModule)
            else:
                self.sendReply(
                    "Something went wrong. Please click the picture again.")

    def restartServer(self):
        self.conn.close()
        self.sock.bind((self.host, self.port))
        self.sock.listen(1)
        self.conn, self.addr = self.sock.accept()

    def closeConnection(self):
        self.conn.close()

    def __del__(self):
        self.conn.close()
class Server():
    def __init__(self, portNo):
        self.host = socket.gethostname()
        self.port = portNo
        self.size = 4096
        self.sock = socket.socket()
        self.sock.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1)
        self.sock.bind((self.host, self.port))
        self.sock.listen(1)
        self.conn, self.addr = self.sock.accept()
        print("Client connected")

        self.billReader = BillReader()
        self.currencyRecognizer = CurrencyRecognizer()
        self.currencyRecognizer.configure("/Users/dhavalbagal/Desktop/BE-PROJECT/Sahara/DataFiles/yolov3.weights",\
             "/Users/dhavalbagal/Desktop/BE-PROJECT/Sahara/DataFiles/yolov3-tiny.cfg", \
                 ('10','20','50','100','200','500','2000'))
        self.summarizer = Summarizer()
        self.textRecognizer = TextRecognizer()
        self.bot = Bot()

    def fetchData(self):
        data = b""
        try:
            while True:
                dataChunk = self.conn.recv(self.size)
                data += dataChunk
                if dataChunk.endswith(b"eof"):
                    data = data[:-3]
                    imgString, command = data.split(b"mof")
                    nparr = np.frombuffer(imgString, np.uint8)
                    image = cv2.imdecode(nparr, cv2.IMREAD_UNCHANGED)
                    break

            return image, command

        except ValueError:
            return None, ""

    def selectModule(self, image, command):
        msg = ""
        intent, _ = self.bot.getIntent(command.decode("utf-8"))
        image = cv2.cvtColor(image, cv2.COLOR_RGB2BGR)
        if intent == "CurrencyRecognition":
            msg = self.currencyRecognizer.giveTotal(image)
        elif intent == "BillReading":
            msg = self.billReader.readBill(image)
        elif intent == "TextSummarization":
            text = self.textRecognizer.ocr(image)
            msg = self.summarizer.generateSummary(text)
        elif intent == "BasicTextReading":
            msg = self.textRecognizer.ocr(image)

        return msg

    def sendReply(self, msg):
        msg = ".".join(msg.splitlines())
        msg += '\n'
        self.conn.send(msg.encode())

    def keepListening(self):
        while True:
            image, command = self.fetchData()
            if len(command) != 0:
                msgFromModule = self.selectModule(image, command)
                self.sendReply(msgFromModule)
            else:
                self.sendReply(
                    "Something went wrong. Please click the picture again.")

    def restartServer(self):
        self.conn.close()
        self.sock.bind((self.host, self.port))
        self.sock.listen(1)
        self.conn, self.addr = self.sock.accept()

    def closeConnection(self):
        self.conn.close()

    def __del__(self):
        self.conn.close()