2

Python と OpenCV を使用して、Raspberry Pi で実行されるフォト ブースの作成に取り組んでいます。ここで、Web カメラから画像をキャプチャする方法の優れたコード例を見つけました。http://joseph-soares.com/programacao/python/python-opencv-salvar-imagem-da-camera-no-disco/

単独で提供されるコードは、Pi と Windows PC の両方で完璧に動作します。これにコードを追加し始めると、問題が発生します。Pi で Web カメラが見ているものを確認できなくなり、Windows ではヒットまたはミスします。ただし、どちらも写真をキャプチャしています。Windows では、実際にフレームに取り込まれた画像が表示されます。元のコードに戻すと、問題なく動作します。

私は基本的にループを使用して写真が撮られる前にカウントダウンを行い、追加される数字出力を表すために Arduino のライトを点滅させています。もともと Pi のメモリの問題だと思っていましたが、動作しませんでした。私のデスクトップでは、私は別のことを考えさせられます。どんな助けでも大歓迎です。

import time, cv 
from datetime import datetime 
import pyfirmata 
import serial 

#board = pyfirmata.Arduino('/dev/ttyACM0') 
board = pyfirmata.Arduino('COM7') 
#arduino.open() 

# start an iterator thread so 
# serial buffer doesn't overflow 
iter8 = pyfirmata.util.Iterator(board) 
iter8.start() 

greenLED = board.get_pin('d:13:o') 

debug = 1 

def captureImage(): 
     snapped = cv.QueryFrame(capture) 
     cv.SaveImage(datetime.now().strftime('%Y%m%d_%Hh%Mm%Ss%f') + '.jpg', snapped) 

if __name__ == '__main__': 
     capture = cv.CaptureFromCAM(0) 
     cv.NamedWindow('Webcam') 
     try: 
          while True: 
               for n in range(0, 4): 
                    frame = cv.QueryFrame(capture) 
                    cv.ShowImage('Webcam', frame) 

                    cv.WaitKey(10) 

                    if debug: print "count down" 
                    for i in range (0, 5): 
                         print i 
                         greenLED.write(1) 
                         time.sleep(1) 
                         greenLED.write(0) 
                         time.sleep(0.2) 
                         i+=1 

                    greenLED.write(1) 
                    time.sleep(0.2) 
                    print "Say Cheese" 
                    captureImage() 
                    greenLED.write(0) 
                    if debug: print "Waiting for 5 seconds" 
                    time.sleep(5) 
                    n+=1 

               break 

          capture = None   
          cv.DestroyAllWindows() 
          board.exit() 

     except KeyboardInterrupt: 
          cv.DestroyAllWindows() 
          board.exit()
4

0 に答える 0