Трибуна Пользователь
| Комментарии | 1 |
М_1117250068: комментарии
| Дата регистрации | 13 июня |
|---|---|
| Аккаунт | новичок |
| Настоящее имя | М' |
| Пол | я не знаю |
| Возраст | не указан |
| Читает блоги |
| Комментарии | 1 |
| Дата регистрации | 13 июня |
|---|---|
| Аккаунт | новичок |
| Настоящее имя | М' |
| Пол | я не знаю |
| Возраст | не указан |
| Читает блоги |
Import cv2
import numpy as np
import os
import time
import subprocess
# Танзимоти ранг (барои намуна рангҳои HSV-и сурх)
TARGET_COLOR_LOW = np.array([0, 100, 100])
TARGET_COLOR_HIGH = np.array([10, 255, 255])
def get_fast_screenshot():
"""
Усули тезонидашудаи скриншот.
Барои суръати максималӣ дар Android тавсия дода мешавад, ки кодро
тавассути scrcpy ё сокети ADB дар PC иҷро кунед, ё соҳаро маҳдуд кунед.
"""
# Фармони умумӣ барои гирифтани скриншот ба хотираи муваққатӣ
pipe = subprocess.Popen(["screencap", "-p"], stdout=subprocess.PIPE)
image_bytes = pipe.stdout.read()
# Табдил додани байтҳо мустақим ба массиви numpy (бе сабт дар флешка)
img_array = np.asarray(bytearray(image_bytes), dtype=np.uint8)
if len(img_array) == 0:
return None
return cv2.imdecode(img_array, cv2.IMREAD_COLOR)
def move_camera_swipe(dx, dy):
"""
Ҳалли мушкилии №2: Ҳаракат додани прицел бо кашидани ангушт (Swipe).
dx ва dy - масофаи зарурӣ барои ҳаракат аз маркази экран мебошанд.
"""
# Маркази экрани телефон (барои ҳар як модел метавонад фарқ кунад, масалан 1080х2400)
# Свайп аз марказ оғоз шуда, ба самти ҳадаф иҷро мешавад
start_x, start_y = 1080, 540
end_x = start_x + int(dx)
end_y = start_y + int(dy)
# Иҷрои свайпи хеле тез (дар давоми 50 миллисония)
os.system(f"input swipe {start_x} {start_y} {end_x} {end_y} 50")
def aimlock_mobile_pro():
screen = get_fast_screenshot()
if screen is None:
return
h, w, _ = screen.shape
screen_center_x = w // 2
screen_center_y = h // 2
# Буридани маркази экран (барои кам кардани вақти коркарди OpenCV)
crop_r = 200 # соҳаи ҷустуҷӯ 400x400
crop = screen[screen_center_y-crop_r:screen_center_y+crop_r, screen_center_x-crop_r:screen_center_x+crop_r]
hsv = cv2.cvtColor(crop, cv2.COLOR_BGR2HSV)
mask = cv2.inRange(hsv, TARGET_COLOR_LOW, TARGET_COLOR_HIGH)
# Ёфтани контурҳои ҳадаф барои ҳисоб кардани андозаи он
contours, _ = cv2.findContours(mask, cv2.RETR_EXTERNAL, cv2.CHAIN_APPROX_SIMPLE)
if contours:
# Гирифтани контури калонтарин (душмани наздиктарин)
largest_contour = max(contours, key=cv2.contourArea)
x, y, target_w, target_h = cv2.boundingRect(largest_contour)
# Маркази бадани душман дар соҳаи буридашуда
cX = x + target_w // 2
cY = y + target_h // 2
# Ҳалли мушкилии №3: Офсети динамикӣ вобаста ба баландии душман (target_h)
# Агар душман наздик бошад, target_h калон мешавад ва офсет ҳам зиёд мешавад
dynamic_offset_y = -int(target_h / 2.5)
# Нуқтаи ниҳоии сари душман нисбат ба маркази соҳа
target_pos_x = cX - crop_r
target_pos_y = (cY - crop_r) + dynamic_offset_y
# Агар фарқ аз марказ калон бошад, камераро ҳаракат медиҳем
if abs(target_pos_x) > 10 or abs(target_pos_y) > 10:
# Коэффисиенти ҳассосият (Sensitivity) барои бозӣ
sensitivity = 1.2
dx = target_pos_x * sensitivity
dy = target_pos_y * sensitivity
move_camera_swipe(dx, dy)
# Оғози скрипт
if __name__ == "__main__":
print("Скрипти аимлоки мобилӣ фаъол шуд...")
while True:
start_time = time.time()
aimlock_mobile_pro()
# Барои холӣ накардани қувваи батарея ва устувории кадрҳо
elapsed = time.time() - start_time
if elapsed < 0.03:
time.sleep(0.03 - elapsed)
Ана дурусташ кардам