1

我做了一切来用 python 操作 ptz

我不确定是否专注于/专注。Onvif主页,似乎显示为焦点移动。

我不知道要获取和编辑什么值,所以我会上传它。

而且即使在调整光圈(光圈)值时,降低该值也可以,但是如果您这样做+,则该值不会很好地改变

在这种情况下,我认为

ptz = mycam.create_imaging_service()

如果通过 ptz.GetOptions() 查看选项,Iris 值为 0(Max)和 -22(Min)。

媒体 = mycam.create_media_service()

media_profile = media.GetVideoSources()[0]

在这里,相机的图像设置是通过 GetVideoSources 加载的。从这个值,在 Imaging.Exposure

有当前光圈值的Iris,Iris最大值的MaxIris,最小值的MinIris。

如果当前光圈值为 -5,则 MinIris 取 -22,但 MaxIris 带来当前光圈值 -5。

即使我每次加载它时都带着改变的值,它似乎也不会改变,但如果你知道如何修复它,请。

@api_view(['POST'])
def getMovePTZ(request):
    logger.debug("getMovePTZ start : %s", request.data)
    ptz_type = request.data.get('data')['ptz_type']
    ptz_direction = request.data.get('data')['ptz_direction']
    ptz_active = request.data.get('data')['ptz_active']

    Min = {}
    Max = {}

    if ptz_type == 'iris':
        # Create img service object
        ptz = mycam.create_imaging_service()
        imgrequest = ptz.create_type('GetImagingSettings')
        # Get target profile
        media_profile = media.GetVideoSources()[0]
        imgrequest.VideoSourceToken = media_profile.token
        img_configuration_options = ptz.GetOptions(imgrequest)

        moverequest = ptz.create_type('SetImagingSettings')
        moverequest.VideoSourceToken = media_profile.token
        if moverequest.ImagingSettings is None:
            moverequest.ImagingSettings = ptz.GetImagingSettings({'VideoSourceToken': media_profile.token})
            Min['iris'] = img_configuration_options.Exposure.Iris.Min
            Max['iris'] = img_configuration_options.Exposure.Iris.Max
    else:
        # Create ptz service object
        ptz = mycam.create_ptz_service()
        ptzrequest = ptz.create_type('GetConfigurationOptions')
        # Get target profile
        media_profile = media.GetProfiles()[0]
        ptzrequest.ConfigurationToken = media_profile.PTZConfiguration.token
        ptz_configuration_options = ptz.GetConfigurationOptions(ptzrequest)
        moverequest = ptz.create_type('ContinuousMove')
        moverequest.ProfileToken = media_profile.token
        if moverequest.Velocity is None:
            moverequest.Velocity = ptz.GetStatus({'ProfileToken': media_profile.token}).Position
            moverequest.Velocity.PanTilt.space = ptz_configuration_options.Spaces.ContinuousPanTiltVelocitySpace[0].URI
            moverequest.Velocity.Zoom.space = ptz_configuration_options.Spaces.ContinuousZoomVelocitySpace[0].URI
    direction = {
        'panning': move_panning,
        'upleft': move_upleft,
        'up': move_up,
        'upright': move_upright,
        'left': move_left,
        'right': move_right,
        'downleft': move_downleft,
        'down': move_down,
        'downright': move_downright,
        'wide': zoom_wide,
        'tele': zoom_tele,
        'in': iris_in,
        'out': iris_out,
    }
    func = direction[ptz_direction]
    if ptz_type == 'iris':
        func(ptz, moverequest, ptz_active)
    else:
        func(ptz, moverequest, Min, Max)
    return Response(None)


def ptz_move(ptz, request, active):
    if active:
        ptz.ContinuousMove(request)
    else:
        ptz.Stop({'ProfileToken': request.ProfileToken})


def move_panning(ptz, request, active):
    request.Velocity.PanTilt.x = XMOVE
    request.Velocity.PanTilt.y = 0
    request.Velocity.Zoom.x = 0
    ptz_move(ptz, request, active)


def move_up(ptz, request, active):
    request.Velocity.PanTilt.y = YMOVE
    request.Velocity.PanTilt.x = 0
    request.Velocity.Zoom.x = 0
    ptz_move(ptz, request, active)


def move_down(ptz, request, active):
    request.Velocity.PanTilt.y = -YMOVE
    request.Velocity.PanTilt.x = 0
    request.Velocity.Zoom.x = 0
    ptz_move(ptz, request, active)


def move_right(ptz, request, active):
    request.Velocity.PanTilt.x = XMOVE
    request.Velocity.PanTilt.y = 0
    request.Velocity.Zoom.x = 0
    ptz_move(ptz, request, active)


def move_left(ptz, request, active):
    request.Velocity.PanTilt.x = -XMOVE
    request.Velocity.PanTilt.y = 0
    request.Velocity.Zoom.x = 0
    ptz_move(ptz, request, active)


def move_upleft(ptz, request, active):
    request.Velocity.PanTilt.x = -XMOVE
    request.Velocity.PanTilt.y = YMOVE
    request.Velocity.Zoom.x = 0
    ptz_move(ptz, request, active)


def move_upright(ptz, request, active):
    request.Velocity.PanTilt.x = XMOVE
    request.Velocity.PanTilt.y = YMOVE
    request.Velocity.Zoom.x = 0
    ptz_move(ptz, request, active)


def move_downleft(ptz, request, active):
    request.Velocity.PanTilt.x = -XMOVE
    request.Velocity.PanTilt.y = -YMOVE
    request.Velocity.Zoom.x = 0
    ptz_move(ptz, request, active)


def move_downright(ptz, request, active):
    request.Velocity.PanTilt.x = XMOVE
    request.Velocity.PanTilt.y = -YMOVE
    request.Velocity.Zoom.x = 0
    ptz_move(ptz, request, active)


def zoom_wide(ptz, request, active):
    request.Velocity.Zoom.x = -ZMOVE
    request.Velocity.PanTilt.x = 0
    request.Velocity.PanTilt.y = 0
    ptz_move(ptz, request, active)


def zoom_tele(ptz, request, active):
    request.Velocity.Zoom.x = ZMOVE
    request.Velocity.PanTilt.x = 0
    request.Velocity.PanTilt.y = 0
    ptz_move(ptz, request, active)


def iris_in(ptz, request, Min, Max):
    request.ImagingSettings.Exposure.Iris -= 1
    if request.ImagingSettings.Exposure.Iris < Min['iris']:
        request.ImagingSettings.Exposure.Iris = Min['iris']
    ptz.SetImagingSettings(request)


def iris_out(ptz, request, Min, Max):
    request.ImagingSettings.Exposure.Iris += 1
    if request.ImagingSettings.Exposure.Iris > Max['iris']:
        request.ImagingSettings.Exposure.Iris = Max['iris']
    ptz.SetImagingSettings(request)
4

0 回答 0