Нейросеть управляет вашим компьютером.
Написал код для того чтобы нейросеть смогла совершать примитивные действия с вашим компьютером на основе скриншота вашего экрана:
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 часа чтобы посмотреть что начудит нейронка, может быть поделюсь видео здесь.
20 комментариев