2014-03-24 2 views
0

웹캠을 잡고 60 초마다 실행되는 셀러리 작업을 수행하고 서버에서 파일을 가져 와서 서버에 저장할 수 있도록 파일에 쓸 수 있습니다. 나중에 웹 페이지에 게재하십시오. 이미지 촬영은 python에서 cv2 라이브러리를 통해 opencv를 사용합니다.셀 비트 작업 중지가 몇 비트 (opencv) 이후에 실패합니다.

@app.task        # a task to get and save a webcam image 
    def getWebCamImage()      
    logger.debug("capturing image attempt") 
    c = cv2.VideoCapture(0)     #returns a videocapture object 
    flag, frame = c.read()     #grabs and decodes the next frame 
    cv2.imwrite('file/loc/img.jpg, frame) #writes the frame to a file 
    logger.debug('saved image...hopefully') 
    c.release()        #releases the videocapture object 
    return 0 

모든 것이 처음 몇 분 동안 좋은 간다, 그러나 그것은 웹캠 속성을 얻을 수 없다는 대한 일반적인 오류를 뱉어 그냥 중지 :

그것은 다음과 같습니다. 그리고 그것은 결코 다시 시작하지 않는다!

...DEBUG/BEAT] celerytest.getwebcamimage[process]:capturing image attempt 
    VIDOC_QUERYMENU:Invalid argument 
    VIDOC_QUERYMENU:Invalid argument 
    VIDOC_QUERYMENU:Invalid argument 

이것은 작동 할 때의 모습과 동일하게 유지됩니다. 어떤 아이디어가 그걸 막을 수 있니? 필자는 팔 코어에 240Mb를, 그래픽에 16MB를 사용하여 rasperry pi에서 실행하고 있습니다.

상황이 내가 그것을 해결하기 위해 시도했던 :

$sudo sysctl vm.overvommit_memory=1 

는 그래서 던져 MEM을 doesent. 할당 오류 $ sudo rmmod ucvideo $ sudo modprobe ucvideo nodrop = 1 timeout = 5000 quirks = 0x80 그래서 드라이버는 캠에 더 참을성이 있습니다. 나는 약간의 카메라를 시험해 보았다. 그래서 그것은 문제가되지 않을 것이다.

의견이나 제안이 있으시면 언제든지 도와주십시오. 이것은 까다로운 것입니다 : 왜냐하면 그것은 파이이고, 파이/셀러리 크로스입니다. guvcview로 스크립트를 실행 해보려고 합니다만, py/opencv 옵션이 설치가 더 쉽기 때문에 더 깨끗해졌습니다. 그리고 이것이 작동하지 않는 이유를 알고 싶습니다.

뉴스 :

dmesg 명령이 메모리 부족 때문에 셀러리 프로세스가 살해되고 있음을 알 수있다. 이 문제를 해결할 방법이 있습니까? 어떻게하면, 작업에서 생성 된 객체가 어떻게 파괴됩니까?

답변

0

이것은 셀러리와 관련이 없으며 cv와 관련이 있습니다.

CV2.videocapture 개체가 릴리스 될 때마다 삭제되지 않았으므로 메모리가 여전히 예약되어 있습니다. 아주 작은 기억을 가지고있는 파이에서, 이것은 빠르게 모든 기억을 차지하고 죽었다. 나는 리눅스에서 top 명령으로 메모리 사용을 조사했다.

큰 컴퓨터에서 발생하지만 pi에서 증상이 더 심합니다.

관련 문제