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