我目前正在开发一个Django项目,希望通过网络对视频文件进行一些转换。为了转换到视频,我正在使用opencv的python API,我也在使用Dajax来执行ajax请求。
在ajax请求文件中,我有以下代码:
@dajaxice_register
def transform_and_show(request, filename, folder, frame_count, img_number):
detector = Detector(filename) //Object which uses opencv API
dajax = Dajax()
generated_file = detector.detect_people_by_frame(folder, str(img_number))
dajax.assign('#video', 'src', '/media/generated'+folder+generated_file)
return dajax.json()
这个想法是逐帧转换视频并在浏览器中以img标签显示每个变换后的帧,让用户感觉他/她正在观看变换后的视频,因此这个方法在javascript循环中调用
问题在于,在这种方法中,对象“检测器”在每次迭代中重新初始化,因此它仅生成对应于视频的第一帧的图像。我的想法是通过在请求之间使“检测器”持久化来解决这个问题,以便在每个请求中指向视频的下一帧的指针不会被设置为0。 问题是Dectector对象不可选,这意味着它不能被缓存或保存到会话对象。
我能做些什么来让它在请求之间保持一致吗?
注意:我考虑过使用像APE或Orbit这样的HTTP推送方法,但由于这只是一个调查项目,因此没有真正关注性能。
答案 0 :(得分:0)
您是否尝试过模块级变量来存储对象?
在文件级别使“探测器”成为全局。
detector = None
def transform():
global detector
if detector is None:
detector = Detector(filename)
file = detector.detect(....)