egor230

веб камера

Jul 23rd, 2025
168
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Python 4.92 KB | Source Code | 0 0
  1. import cv2, sys, os, time, warnings, subprocess
  2. from pynput.keyboard import Key, Controller
  3. warnings.filterwarnings('ignore')
  4. # Путь к файлу Haar Cascade (ваш локальный файл)
  5. cascade_path = "/mnt/807EB5FA7EB5E954/софт/виртуальная машина/linux must have/python_linux/Project/haarcascade_frontalface_default.xml"
  6.  
  7.  
  8. def enhance_brightness(frame):
  9.  # Перевод в YUV, улучшение яркости канала Y
  10.  yuv = cv2.cvtColor(frame, cv2.COLOR_BGR2YUV)
  11.  yuv[:, :, 0] = cv2.equalizeHist(yuv[:, :, 0])
  12.  return cv2.cvtColor(yuv, cv2.COLOR_YUV2BGR)
  13.  
  14.  
  15. # Проверка существования файла Haar Cascade
  16. if not os.path.exists(cascade_path):
  17.     print(f"Ошибка: Файл каскада не найден по пути {cascade_path}")
  18.     sys.exit(1)
  19.  
  20. # Загрузка классификатора Haar Cascade
  21. face_cascade = cv2.CascadeClassifier(cascade_path)
  22. if face_cascade.empty():
  23.     print(f"Ошибка: Не удалось загрузить файл каскада {cascade_path}")
  24.     sys.exit(1)
  25.  
  26. # Подключение к веб-камере с использованием V4L2
  27. cap = cv2.VideoCapture('/dev/video0', cv2.CAP_V4L2)  # Попробуйте '/dev/video1', если не работает
  28. if not cap.isOpened():
  29.     print("Ошибка: Не удалось открыть веб-камеру. Попробуйте '/dev/video1' или другой индекс.")
  30.     # Попытка открыть альтернативное устройство
  31.     cap = cv2.VideoCapture('/dev/video1', cv2.CAP_V4L2)
  32.     if not cap.isOpened():
  33.         print("Ошибка: Не удалось открыть веб-камеру на '/dev/video1'. Проверьте устройство.")
  34.         sys.exit(1)
  35.  
  36. # Установка разрешения камеры для ускорения обработки
  37. cap.set(cv2.CAP_PROP_FRAME_WIDTH, 320)
  38. cap.set(cv2.CAP_PROP_FRAME_HEIGHT, 240)
  39.  
  40. # Инициализация трекера KCF
  41. tracker = cv2.TrackerKCF_create()
  42. tracker_initialized = False
  43. bbox = None  # Переменная для хранения координат лица
  44. right = 50
  45. left = 220
  46. # Создаем объект для управления клавиатурой
  47. keyboard = Controller()
  48. # Основной цикл обработки кадров
  49. while True: # Если трекер не инициализирован, ищем лицо с помощью Haar Cascade
  50.  
  51.  # Захват кадра с веб-камеры
  52.  ret, frame = cap.read()
  53.  
  54.  frame = enhance_brightness(frame)
  55.  if not tracker_initialized:
  56.   # Преобразование кадра в серый цвет для ускорения обнаружения
  57.   gray = cv2.cvtColor(frame, cv2.COLOR_BGR2GRAY)
  58.   faces = face_cascade.detectMultiScale(gray, scaleFactor=1.3, minNeighbors=3, minSize=(20, 20))
  59.  
  60.   # Если лицо найдено, инициализируем трекер
  61.   if len(faces) > 0:
  62.    x, y, w, h = faces[0]  # Берем первое обнаруженное лицо
  63.    bbox = (x, y, w, h)
  64.    tracker.init(frame, bbox)
  65.    tracker_initialized = True
  66.  else:  # Обновление трекера для отслеживания лица
  67.   success, bbox = tracker.update(frame)
  68.   x, y, w, h = [int(v) for v in bbox]  # Преобразуем координаты в целые числа
  69.   cv2.rectangle(frame, (x, y), (x + w, y + h), (0, 255, 0), 2)  # Рисуем зеленый прямоугольник вокруг лица
  70.   cv2.putText(frame, f'({x}, {y})', (x, y - 10), cv2.FONT_HERSHEY_SIMPLEX, 0.5, (0, 255, 0), 1)  # Добавляем координаты над прямоугольником
  71.   if not success: # Если трекер потерял лицо, сбрасываем инициализацию
  72.    tracker_initialized = False
  73.    tracker = cv2.TrackerKCF_create()  # Создаем новый трекер для повторной инициализации
  74.  
  75.  # Отрисовка прямоугольника и вывод координат
  76.  
  77.  if bbox is not None:
  78.   if x < right:
  79.     keyboard.press('d')  # Нажимаем и удерживаем кнопку "d"
  80.   if x > right:
  81.     keyboard.release('d')  # Отпускаем кнопку "d"
  82.   if x > left:
  83.     keyboard.press('a')  # Нажимаем и удерживаем кнопку "d"
  84.   if x < left:
  85.    keyboard.release('a')  # Отпускаем кнопку "d"
  86.  else:
  87.     keyboard.release('d')  # Отпускаем кнопку "d"
  88.     keyboard.release('a')  # Отпускаем кнопку "d"
  89.  cv2.imshow("Head Tracking", frame) # Отображение кадра с наложенным прямоугольником
  90.  
  91.  # Выход из цикла по нажатию клавиши 'q'
  92.  if cv2.waitKey(1) & 0xFF == ord('q'):
  93.   break
  94.  
  95. # Освобождение ресурсов
  96. cap.release()
  97. cv2.destroyAllWindows()
  98.  
  99.  
Advertisement
Add Comment
Please, Sign In to add comment