Esempio n. 1
0
def main():
    ocrEngine = OCREngine()
    threading.Thread(target=ocrEngine.startWebcam).start()

    while True:
        if ocrEngine.webcamImage is not None:
            image = ocrEngine.recognizeCharacters(ocrEngine.webcamImage)

            if ocrEngine.isRunning == False:
                break
Esempio n. 2
0
 def __init__(self, image: Image):
     self.page = image
     self.processed_page = OCREngine.preprocess_image(image)
     self.tokens = None
     self.grouped_tokens = None
     self.regions = None
     self.tokens_by_block_and_line = None
     self.size = {"x": image.size[0], "y": image.size[1]}
Esempio n. 3
0
    def __init__(self):
        camera = Camera()
        ocrEngine = OCREngine()
        faceRecognitionEngine = FaceRecognitionEngine(camera.rectangleMatrix)
        broadcastTransmitter = BroadcastTransmitter()

        threading.Thread(target = camera.start).start()     # running camera in a separate thread to avoid camera FPS loss...
        threading.Thread(target = self.performRecognition, args = (camera, ocrEngine,)).start()      # running optical character recognition in a separate thread...
        threading.Thread(target = self.performRecognition, args = (camera, faceRecognitionEngine,)).start()      # running face recognition in another thread...
        threading.Thread(target = broadcastTransmitter.start, args = (camera,)).start()

        # threading.Thread(target = camera.start).start()     # running camera in a separate thread to avoid camera FPS loss...
        '''counter = 1
Esempio n. 4
0
    def __init__(self, GUI):
        self.is_terminated = False
        self.GUI = GUI

        self.hwnd = self.hook_window()
        self.OCR = OCREngine()
        self.AnalysisEngine = AnalysisEngine()
        self.Brain = Brain()

        self.last_ss_time = time.time_ns()
        self.last_ss = None
        self.active = []

        self.last_cook_time = None
        self.last_food = ""

        self.is_paused = False

        self.is_editing = False
        self.edit_stack = []

        keyboard.on_press(self.key_hook)
        keyboard.add_hotkey("enter", self.end_edit)
Esempio n. 5
0
 def get_all_tokens(self):
     ocr_engine = OCREngine()
     return {
         page_number + 1: ocr_engine.OCR(page)
         for (page_number, page) in enumerate(self.pages)
     }
Esempio n. 6
0
 def do_OCR(self, verbose: bool = False):
     if not self.tokens:
         ocr_engine = OCREngine()
         self.tokens, self.grouped_tokens, self.tokens_by_block_and_line, self.regions = ocr_engine.OCR(
             self.processed_page, verbose=verbose)
Esempio n. 7
0
class Bot:
    def __init__(self, GUI):
        self.is_terminated = False
        self.GUI = GUI

        self.hwnd = self.hook_window()
        self.OCR = OCREngine()
        self.AnalysisEngine = AnalysisEngine()
        self.Brain = Brain()

        self.last_ss_time = time.time_ns()
        self.last_ss = None
        self.active = []

        self.last_cook_time = None
        self.last_food = ""

        self.is_paused = False

        self.is_editing = False
        self.edit_stack = []

        keyboard.on_press(self.key_hook)
        keyboard.add_hotkey("enter", self.end_edit)

    def key_hook(self, e):
        if e.name == "f1":
            self.terminate()
        elif e.name == "f2":
            self.pause()
        elif e.name == "f3":
            self.edit()
        elif self.is_editing and not keyboard.is_pressed("ctrl"):
            self.edit_stack.append(e.name)

    def hook_window(self):
        windows = []

        def enum_handler(hwnd, lParam):
            title = win32gui.GetWindowText(hwnd)
            if title == 'Cook, Serve, Delicious!' or 'CSDBot:' in title:
                windows.append(hwnd)

        win32gui.EnumWindows(enum_handler, None)

        if len(windows) == 0:
            input(
                "Error! Game not detected. Press [ENTER] when the game is loaded. "
            )
            return self.hook_window()

        return windows[0]

    def terminate(self):
        self.is_terminated = True

    def edit(self):
        self.is_editing = True

    def pause(self):
        self.is_paused = not self.is_paused
        keyboard.press_and_release("esc")

    def end_edit(self):
        if not self.is_editing:
            return

        self.is_editing = False

        if len(self.edit_stack) > 0 and self.edit_stack[-1] != "enter":
            self.edit_stack.append("enter")

        self.Brain.save(self.edit_stack)

        self.edit_stack = []

    def title(self):
        base = "CSDBot: [F1 - QUIT / F2 - PAUSE / F3 - EDIT]"
        if self.is_terminated:
            print(f"[!] Bye!")
            win32gui.SetWindowText(self.hwnd, "Cook, Serve, Delicious!")
            sys.exit(0)
        elif self.is_paused:
            win32gui.SetWindowText(self.hwnd, f"{base} ~ Paused")
        elif self.is_editing:
            win32gui.SetWindowText(
                self.hwnd,
                f"{base} ~ {self.Brain.lastUnknown}: {self.edit_stack}")
        else:
            win32gui.SetWindowText(self.hwnd, f"{base}{self.Brain.status()}")

    def update(self):
        while True:
            self.title()

            if self.is_paused:
                continue

            if time.time_ns() - self.last_ss_time > 100000000:
                delta = (time.time_ns() - self.last_ss_time) / 1000000000
                self.last_ss_time = time.time_ns()

                image = self.AnalysisEngine.normalize(
                    self.GUI.screenshot(self.hwnd))

                if self.last_ss and self.AnalysisEngine.image_equal(
                        image, self.last_ss):
                    Delay.add_freezetime(delta)
                elif delta > 1.2:
                    Delay.add_freezetime(delta - 0.5)

                self.last_ss = image
                self.active = self.AnalysisEngine.get_active(image)

                self.Brain.update(self.active)

                if not self.Brain.is_cooking():
                    text = self.OCR.text(self.AnalysisEngine.crop_order(image))

                    text = text.split("\n")[0].split("  ")[0]
                    text = re.sub(r'[^a-zA-Z ]', "", text).strip()

                    if text:
                        if text == "Robbery Witness Criminal Description":
                            desc = self.OCR.text(
                                self.AnalysisEngine.crop_desc(image))
                            desc = re.sub(r'\n', " ", desc).strip()
                            desc = desc.lower()
                            self.Brain.robber(desc)
                        else:
                            if text == self.last_food and time.time_ns(
                            ) - self.last_ss_time < 100000000:
                                continue  # make sure the same food doesn't get parsed twice!

                            self.Brain.process(text)
                            self.last_food = text
                            self.last_cook_time = time.time_ns()