我是靠谱客的博主 结实柠檬,最近开发中收集的这篇文章主要介绍【树莓派】摄像头的基本使用前言一、软硬件准备二、使用步骤三.小结,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

文章目录

  • 前言
  • 一、软硬件准备
    • 1、硬件
    • 2、软件
  • 二、使用步骤
    • 1.系统使能摄像头
    • 2.拍摄照片
    • 3.拍摄视频
    • 4.实现远程拍照控制及照片获取
      • 失败记录
  • 三.小结


前言

本次实验目标是:
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服务通信的方法。

最后

以上就是结实柠檬为你收集整理的【树莓派】摄像头的基本使用前言一、软硬件准备二、使用步骤三.小结的全部内容,希望文章能够帮你解决【树莓派】摄像头的基本使用前言一、软硬件准备二、使用步骤三.小结所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(57)

评论列表共有 0 条评论

立即
投稿
返回
顶部