Qiita Teams that are logged in
You are not logged in to any team

Log in to Qiita Team
Community
OrganizationEventAdvent CalendarQiitadon (β)
Service
Qiita JobsQiita ZineQiita Blog
7
Help us understand the problem. What are the problem?

More than 1 year has passed since last update.

Raspberry Piで定点カメラを作っていて、画像ファイルは保存しないでWebサーバーにアップロードしたい!と思ったら意外と簡単にできたというお話

はじめに

Raspberry Piを何個も使って色々と試しているなかで、定点カメラを作った時に撮影した画像を一時的にでもSDカードやRAMディスクなどに書き込まないでサーバーに送信できないだろうかと考えたら意外と簡単にできたので、まとめてみます。

用意するもの

  • Raspberry Pi
  • USBカメラ
  • Webサーバー

環境構築

Raspberry PiへのOSインストールは複数の記事があるのでそちらにお任せするとして、OSインストール直後の作業は以下のとおり。

sudo apt update
sudo timedatectl set-timezone Asia/Tokyo
sudo apt install -y python-opencv python-requests

送信スクリプト作成

以下の手順で送信スクリプトを作成

nano fileupload.py
fileupload.py
#!/usr/bin/env python

import cv2
import time
import requests
from datetime import datetime

cap = cv2.VideoCapture(0)

cap.set(3,1280)
cap.set(4, 720)

ret, frame = cap.read()

url = "http://[your server address]/getfile.rb"

files = {'imgData': cv2.imencode('.jpg', frame)[1].tobytes()}
res = requests.post(url, files=files)
print(res.text)

cap.release()

作成したら実行権限をファイルに付与

chmod a+x fileupload.py

受信スクリプト作成

受信するサーバーにはApacheとRubyがインストールしてあって、HTTPでアクセスができるようになっているものとして、以下の送信スクリプトを作成

getfile.rb
#!/usr/bin/env ruby

require "cgi"
require 'date'

formData = CGI.new

print "Content-type: text/html\n\n"

filename = Time.now.strftime("%Y%m%d%H%M")

open("#{filename}.jpg","wb") do |fh|
  fh.binmode
  fh.write formData['imgData'].read
end

puts "OK"

動作確認

送信・受信のスクリプトを設置したら、Raspberry Piで以下のように実行して「OK」と表示されればアップロード成功

./fileupload.py

自動撮影

10分間隔で自動的にアップロードするよう設定します。

crontab -e

以下の一行を追加

*/10 * * * * /home/pi/fileupload.py

できた!

Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
7
Help us understand the problem. What are the problem?