import gxipy as gx
import cv2
import numpy as np


def main():
    print("Инициализация камеры...")
    
    # Создаем менеджер устройств
    device_manager = gx.DeviceManager()
    dev_num, dev_info_list = device_manager.update_all_device_list()
    
    if dev_num == 0:
        print("Камеры не найдены!")
        return

    # Открываем первую камеру
    cam = device_manager.open_device_by_index(1)
    
    # Устанавливаем непрерывный режим съемки (0 - Off, 1 - On)
    cam.TriggerMode.set(0)
    
    # Включаем поток данных
    cam.stream_on()

    print("Запуск видеопотока. Нажмите 'q' для выхода...")
    
    try:
        while True:
            # Получаем изображение
            raw_image = cam.data_stream[0].get_image()
            
            if raw_image is None:
                print("Ошибка получения изображения")
                continue

            # Преобразуем в numpy массив
            numpy_image = raw_image.get_numpy_array()
            
            if numpy_image is None:
                continue

            # Показываем изображение через OpenCV
            cv2.imshow('Camera Live', numpy_image)
            
            # Выход по нажатию 'q'
            if cv2.waitKey(1) & 0xFF == ord('q'):
                break
                
    except KeyboardInterrupt:
        print("Прервано пользователем")
    
    finally:
        # Очистка
        cv2.destroyAllWindows()
        cam.stream_off()
        cam.close_device()
        print("Камера отключена")


if __name__ == "__main__":
    main()