1. 먼저 이것부터 설치

Windows에서 Python이 없다면 Python 3.11 이상을 설치한 뒤 CMD에서:

pip install opencv-python pyautogui pillow numpy requests

2. 아래 코드를 lie_detector.py로 저장

import tkinter as tkfrom tkinter import messageboximport pyautoguiimport cv2import numpy as npimport timeimport threadingimport requests# =========================================================# 설정# =========================================================CHECK_INTERVAL = 0.3# 감지 기준.# 0.65 정도부터 시작해서 필요하면 조절MATCH_THRESHOLD = 0.65# 디스코드 웹훅.# 처음 테스트할 때는 빈칸으로 둬도 됨.DISCORD_WEBHOOK = ""# 감시 영역monitor_region = None# 실행 상태running = Falselast_detected = False# =========================================================# 디스코드 알림# =========================================================def send_discord(message):    if not DISCORD_WEBHOOK:        return    try:        requests.post(            DISCORD_WEBHOOK,            json={"content": message},            timeout=5        )    except Exception as e:        print("디스코드 전송 실패:", e)# =========================================================# 화면 영역 선택# =========================================================class RegionSelector:    def __init__(self):        self.root = tk.Tk()        self.root.attributes("-fullscreen", True)        self.root.attributes("-alpha", 0.25)        self.root.configure(bg="black")        self.canvas = tk.Canvas(            self.root,            cursor="cross",            bg="black"        )        self.canvas.pack(fill="both", expand=True)        self.start_x = 0        self.start_y = 0        self.rect = None        self.canvas.bind(            "<ButtonPress-1>",            self.mouse_down        )        self.canvas.bind(            "<B1-Motion>",            self.mouse_drag        )        self.canvas.bind(            "<ButtonRelease-1>",            self.mouse_up        )        self.canvas.create_text(            400,            100,            text="감시할 영역을 마우스로 드래그하세요",            fill="white",            font=("Arial", 24)        )        self.root.mainloop()    def mouse_down(self, event):        self.start_x = event.x        self.start_y = event.y        if self.rect:            self.canvas.delete(self.rect)        self.rect = self.canvas.create_rectangle(            self.start_x,            self.start_y,            self.start_x,            self.start_y,            outline="red",            width=4        )    def mouse_drag(self, event):        if self.rect:            self.canvas.coords(                self.rect,                self.start_x,                self.start_y,                event.x,                event.y            )    def mouse_up(self, event):        global monitor_region        x1 = min(self.start_x, event.x)        y1 = min(self.start_y, event.y)        x2 = max(self.start_x, event.x)        y2 = max(self.start_y, event.y)        width = x2 - x1        height = y2 - y1        if width < 100 or height < 100:            messagebox.showwarning(                "영역이 너무 작습니다",                "팝업이 들어갈 정도로 넓게 선택해주세요."            )            return        monitor_region = (            x1,            y1,            width,            height        )        self.root.destroy()# =========================================================# LIE DETECTOR 판별# =========================================================def detect_lie_detector(img):    """    화면에서 LIE DETECTOR 팝업을 찾는다.    OCR 없이 화면의 구조와 색상/문자 영역을 이용한    간단한 1차 탐지 버전.    """    if img is None:        return False, 0.0    # BGR -> HSV    hsv = cv2.cvtColor(img, cv2.COLOR_BGR2HSV)    # 밝은 글자 영역 탐색    gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)    # 대비 강화    gray = cv2.equalizeHist(gray)    # 밝은 영역    _, bright = cv2.threshold(        gray,        160,        255,        cv2.THRESH_BINARY    )    # 작은 노이즈 제거    kernel = np.ones((3, 3), np.uint8)    bright = cv2.morphologyEx(        bright,        cv2.MORPH_OPEN,        kernel    )    # 팝업 테두리 탐색    contours, _ = cv2.findContours(        bright,        cv2.RETR_EXTERNAL,        cv2.CHAIN_APPROX_SIMPLE    )    h, w = img.shape[:2]    possible = 0    for contour in contours:        x, y, cw, ch = cv2.boundingRect(contour)        # 너무 작은 영역 무시        if cw < w * 0.2:            continue        if ch < h * 0.03:            continue        # 화면 상단에 제목 영역이 존재하는지 확인        if y < h * 0.25:            possible += 1    # 화면 중앙에 큰 팝업이 있는지 확인    center_crop = img[        int(h * 0.05):int(h * 0.95),        int(w * 0.05):int(w * 0.95)    ]    if center_crop.size == 0:        return False, 0.0    center_gray = cv2.cvtColor(        center_crop,        cv2.COLOR_BGR2GRAY    )    # 평균 밝기    brightness = np.mean(center_gray)    # 팝업이 있는 화면은 중앙에 비교적 큰 영역이 존재    score = 0.0    if possible >= 1:        score += 0.35    if 45 < brightness < 220:        score += 0.15    # 파란색 UI 영역 탐색    hsv_center = cv2.cvtColor(        center_crop,        cv2.COLOR_BGR2HSV    )    lower_blue = np.array([80, 50, 50])    upper_blue = np.array([140, 255, 255])    blue_mask = cv2.inRange(        hsv_center,        lower_blue,        upper_blue    )    blue_ratio = np.mean(blue_mask > 0)    if blue_ratio > 0.05:        score += 0.30    # 밝은 글자 비율    bright_ratio = np.mean(        cv2.threshold(            center_gray,            180,            255,            cv2.THRESH_BINARY        )[1] > 0    )    if bright_ratio > 0.03:        score += 0.20    return score >= MATCH_THRESHOLD, score# =========================================================# 감시 루프# =========================================================def monitor_loop():    global running    global last_detected    print()    print("==============================")    print(" LIE DETECTOR 감시 시작")    print("==============================")    print("감시 영역:", monitor_region)    print()    while running:        try:            screenshot = pyautogui.screenshot(                region=monitor_region            )            frame = cv2.cvtColor(                np.array(screenshot),                cv2.COLOR_RGB2BGR            )            detected, score = detect_lie_detector(frame)            print(                f"r감지 점수: {score:.2f}",                end=""            )            # 새롭게 감지된 경우만 알림            if detected and not last_detected:                print()                print()                print("🚨 LIE DETECTOR 감지!")                send_discord(                    "🚨 **LIE DETECTOR 감지!**n"                    "화면에서 거짓말 탐지 미니게임이 감지되었습니다."                )                # Windows 알림음                try:                    import winsound                    winsound.Beep(                        1200,                        500                    )                    winsound.Beep(                        1600,                        500                    )                except:                    pass            last_detected = detected        except Exception as e:            print()            print(                "감시 오류:",                e            )        time.sleep(            CHECK_INTERVAL        )# =========================================================# 메인# =========================================================def main():    global running    print()    print("======================================")    print("      LIE DETECTOR 화면 감지기")    print("======================================")    print()    print("1. 감시 영역을 선택합니다.")    print("2. 오른쪽 아래의 팝업을 포함하도록 드래그하세요.")    print()    # 감시 영역 선택    RegionSelector()    if monitor_region is None:        print("감시 영역이 선택되지 않았습니다.")        return    print()    print("선택된 영역:", monitor_region)    print()    input(        "게임을 켜고 준비한 다음 ENTER를 누르세요..."    )    running = True    thread = threading.Thread(        target=monitor_loop,        daemon=True    )    thread.start()    print()    print("감시 중입니다.")    print("종료하려면 이 창에서 Ctrl + C")    print()    try:        while True:            time.sleep(1)    except KeyboardInterrupt:        running = False        print()        print("감시를 종료합니다.")if __name__ == "__main__":    main()

3. 실행

CMD에서 해당 파일이 있는 폴더로 이동해서:

python lie_detector.py

실행하면 화면이 어두워지고 마우스로 감시 영역을 지정하라고 나올 거야.

여기서 네 게임의 오른쪽 아래 알림이 나타나는 영역을 넉넉하게 드래그하면 돼.



어차피 할생각도없었지만야 걍 만들어줘 도라에몽 하니깐 바로 뚝딱나오네;;