百度360必应搜狗淘宝本站头条
当前位置:网站首页 > 技术资源 > 正文

树莓派监控摄像头python+picamera或openCV

off999 2024-11-25 15:52 18 浏览 0 评论

1、在raspi-config中使能摄像头


打开树莓派终端,输入sudo raspi-config

完成后重启树莓派

2、检查摄像头运行情况

vcgencmd get_camera

raspistill命令行测试拍照

raspistill -v -o test.jpg

执行后如下图操作:


3、上面都是设置开启摄像头及测试,我们接下来要使用python调用摄像头,完成拍照和直播流的功能。


树莓派4B安装opencv:

sudo apt-get install -y libopencv-dev python3-opencv

网络不好的,下载会中断,多执行以上命令几次就好了,段点续传。

安装完成后

输入命令:

python3

import cv2

看到以下无错误显示即可

4、使用opencv调用树莓派拍照

(1)、 打开usb摄像头读取一张照片

import cv2

import matplotlib.pyplot as plt

#opencv调用csi摄像头优先0,然后usb按顺序排列下去

capture = cv2.VideoCapture(0)

# 获取一帧

ret, frame = capture.read()

plt.imshow(frame[:,:,::-1])#BGRtoRGB

plt.show()

# 释放资源

capture.release()


5、Csi排线的可以直接用树莓派官方系统自带的picamera库

(1)、捕捉一个图像输出至文件

使用capture方法可以轻松将捕捉到的图像输出至指定文件。 下面这个实例是捕捉一个分辨率为1024*768的图像,并将之输出到foo.jpg中


import time

import picamera

with picamera.PiCamera() as camera:

camera.resolution = (1024, 768)

camera.start_preview()

#摄像头预热2秒

time.sleep(2)

#camera.capture('foo.jpg', resize=(320, 240))#可改变分辨率

camera.capture('foo.jpg')

(2)、如果你不想使用有损JPEG编码,并希望加快这一解码过程的话,可以使用picamera自带的picamera.array模块。可以使用PiRGBArray类简单的捕获'brg'格式的数据。(假定RGB与BGR是分辨率相同的数据,只是具有相反的颜色)

import time

import picamera

import picamera.array

import cv2


with picamera.PiCamera() as camera:

camera.start_preview()

time.sleep(2)

with picamera.array.PiRGBArray(camera) as stream:

camera.capture(stream, format='rgb')#format类型:bgr\rgb\h264

# 此时就可以获取到bgr的数据流了

image = stream.array

import matplotlib.pyplot as plt


image_resize = cv2.resize(image,(320, 240)) #opencv改变分辨率

plt.imshow(image_resize)


6、使用python做一个简单的远程监控摄像头

使用opencv 和python自带的http库就能完成(为什么不用picamera?因为通用呀,不一定树莓派,只要装了opencv的硬件,这代码就可以运行),使用浏览器,输入树莓派地址:8080直接显示,上代码:

import cv2

from http import server

import time

#做一个响应主页面html

PAGE="""\

<html>

<head>

<title>Video Streaming Demonstration</title>

</head>

<body>

<h1>Video Streaming Demonstration</h1>

<img src="/video_feed">

</body>

</html>


"""


# 通过opencv获取实时视频流

video = cv2.VideoCapture(0)

def get_frame(v):

success, image = v.read()

# 因为opencv读取的图片并非jpeg格式,因此要用motion JPEG模式需要先将图片转码成jpg格式图片

ret, jpeg = cv2.imencode('.jpg', image)

return jpeg.tobytes()

def gen(camera):

while True:

frame = get_frame(camera)

# 使用generator函数输出视频流, 每次请求输出的content类型是image/jpeg

yield (b'--frame\r\n'

b'Content-Type: image/jpeg\r\n\r\n' + frame + b'\r\n\r\n')


class HTTPHandler(server.BaseHTTPRequestHandler):

def do_GET(self):#get数据处理

if self.path == '/': #跳转至默认页面

self.send_response(301)

self.send_header('Location', '/index.html')

self.end_headers()

elif self.path == '/index.html':

content = PAGE.encode('utf-8')

self.send_response(200)

self.send_header('Content-Type', 'text/html')

self.send_header('Content-Length', len(content))

self.end_headers()

self.wfile.write(content)

elif self.path == '/video_feed':

self.send_response(200)

self.send_header('Content-Type','multipart/x-mixed-replace; boundary=frame')

self.end_headers()

while True:

self.wfile.write(next(cam)) #必须用next()才能运行生成器

self.wfile.write(b'\r\n')

else:

self.send_error(404)

self.end_headers()

cam = gen(video)#生成器

try:

print("http server start...")

address = ('', 8080)

server = server.HTTPServer(address, HTTPHandler)

server.serve_forever()

finally:

print('done')

相关推荐

推荐一款Python的GUI可视化工具(python 可视化工具)

在Python基础语法学习完成后,进一步开发应用界面时,就需要涉及到GUI了,GUI全称是图形用户界面(GraphicalUserInterface,又称图形用户接口),采用图形方式显示的计算机操...

教你用Python绘制谷歌浏览器的3种图标

前两天在浏览matplotlib官方网站时,笔者无意中看到一个挺有意思的图片,就是用matplotlib制作的火狐浏览器的logo,也就是下面这个东东(网页地址是https://matplotlib....

小白学Python笔记:第二章 Python安装

Windows操作系统的python安装:Python提供Windows、Linux/UNIX、macOS及其他操作系统的安装包版本,结合自己的使用情况,此处仅记录windows操作系统的python...

Python程序开发之简单小程序实例(9)利用Canvas绘制图形和文字

Python程序开发之简单小程序实例(9)利用Canvas绘制图形和文字一、项目功能利用Tkinter组件中的Canvas绘制图形和文字。二、项目分析要在窗体中绘制图形和文字,需先导入Tkinter组...

一文吃透Python虚拟环境(python虚拟环境安装和配置)

摘要在Python开发中,虚拟环境是一种重要的工具,用于隔离不同项目的依赖关系和环境配置。本文将基于windows平台介绍四种常用的Python虚拟环境创建工具:venv、virtualenv、pip...

小白也可以玩的Python爬虫库,收藏一下

最近,微软开源了一个项目叫「playwright-python」,作为一个兴起项目,出现后受到了大家热烈的欢迎,那它到底是什么样的存在呢?今天为你介绍一下这个传说中的小白神器。Playwright是...

python环境安装+配置教程(python安装后怎么配置环境变量)

安装python双击以下软件:弹出一下窗口需选择一些特定的选项默认选项不需要更改,点击next勾选以上选项,点击install进度条安装完毕即可。到以下界面,证明安装成功。接下来安装库文件返回电脑桌面...

colorama,一个超好用的 Python 库!

大家好,今天为大家分享一个超好用的Python库-colorama。Github地址:https://github.com/tartley/coloramaPythoncolorama库是一...

python制作仪表盘图(python绘制仪表盘)

今天教大家用pyecharts画仪表盘仪表盘(Gauge)是一种拟物化的图表,刻度表示度量,指针表示维度,指针角度表示数值。仪表盘图表就像汽车的速度表一样,有一个圆形的表盘及相应的刻度,有一个指针...

总结90条写Python程序的建议(python写作)

  1.首先  建议1、理解Pythonic概念—-详见Python中的《Python之禅》  建议2、编写Pythonic代码  (1)避免不规范代码,比如只用大小写区分变量、使用容易...

[oeasy]python0137_相加运算_python之禅_import_this_显式转化

变量类型相加运算回忆上次内容上次讲了是从键盘输入变量input函数可以有提示字符串需要有具体的变量接收输入的字符串输入单个变量没有问题但是输入两个变量之后一相加就非常离谱添加图片注释,不超过1...

Python入门学习记录之一:变量(python中变量的规则)

写这个,主要是对自己学习python知识的一个总结,也是加深自己的印象。变量(英文:variable),也叫标识符。在python中,变量的命名规则有以下三点:>变量名只能包含字母、数字和下划线...

掌握Python的&quot;魔法&quot;:特殊方法与属性完全指南

在Python的世界里,以双下划线开头和结尾的"魔法成员"(如__init__、__str__)是面向对象编程的核心。它们赋予开发者定制类行为的超能力,让自定义对象像内置类型一样优雅工...

11个Python技巧 不Pythonic 实用大于纯粹

虽然Python有一套强大的设计哲学(体现在“Python之禅”中),但总有一些情况需要我们“打破规则”来解决特定问题。这触及了Python哲学中一个非常核心的理念:“实用主义胜于纯粹主义”...

Python 从入门到精通 第三课 诗意的Python之禅

导言:Python之禅,英文名是TheZenOfPython。最早由TimPeters在Python邮件列表中发表,它包含了影响Python编程语言设计的20条软件编写原则。它作为复活节彩蛋...

取消回复欢迎 发表评论: