背景
想给家里做个监控,方便网络监控 正好树莓派的摄像头又便宜.只要几十块 于是买了个这
安装 摄像头
图就用了买的店铺图
启用摄像头
树莓派专用摄像头已经内置了驱动.
所以只需要从配置中启用就可以了
1.从命令行启动raspi-config
sudo raspi-config
2.选择Interface Options
3.选择Camera
4.启用
然后选择Finish
,重启树莓派即可
使用 命令行
对摄像头进行控制
raspistill
命令进行拍照
拍摄照片,并在当前目录保存为cam.jpg
raspistill -o cam.jpg
垂直翻转和水平翻转
将相机倒置放置后,图像必须旋转180°才能正确显示。纠正这种情况的方法是通过传入-vf和-hf标志来应用垂直和水平翻转:
raspistill -vf -hf -o cam2.jpg
设置图片尺寸
通过-h
和-w
设置拍照尺寸
raspistill -w 600 -h 800 -o cam3.jpg
使用raspivid
命令进行摄像
拍摄视频,并保存为文件vid.h264
raspivid -o vid.h264
这将将5秒视频文件保存到此处给出的路径vid.h264(默认时间长度)。
指定视频时间长度
要指定所拍摄视频的长度,请-t使用毫秒数传递该标志。 例如:
raspivid -o video.h264 -t 10000
这将保存一个10秒的视频 到video.h264
文件
水平翻转 / 垂直翻转 视频
使用-hf
和-vf
参数调整
raspivid -hf -o vid.h264
MP4视频格式
树莓派默认将图像录制为原始H264视频流。
许多媒体播放器不支持播放,或者以不正确的速度播放.
所以需要用包装格式保存比如MP4
从raspivid命令获取MP4文件的最简单方法是使用MP4Box
。
1.安装MP4Box
sudo apt-get install -y gpac
2.将视频包装成MP4格式
# 拍摄 30s的视频,画面640x480 比特率 150kB/s并保存文件名 pivideo.h264
raspivid -t 30000 -w 640 -h 480 -fps 25 -b 1200000 -p 0,0,640,480 -o pivideo.h264
# 包装视频到mp4格式
MP4Box -add pivideo.h264 pivideo.mp4
使用Python
控制树莓派摄像头
使用Python库
Picamera
注意:不能使用picamera.py
作为文件名,很重要
1.拍照
- 设置分辨率 1024 x 768
- 保存图片到当前目录: foo.jpg
- 图像旋转180度
camera.py
from picamera import PiCamera
from time import sleep
camera = PiCamera() #得到摄像头实例
camera.resolution = (1024, 768) # 设置分辨率
camera.rotation = 180 # 控制摄像头旋转180度
ccamera.capture('foo.jpg') 拍摄并保存图片到当前目录
2.拍摄视频
- 拍摄60秒
- 分辨率 640 x 480
- 保存文件名
my_video.h26
from picamera import PiCamera
from time import sleep
camera = PiCamera() #得到摄像头实例
camera.resolution = (640, 480)
camera.start_recording('my_video.h264')
camera.wait_recording(60)
camera.stop_recording()
搭建一个Web服务,收到请求后拍照并返回图像
由于不会Python,所以将就看吧
能够正常运行
server.py
源码
from http.server import BaseHTTPRequestHandler
from urllib import parse
import sys
import os
import time
import picamera
# web请求处理对象
class GetHandler(BaseHTTPRequestHandler):
# 处理所有get请求
def do_GET(self):
# 启动相机,并预热2秒,然后拍照,保存为 foo.jpg
with picamera.PiCamera() as camera:
camera.resolution = (1920, 1080)
camera.start_preview()
time.sleep(2)
camera.capture("foo.jpg")
# 获取当前目录,并且获取图片文件
full_path = os.getcwd() + "/foo.jpg"
img = open(full_path, "rb") # rb 以文件流打开文件
content = img.read() # 读取流到变量
#响应码200
self.send_response(200)
#设置返回媒体类型
self.send_header('Content-Type', 'image/jpeg')
#指定响应文件名
self.send_header('Content-Disposition', 'attachment; filename="foo.jpg"')
self.end_headers()
# 响应中写入文件流
self.wfile.write(content)
if __name__ == '__main__':
from http.server import HTTPServer
port = 80 # 监听端口
server = HTTPServer(('0.0.0.0', port), GetHandler)
print("listen on " + str(port))
print('Starting server, use <Ctrl-C> to stop')
server.serve_forever()
启动服务
sudo python server.py
listen on 80
Starting server, use <Ctrl-C> to stop
现在即可访问 http://your-raspi-IP:80
随后得到拍摄的照片文件