小编Bil*_*Ket的帖子

在 Python 中暂停和重新启动视频

我有几个视频,我想逐帧浏览它们,并通过按键盘键(取决于帧)对其中一些进行注释。对于许多帧我不会按任何键。这是我到目前为止所拥有的:

import numpy as np
import cv2

cap = cv2.VideoCapture('video.mp4')

frame_number = []
annotation_list = []

i = 0
while(True):        
    # Read one frame.
    ret, frame = cap.read()

    # Show one frame.
    cv2.imshow('frame', frame)

    # Set the time between frames in miliseconds
    c = cv2.waitKey(500)
    i = i + 1

    try:
        annotation_list = annotation_list + [chr(c)]
        frame_number = frame_number + [i]
    except:
        continue
Run Code Online (Sandbox Code Playgroud)

因此,这将显示每一帧 0.5 秒,并与我按下按钮的每一帧和给定的字母相关联。我现在需要的是一个选项,这样对于给定的帧,我可以根据需要在该帧处停止视频,例如按“空格”,以便考虑如何对其进行注释,然后按“空格” “一旦我决定如何注释,就再次继续视频。如何添加此暂停/继续选项?谢谢你!

python video opencv video-capture image-processing

7
推荐指数
1
解决办法
8948
查看次数

将多个 lambda 函数与 Pandas 数据框结合使用

我有一个 pd 数据框,其中名为“process_id”的列对于多个时间步骤具有与其关联的不同参数。我想从中提取一些信息并将它们放入一个新的数据框中(这样我就不必使用数据的所有细节)。下面是我的意思的一个例子,我为每个“process_id”保留每个参数的最小值、最大值、平均值和标准差,我还定义了一个 lambda 函数来保存最后 5 个时间步中参数的平均值:

features = df.groupby('process_id').agg(['min', 'max', 'mean', 'std', lambda x: x.tail(5).mean()])
Run Code Online (Sandbox Code Playgroud)

这工作正常,并且 lambda 函数将表中参数的名称更改为如下所示:“parameter_lambda”(不确定如何,但它有效)。现在的问题是,如果我想添加另一个 lambda 函数,像这样(或任何其他 lambda 定义):

features = df.groupby('process_id').agg(['min', 'max', 'mean', 'std', lambda x: x.tail(5).mean(),lambda x: x.iloc[0:int(len(df)/5)].mean()])
Run Code Online (Sandbox Code Playgroud)

我收到此错误:

函数名必须唯一,发现多个命名

这是有道理的,因为两个 lambda 函数在数据框中都具有相同的名称。但我不知道如何解决这个问题。

我试过这样的事情:

df.groupby('dummy').agg({'returns':{'Mean': np.mean, 'Sum': np.sum}})
Run Code Online (Sandbox Code Playgroud)

描述在这里,但我得到这个错误:

规范错误:无法使用嵌套字典为返回执行重命名

有人能帮我吗?谢谢!

python lambda pandas

3
推荐指数
1
解决办法
2135
查看次数

为什么三次样条的二阶导数看起来如此锯齿状?

我需要使用三次样条(我主要对高阶导数感兴趣),我从 scipy https://docs.scipy.org/doc/scipy-0.18.1/reference/ generated/scipy.interpolate 找到了这个例子。 CubicSpline.html(第一个带有 sin 函数的)。他们有这一行:plt.plot(xs, cs(xs, 2), label="S''"),我认为它应该绘制二阶导数。但 sin 的二阶导数是 -sin,而它们的函数确实看起来都是 -sin。我在这里缺少什么?我怎样才能真正得到二阶导数?谢谢你! 在此输入图像描述

python scipy cubic-spline

2
推荐指数
1
解决办法
2657
查看次数

获取 sympy 表达式的运算

如何获得 sympy 表达式中出现的操作?例如,对于:2+x**2+exp(7*x)-log(y),我需要返回类似: 的内容["+","**","exp","*","-","log"]。我发现有一种简单的方法来获取变量,使用.free_symbols. 有没有简单的操作方法?我还发现了这个函数:srepr它返回:"Add(Pow(Symbol('x'), Integer(2)), exp(Mul(Integer(7), Symbol('x'))), Mul(Integer(-1), log(Symbol('y'))), Integer(2))"。这包含了我需要的一切,但我不确定如何以有效的方式从那里提取我需要的所有部分?有人能帮我吗?谢谢你!

python sympy

2
推荐指数
1
解决办法
423
查看次数

对 sympy 中的负数感到困惑

我正在编写一个脚本,我试图在其中处理出现在 sympy 表达式中的不同数字。为了提取我需要的东西,我使用了类似的东西: isinstance(expr, sympy.numbers.Float),它检查出现在我的表达式中的数字是否是一个浮点数。这适用于大多数数字(浮点数、整数和有理数)。但是,我对负数有一些问题。例如,如果我这样做:

eq = parse_expr("cos(2*a)+cos(0.5*b)")
srepr(eq)
Run Code Online (Sandbox Code Playgroud)

我得到这个输出:

Add(cos(Mul(Integer(2), Symbol('a'))), cos(Mul(Float('0.5', precision=53), Symbol('b'))))
Run Code Online (Sandbox Code Playgroud)

这表示我有一个整数 2 和一个浮点数 0.5,这正是我所需要的。但是,如果我这样做:

eq = parse_expr("cos(-2*a)+cos(0.5*b)")
srepr(eq)
Run Code Online (Sandbox Code Playgroud)

我得到这个输出:

Add(cos(Mul(Integer(2), Symbol('a'))), cos(Mul(Float('0.5', precision=53), Symbol('b'))))
Run Code Online (Sandbox Code Playgroud)

所以基本上减号被忽略了。为什么会这样,我怎样才能让它保留减号并输出某种形式的东西Integer(-2)而不是Integer(2)

谢谢!

python sympy

0
推荐指数
1
解决办法
282
查看次数

有效地重命名字典中的键

我有一本形式为 的字典
{0: -1.0, 21: 2.23, 7: 7.1, 46: -12.0}

我怎样才能把它变成
{'p0': -1.0, 'p21': 2.23, 'p7': 7.1, 'p46': -12.0}

有效地即:

没有 for 循环之类的东西dict[key[i]] = dict.pop("p"+str(key[i]))

python dictionary

0
推荐指数
1
解决办法
135
查看次数