【树莓派】摄像头的基本使用
2023-03-20 14:57:31 时间
前言
本次实验目标是:
1、完成树莓派使用CSI摄像头拍取照片,拍摄视频
2、使用socket进行网络拍照控制和图片传输功能。
一、软硬件准备
1、硬件
树莓派4B
树莓派摄像头
2、软件
VNC-Viewer
eclipse/VS Code(Java)
将树莓派断电,并将CSI摄像头接入靠近网孔的排孔中,CSI摄像头蓝色面朝网孔方向。
二、使用步骤
1.系统使能摄像头
终端执行指令
sudo raspi-config
使能摄像头保存退出后会重启,如果没有重启可自行重启
sudo rebuild
2.拍摄照片
拍摄照片
raspistill -o new.jpg
查看:
其中xdg-open 为使用系统默认应用打开
xdg-open new.jpg
3.拍摄视频
录制视频:
raspivid -o vv.h264 -t 10000s
4.实现远程拍照控制及照片获取
简单网络获取实时照片实现,建立socket通信,树莓派用python写socket服务器,线程监听端口,Windows用java写socket客户端。客户端连接服务器后发送相关指令调用树莓派拍照程序进行拍照,然后把照片数据用byte格式传递给客户端,客户端进行有效接收,并显示。
树莓派端python代码实现
import os
import socketsever
class Sok(socketsever .BaseRequestHandler):
def handle(self):
while Ture:
try:
self.datax=self.request.recv(1024).decode("gbk")
if(self.datax==""):break
print(self.client_address,"-------",self.datax)
if self.datax=="1":
self.request.send("#准备开始拍照...".encode("gbk"))
os.system("raspistill -o new.jpg")
os.system("xdg-open new,jpg")
self.request.send("#拍照完成,正在传输...".encode("gbk"))
f=open("new.jpg","rb")
f_size=os.stat("new,jpg").st_size #获取文件大小
self.request.send(("#size:"+str(f_size)).encode("gbk"))
self.request.recv(100) #空操作,等待数据确认
for lin in f:
self.request.send(lin)
if self.datax=="0":
self.request.send("#通信成功***".encode("gbk"))
except Exception as e:
print("!!!!!!exception!!!!!!!", e)
break
sock=socketsever.ThreadingTCPSever(("0.0.0.0",2351),Sok)
sock.sever_forever()
window端Java代码实现
import os
import socketsever
class Sok(socketsever .BaseRequestHandler):
def handle(self):
while Ture:
try:
self.datax=self.request.recv(1024).decode("gbk")
if(self.datax==""):break
print(self.client_address,"-------",self.datax)
if self.datax=="1":
self.request.send("#准备开始拍照...".encode("gbk"))
os.system("raspistill -o new.jpg")
os.system("xdg-open new,jpg")
self.request.send("#拍照完成,正在传输...".encode("gbk"))
f=open("new.jpg","rb")
f_size=os.stat("new,jpg").st_size #获取文件大小
self.request.send(("#size:"+str(f_size)).encode("gbk"))
self.request.recv(100) #空操作,等待数据确认
for lin in f:
self.request.send(lin)
if self.datax=="0":
self.request.send("#通信成功***".encode("gbk"))
except Exception as e:
print("!!!!!!exception!!!!!!!", e)
break
sock=socketsever.ThreadingTCPSever(("0.0.0.0",2351),Sok)
sock.sever_forever()
失败记录
Ps:远程拍照没有实现,python代码提示错误,库函数缺失,加上电脑卸载了java环境,就没有做后续的远程控制了
三.小结
通过本次使用,学习了树莓派调用摄像头的方法,可惜的是后面远程控制拍摄没有实现,了解了socket服务通信的方法。
相关文章
- 超好用!5款完全免费、支持全平台的笔记软件
- 不能只会敲代码:开发人员必备的7种基本非技术技能
- 谷歌TPU训练BERT只要23秒,华为AI芯片超英伟达V100
- 读写成功率达99.999%,提升ElasticSearch系统稳定性的秘密
- 如何大大提升微服务的高可用性?
- 高效编程的11条规则
- Github标星24.1K!一个命令行就可以把网站变成电脑App
- OpenJDK 项目从 Mercurial 迁移到 GitHub
- 套娃成功!在《我的世界》里运行Win95、玩游戏,教程现已公开
- 解决不了bug先放着,这里有40条提升编程技能小妙招
- 优步:面向“域”的微服务架构,满足2200个关键微服务的扩展
- TikTok正从谷歌和Facebook等美国科技巨头"抢"人才
- Github 将你的代码打包送到了北极封存千年,网友:这下糗大了,还有 bug 呢!!
- 只有完美代码不够的,如何做一个完美的Pull Request?
- 揭秘什么是面向接口编程
- 你只修改了2行代码,为什么需要两天时间?
- 适用于软件工程师编码面试的十大算法
- Kubernetes和大数据:入门介绍
- 编程小白用了3年在 Github 斩获 90k Star! 聊聊学习编程的姿势
- 2行代码,让接口性能提升10倍