我正在分析一个非常低帧率的视频。如果视频中的某些内容符合我的要求,则计数将增加1。一旦计数达到3,屏幕亮度将降低,然后再次增加,然后返回到默认设置(开始亮度)。
我一开始就是这样得到当前屏幕亮度的:
objWMI = GetObject('winmgmts:\\\\.\\root\\WMI').InstancesOf('WmiMonitorBrightness')
for obj in objWMI:
startpointbrightness = obj.CurrentBrightness
print(startpointbrightness)我的循环定义如下(以降低帧率):
frame_rate = 0.3
prev = 0
cap = cv2.VideoCapture(0)
framerate = cap.get(5)
count = 0
while True:
# Grab a single frame of video every frame-rate
time_elapsed = time.time() - prev
ret, frame = cap.read()
if time_elapsed > 1./frame_rate:
prev = time.time()
if label == "action_happened":
count = count + 1
if count == 3:
methods.WmiSetBrightness(0, 0)
methods.WmiSetBrightness(1, 100)
methods.WmiSetBrightness(1, startpointbrightness)问题是只处理最后一条if语句中的第一行methods.WmiSetBrightness(0,0)
任何帮助都非常感谢。谢谢!
发布于 2020-07-20 17:20:18
WmiSetBrightness方法接受两个参数。第一个是以秒为单位的时间。你指的是第一个参数中的1秒吗?
发布于 2020-07-21 02:10:28
我问了鸭子,但找不到任何文档来真正解释超时参数的用途。
我确实找到了这个项目(我不运行Windows,所以我无法检查),可以成功地使用相同的调用:
https://github.com/blackholeearth/Win10_BrightnessSlider/blob/master/Win10_BrightnessSlider/Form1.cs
foreach (ManagementObject mObj in objectCollection)
{
mObj.InvokeMethod("WmiSetBrightness",
new Object[] { UInt32.MaxValue, targetBrightness });
break;
}循环遍历对象并总是中断,基本上就是在列表中的第一个对象上调用方法。我不知道这是不是你想要的。
我建议您不要尝试同时进行所有这三个设置。相反,您应该构建一个状态机,并在每次通过外部循环时更新它:
def set_monitor_brightness(percent):
"""Under Windows, use WMI to set monitor brightness to a percentage of maximum"""
timeout = 2 ** 32 - 1
methods.WmiSetBrightness(timeout, percent)
Monitor_blink_state = None
def start_monitor_blink():
""" Begin a 'monitor blink' to draw the user's attention"""
global Monitor_blink_state
Monitor_blink_state = "MIN"
set_monitor_brightness(0)
def update_monitor_blink():
"""Update a monitor blink, if one is happening."""
global Monitor_blink_state
if Monitor_blink_state is None:
return
if Monitor_blink_state == "MIN":
Monitor_blink_state = "MAX"
set_monitor_brightness(100)
elif Monitor_blink_state == "MAX":
Monitor_blink_state = None
set_monitor_brightness(startpointbrightness)
# ... later ...
while True:
update_monitor_blink()
# rest of your code
if count == 3:
start_monitor_blink()https://stackoverflow.com/questions/62991866
复制相似问题