0
3

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

WEBカメラ取り込み Ver 2

Last updated at Posted at 2020-09-03

Raspberry Piを使用した撮影をする上で
まず通る所が、キーボード操作による撮影が多いと思います。
しかしながら、大量の画像を取るとなると
高〇名人ばりの連射が必要なので一般人には到底無理。
なので自動で撮影して楽が出来ないかと思い作成。

今回は部下(生贄1号)が出来たので一緒に作成しました

##環境
Raspberry Pi 3 Model B+
os Raspbian(Bastar)
Python 3.7.3
opencv 4.1.0.25
使用カメラ ELECOM UCAM-C750FBBK

##ライブラリ

cap_save.py
import cv2
import os
import sys
import datetime  
import RPi.GPIO as GPIO
from time import sleep
import time

今回はGPIOを使用するので
撮影基本セットに追加したのと
タイマー使うので+しています。

##基本設定

cap_save.py
GPIO.setmode(GPIO.BCM)
GPIO.setup(22, GPIO.OUT)
GPIO.setup(24, GPIO.IN, pull_up_down=GPIO.PUD_DOWN)
GPIO.setup(25, GPIO.OUT)

今回はブレッドボードにタクトスイッチをつけて
撮影開始・終了の使い方をするのでそれが出来る様な設定にしています。

##撮影プログラム

cap_save.py
def save_frame_camera_cycle(device_num, dir_path, basename, cycle, ext='jpg', delay=1, window_name='frame'):
    cap = cv2.VideoCapture(0)

    if not cap.isOpened():
        return

    os.makedirs(dir_path, exist_ok=True)
    base_path = os.path.join(dir_path, basename)
    
  n = 0
    while True:
        ret, frame = cap.read()
        cv2.imshow(window_name, frame)
        
        if GPIO.input(24) == GPIO.HIGH:
            GPIO.output(25, GPIO.HIGH)
            
            while True:   
                
                ret,frame = cap.read()
                cv2.imshow(window_name, frame)
                key = cv2.waitKey(1) & 0xFF
                if n == cycle:
                    n = 0
                    GPIO.output(25, GPIO.HIGH)
                    cv2.imwrite('{}_{}.{}'.format(base_path, datetime.datetime.now().strftime('%F %T'), ext), frame)
                    print("shoot")
                n += 1
    
                if GPIO.input(22) == GPIO.HIGH:
                    GPIO.output(25, GPIO.LOW)
                    print ("stop")
                    time.sleep(1)
                    break                
        else:
            GPIO.output(25, GPIO.LOW)
            
        if GPIO.input(22) == GPIO.HIGH:
            GPIO.output(25, GPIO.LOW)
            print ("end")
            break
        
    cv2.destroyWindow(window_name)
    GPIO.cleanup()

save_frame_camera_cycle(0,'/home/pi/Desktop/GPIO/test/photo', 'test', 20) 

タクトスイッチ(24)を押すと1秒ごとに撮影します。
タクトスイッチ(22)を押すと撮影停止。
停止状態でタクトスイッチ(24)を押すと撮影再開。
停止状態でタクトスイッチ(22)を押すと撮影終了。
撮影中はLED(25)が点灯。

色々と調べながら作成したので細かな部分までは理解していませんが
撮影出来ているのでOKとしています。

##実配線
ブレッドボードへの配線は様々な資料を元に配線してこんな感じ。

2020-09-03 (1).png

##まとめ
4時間ほど動作させましたが、止まることなく動きました。
ただ、枚数指定で自動停止とまではいかなかったので
現在作成中です。

色々とWEB上を巡回して知らべていますがなかなかどうしてうまくいかない今日この頃

以上です。

0
3
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
3

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?