Skip to content

info

cmd_info(ctx, id=1, camera_name=None, camera_codec=VideoCodec.yuyv.name, camera_width=1920, camera_height=1080) #

Get properties of connected cameras

Source code in cogip/tools/camera/info.py
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
def cmd_info(
    ctx: typer.Context,
    id: Annotated[
        int,
        typer.Option(
            "-i",
            "--id",
            min=0,
            help="Robot ID.",
            envvar=["ROBOT_ID", "CAMERA_ID"],
        ),
    ] = 1,
    camera_name: Annotated[
        Optional[CameraName],  # noqa
        typer.Option(
            help="Name of the camera (all if not specified)",
            envvar="CAMERA_NAME",
        ),
    ] = None,
    camera_codec: Annotated[
        VideoCodec,
        typer.Option(
            help="Camera video codec",
            envvar="CAMERA_CODEC",
        ),
    ] = VideoCodec.yuyv.name,
    camera_width: Annotated[
        int,
        typer.Option(
            help="Camera frame width",
            envvar="CAMERA_WIDTH",
        ),
    ] = 1920,
    camera_height: Annotated[
        int,
        typer.Option(
            help="Camera frame height",
            envvar="CAMERA_HEIGHT",
        ),
    ] = 1080,
):
    """Get properties of connected cameras"""
    obj = ctx.ensure_object(dict)
    debug = obj.get("debug", False)

    if debug:
        logging.getLogger("linuxpy.video").setLevel(logging.DEBUG)
    else:
        logging.getLogger("linuxpy.video").setLevel(logging.INFO)

    if camera_name:
        if not Path(camera_name.val).exists():
            logger.error(f"Camera not found: {camera_name}")
            return

        if camera_name != CameraName.rpicam:
            camera = device.Device(camera_name.val)
            try:
                camera.open()
            except OSError:
                logger.error(f"Failed to open {camera_name.val}")
                return
            USBCamera.print_device_info(camera)
            camera.close()
        else:
            RPiCamera.print_device_info()

        show_stream(id, camera_name, camera_codec, camera_width, camera_height)
        return

    for camera in device.iter_video_capture_devices():
        try:
            camera.open()
        except OSError:
            pass
        else:
            USBCamera.print_device_info(camera)
            camera.close()
            print()