Нейросеть управляет вашим компьютером.

Написал код для того чтобы нейросеть смогла совершать примитивные действия с вашим компьютером на основе скриншота вашего экрана:

import ollama import pyautogui import time import threading from PIL import ImageGrab import os from pathlib import Path # Константы DELAY = 15 # Задержка в секундах SCREENSHOT_PATH = "screenshot.jpg" # Путь для сохранения скриншота # Начальный промт INITIAL_PROMPT = """Я буду скидывать тебе изображения своего экрана. На основе него ты должен будешь выбрать какую-либо команду. Ты не должен писать что-либо кроме этих команд, все понятно?""" # Промт с командами COMMANDS_PROMPT = """Список команд: lcm<count> - Кликнуть ЛКМ кнопкой мыши count-раз pcm<count> - Кликнуть ПКМ кнопкой мыши count-раз move<left/right/down/up> - Переместить курсор мыши в указанном направлении на 50 пикселей input<text> - Ввести текст с клавиатуры/нажать клавишу """ def initialize_ollama(): """Инициализация модели и отправка начального промта""" try: response = ollama.chat( model='llama3.2-vision', messages=[{'role': 'user', 'content': INITIAL_PROMPT}] ) print("Инициализация прошла успешно:", response['message']['content']) except Exception as e: print(f"Ошибка при инициализации Ollama: {e}") raise def capture_screen(): """Захват скриншота экрана""" try: screenshot = ImageGrab.grab() screenshot.save(SCREENSHOT_PATH) return SCREENSHOT_PATH except Exception as e: print(f"Ошибка при захвате экрана: {e}") return None def send_screen_and_get_command(): """Отправка скриншота в модель и получение команды""" img_path = capture_screen() if not img_path: return try: with open(img_path, 'rb') as img_file: response = ollama.chat( model='llama3.2-vision', messages=[{ 'role': 'user', 'content': COMMANDS_PROMPT, 'images': [img_file.read()] }] ) command = response['message']['content'].strip() print(f"AI выбрал команду: {command}") execute_command(command) # Удаляем временный файл скриншота if os.path.exists(img_path): os.remove(img_path) except Exception as e: print(f"Ошибка при обработке команды: {e}") def execute_command(command): """Выполнение полученной команды""" try: if command.startswith("lcm"): count = int(command[3:]) for _ in range(count): pyautogui.click() time.sleep(0.1) # Небольшая задержка между кликами elif command.startswith("pcm"): count = int(command[3:]) for _ in range(count): pyautogui.click(button='right') time.sleep(0.1) elif command.startswith("move"): direction = command[4:] move_map = { "left": (-50, 0), "right": (50, 0), "up": (0, -50), "down": (0, 50) } if direction in move_map: pyautogui.moveRel(*move_map[direction], duration=0.2) elif command.startswith("input"): text = command[5:] pyautogui.write(text, interval=0.05) except ValueError as e: print(f"Ошибка в формате команды: {command}. Ошибка: {e}") except Exception as e: print(f"Ошибка при выполнении команды {command}: {e}") def main_loop(): """Основной цикл программы""" initialize_ollama() while True: try: send_screen_and_get_command() time.sleep(DELAY) except KeyboardInterrupt: print("\nПрограмма завершена пользователем") break except Exception as e: print(f"Ошибка в основном цикле: {e}") time.sleep(DELAY) # Продолжаем работу после ошибки if __name__ == "__main__": # Настройка pyautogui pyautogui.PAUSE = 0.1 # Задержка между действиями pyautogui pyautogui.FAILSAFE = True # Включение failsafe (выход при перемещении мыши в угол экрана) print("Программа запущена. Для выхода переместите мышь в верхний левый угол экрана или нажмите Ctrl+C") # Запуск основного цикла в отдельном потоке main_thread = threading.Thread(target=main_loop, daemon=True) main_thread.start() # Держим основной поток активным try: while True: time.sleep(1) except KeyboardInterrupt: print("\nПрограмма завершена")

Для работы необходимо локально установить llama3.2-vision.

Писал код для видеоролика на ютуб, сейчас оставляю компьютер на 24 часа чтобы посмотреть что начудит нейронка, может быть поделюсь видео здесь.

4
20 комментариев