57 lines
No EOL
2.1 KiB
Python
57 lines
No EOL
2.1 KiB
Python
"""Однократный снимок экрана с отрисовкой найденной шкалы, целевой зоны и курсора.
|
||
Запускать, когда мини-игра видна на экране - результат сохраняется в debug_snapshot.png."""
|
||
from time import sleep
|
||
|
||
import cv2
|
||
|
||
import vision
|
||
from capture import ScreenCapture
|
||
|
||
|
||
def main():
|
||
cap = ScreenCapture()
|
||
print(f"Захват экрана: {cap.backend}")
|
||
|
||
frame = cap.grab()
|
||
if frame is None:
|
||
print("Не удалось получить кадр.")
|
||
if cap.backend == "mss":
|
||
print("mss обычно не видит эксклюзивный полноэкранный режим.")
|
||
print("Установите bettercam (pip install bettercam) или переключите игру в borderless.")
|
||
return
|
||
|
||
out = frame.copy()
|
||
bar = vision.locate_bar(frame)
|
||
if bar is None:
|
||
print("Шкала не найдена. Откройте мини-игру на экране и запустите снова,")
|
||
print("либо подправьте пороги BLUE_* в config.py.")
|
||
cv2.imwrite("debug_full.png", out)
|
||
print("Сохранён полный кадр: debug_full.png")
|
||
return
|
||
|
||
bx, by, bw, bh = bar
|
||
print(f"Шкала: x={bx}, y={by}, w={bw}, h={bh}")
|
||
cv2.rectangle(out, (bx, by), (bx + bw, by + bh), (255, 0, 0), 2)
|
||
|
||
zone = vision.find_target_zone(frame, bar)
|
||
if zone:
|
||
zx0, zx1 = zone
|
||
print(f"Узкая (целевая) зона: x от {zx0} до {zx1}")
|
||
cv2.rectangle(out, (zx0, by), (zx1, by + bh), (0, 0, 255), 2)
|
||
else:
|
||
print("Целевая зона не найдена.")
|
||
|
||
cursor_x = vision.locate_cursor(frame, bar)
|
||
if cursor_x is not None:
|
||
print(f"Курсор: x = {cursor_x:.1f}")
|
||
cv2.line(out, (int(cursor_x), by - 5), (int(cursor_x), by + bh + 5), (255, 0, 255), 2)
|
||
else:
|
||
print("Курсор не найден.")
|
||
|
||
cv2.imwrite("debug_snapshot.png", out)
|
||
print("Сохранён debug_snapshot.png")
|
||
|
||
|
||
if __name__ == "__main__":
|
||
sleep(5)
|
||
main() |