我有一系列想要制作视频的图像.理想情况下,我可以为每个帧指定帧持续时间,但固定的帧速率也可以.我在wxPython中这样做,所以我可以渲染到wxDC,或者我可以将图像保存到文件,如PNG.是否有Python库允许我从这些帧创建视频(AVI,MPG等)或动画GIF?
编辑:我已经尝试过PIL,它似乎不起作用.有人可以用这个结论纠正我或建议另一个工具包吗?这个链接似乎支持我关于PIL的结论:http://www.somethinkodd.com/oddthinking/2005/12/06/python-imaging-library-pil-and-animated-gifs/
我想从数据库中获取一个对象(如果它已经存在)(基于提供的参数),或者如果不存在则创建它.
Django get_or_create
(或来源)这样做.SQLAlchemy中是否有等效的快捷方式?
我目前正在明确地写出这样的:
def get_or_create_instrument(session, serial_number):
instrument = session.query(Instrument).filter_by(serial_number=serial_number).first()
if instrument:
return instrument
else:
instrument = Instrument(serial_number)
session.add(instrument)
return instrument
Run Code Online (Sandbox Code Playgroud) Apple是否接受Python应用程序在新的Mac App Store上发布?
如果是这样,应该如何打包应用程序?py2app足够吗?别的什么?
根据这个最初的想法,你们许多人可能已经看过:http: //rogeralsing.com/2008/12/07/genetic-programming-evolution-of-mona-lisa/
我想尝试采用不同的方法:
你有一个目标图像.假设您可以一次添加一个三角形.存在一些最大化图像相似性(适应度函数)的三角形(或在平局的情况下为三角形).如果你可以通过所有可能的形状和颜色蛮力,你会发现它.但这太昂贵了.搜索所有三角形是一个10维空间:x1, y1, x2, y2, x3, y3, r, g, b, a
.
我使用模拟退火效果非常好.但我想知道我是否可以进一步改进.一种想法是实际分析目标图像和当前图像之间的图像差异,并寻找可能是放置新三角形的好地方的"热点".
您将使用什么算法来找到最大化图像相似度的最佳三角形(或其他形状)?
该算法是否应该以不同方式处理粗略细节和细节?我没有让它运行足够长的时间来开始改进更精细的图像细节.在运行的时间越长,它似乎变得"害羞"...它使用低alpha值(非常透明的形状).
目标图像和再现图像(28个三角形):
编辑!我有了一个新主意.如果给出形状坐标和α值,则可以通过分析当前图像和目标图像中的像素来计算形状的最佳RGB颜色.这样就消除了搜索空间中的3个维度,并且您知道您使用的颜色始终是最佳的!我已经实现了这个,并尝试使用圆而不是三角形进行另一次运行.
300个圆圈和300个三角形:
language-agnostic algorithm graphics optimization simulated-annealing
我的数据总是看起来像这样:
alt text http://michaelfogleman.com/static/images/chart.png
我需要一个算法来定位三个峰值.
x轴实际上是摄像机位置,y轴是该位置处的图像焦点/对比度的度量.有三个不同距离的特征可以聚焦,我需要确定这三个点的x值.
中间的驼峰总是有点难以挑选出来,即使对于人来说也是如此.
我有一个主要工作的自制算法,但我想知道是否有一种标准方法可以从一个可能有一点噪音的函数中获取局部最大值.然而,峰值很容易克服噪音.
此外,作为相机数据,不需要扫描全范围的算法可能是有用的.
编辑:发布我最终使用的Python代码.它使用我的原始代码,在给定搜索阈值的情况下找到最大值,并进行二进制搜索以找到导致所需最大数量的阈值.
编辑:以下代码中包含的示例数据.新代码是O(n)而不是O(n ^ 2).
def find_n_maxima(data, count):
low = 0
high = max(data) - min(data)
for iteration in xrange(100): # max iterations
mid = low + (high - low) / 2.0
maxima = find_maxima(data, mid)
if len(maxima) == count:
return maxima
elif len(maxima) < count: # threshold too high
high = mid
else: # threshold too low
low = mid
return None # failed
def find_maxima(data, threshold):
def search(data, …
Run Code Online (Sandbox Code Playgroud) 我正在尝试在Python中使用带有多处理库的队列.执行下面的代码后(打印语句工作),但是我在队列上调用join后进程没有退出并且仍然存在.如何终止剩余的流程?
谢谢!
def MultiprocessTest(self):
print "Starting multiprocess."
print "Number of CPUs",multiprocessing.cpu_count()
num_procs = 4
def do_work(message):
print "work",message ,"completed"
def worker():
while True:
item = q.get()
do_work(item)
q.task_done()
q = multiprocessing.JoinableQueue()
for i in range(num_procs):
p = multiprocessing.Process(target=worker)
p.daemon = True
p.start()
source = ['hi','there','how','are','you','doing']
for item in source:
q.put(item)
print "q close"
q.join()
#q.close()
print "Finished everything...."
print "num active children:",multiprocessing.active_children()
Run Code Online (Sandbox Code Playgroud) 从这篇维基百科文章:
http://en.wikipedia.org/wiki/Hamiltonian_path_problem
在大多数图上快速的哈密顿路径的随机算法如下:从随机顶点开始,如果没有访问的邻居则继续.如果没有更多未访问的邻居,并且形成的路径不是哈密顿量,则随机均匀地选择邻居,并使用该邻居作为枢轴进行旋转.(即,向该邻居添加边缘,并从该邻居中移除一个现有边缘,以便不形成循环.)然后,在路径的新端继续算法.
我不太明白这个旋转过程应该如何工作.有人可以更详细地解释这个算法吗?也许我们最终可以用更清晰的描述更新Wiki文章.
编辑1:我认为我现在理解算法,但它似乎只适用于无向图.任何人都可以证实吗?
这就是为什么我认为它只适用于无向图:
alt text http://www.michaelfogleman.com/static/images/graph.png
假装顶点的编号如下:
123
456
789
Run Code Online (Sandbox Code Playgroud)
让我们说我到目前为止的道路是:9, 5, 4, 7, 8
.所有8个邻居都被访问过.假设我选择5来删除边缘.如果我删除(9,5),我最终创建一个循环:5, 4, 7, 8, 5
所以我似乎必须删除(5,4)并创建(8,5).如果图是无向的,那很好,现在我的路径是9,5,8,7,4.但是如果你想象那些边被定向,那不一定是有效路径,因为(8,5)是边但是( 5,8)可能不是.
编辑2:我想对于一个有向图我可以创建(8,5)连接,然后让新路径正好4, 7, 8, 5
,但这似乎适得其反,因为我必须砍掉以前导致顶点5的所有内容.
我知道这个问题的标题有点模糊,但在这里承担问题,每次我为游戏编写游戏或机器人时都使用状态机,决策树或行为树.这些技术的问题在于,它们要求我预先设定角色/机器人将要遇到的所有条件,以便在用户做出意想不到的事情时,我没有为他们输掉一个条件.
现在我正在寻找一个星际机器人(bwapi),使用状态机,我正在考虑为每个单元使用一个状态机,一个主要命令焊接器做什么,但它仍然需要我预先编程和游戏像星际争霸这是不可能的,我能想到的唯一可以让它学习的方法就是使用gp来改进这些状态机.
如果20名海军陆战队员试图通过大桥同时会有很大的交通拥堵,我可以使用哪种技术以便它可以从错误中吸取教训?所以我不必预先编程说明逐个通过桥的条件.
编辑:只是因为一个问题有星球或机器人的话,它不会自动使它成为非问题这个问题也适用于机器人.
我正在使用 Cython 从 USB 摄像头抓取图像并将其转换为返回给调用者的 PIL 图像。
图像的数据位于图像抓取函数返回的结构体的“convert_buffer”成员所指向的字符数组中:
struct FlyCaptureImage:
/// stuff
char * convert_buffer
/// more stuff
Run Code Online (Sandbox Code Playgroud)
现在,我正在这样做将其转换为 PIL 图像:
cdef unsigned char *convert_buffer
cdef Py_ssize_t byte_length
cdef bytes py_string
// get the number of bytes into a Py_ssize_t type
byte_length = count
// slice the char array so it looks like a Python str type
py_string = convert_buffer[:byte_length]
// create the PIL image from the python string
pil_image = PILImage.fromstring('RGB', (width, height), py_string)
Run Code Online (Sandbox Code Playgroud)
将数据转换为 Python 字符串的过程需要 2 毫秒,这听起来可能是一个零复制事件。是否可以让 …
我觉得Python应该有一个内置的功能.获取项目列表并将其转换为字典,将键映射到具有该键共同的项目列表.
这很容易做到:
# using defaultdict
lookup = collections.defaultdict(list)
for item in items:
lookup[key(item)].append(item)
# or, using plain dict
lookup = {}
for item in items:
lookup.setdefault(key(item), []).append(item)
Run Code Online (Sandbox Code Playgroud)
但这是一个常见的用例,内置函数会很好.我可以自己实现它,如下:
def grouped(iterable, key):
result = {}
for item in iterable:
result.setdefault(key(item), []).append(item)
return result
lookup = grouped(items, key)
Run Code Online (Sandbox Code Playgroud)
这与itertools.groupby
几个重要方面不同.要得到相同的结果groupby
,你必须这样做,这有点难看:
lookup = dict((k, list(v)) for k, v in groupby(sorted(items, key=key), key))
Run Code Online (Sandbox Code Playgroud)
一些例子:
>>> items = range(10)
>>> grouped(items, lambda x: x % 2)
{0: [0, 2, 4, 6, 8], …
Run Code Online (Sandbox Code Playgroud)