2011-11-18 3 views
3

현재 장고 프로젝트에서 웹을 통해 비디오 파일을 변환하는 작업을하고 있습니다. 동영상으로 변환하려면 opencv의 Python API를 사용하고 있으며 Ajax 요청을 수행하는 Dajax도 사용하고 있습니다. 아약스 요청에 Django는 요청간에 unpicklable 객체를 공유합니다.

내가 다음 코드가 파일 :

@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() 

아이디어는 프레임으로 비디오 프레임을 tranform하고 사용자에게 느낌을주는 img 태그에서 브라우저의 각 변형 프레임을 표시하는 것입니다 그/그녀는 변환 된 비디오를보고 있으므로이 메서드는 자바 스크립트 루프에서 호출됩니다.

문제는이 접근법에서 객체 "감지기"가 모든 반복에서 다시 초기화되므로 비디오의 첫 번째 프레임에 해당하는 이미지 만 생성한다는 점입니다. 내 생각은 모든 요청에 ​​대해 비디오의 다음 프레임에 대한 포인터가 0으로 설정되지 않도록 요청간에 "탐지기"를 지속시킴으로써이 문제를 해결하는 것이 었습니다. 문제는 Dectector 객체가 picklable이 아니므로 캐시되거나 세션 객체에 저장 될 수 없음을 의미합니다.

요청간에 영구적으로 적용 할 수있는 방법이 있습니까?

참고 : APE 또는 궤도와 같은 HTTP 푸시 방식을 사용하는 것으로 생각했지만 이는 조사 프로젝트 일 뿐이므로 성능에 대한 실질적인 우려는 없습니다.

+0

누구든지 당신에게 답변 했습니까? – sureshvv

+0

아니요, 첫 번째가 –

답변

0

개체를 저장하기 위해 모듈 수준의 변수를 사용해 보셨습니까?

파일 수준에서 "감지기"를 전역으로 만듭니다.

detector = None 

def transform(): 
    global detector 
    if detector is None: 
     detector = Detector(filename) 
    file = detector.detect(....) 
+0

아니요, 그게 무슨 일입니까 ?? –

+0

"djax"를 파일 수준에서 전역으로 만듭니다. – sureshvv

관련 문제