树莓派摄像头基本操作

本章完成树莓派使用CSI摄像头拍取照片,拍摄视频及使用socket进行网络拍照控制和图片传输功能。

 

安装摄像头

将树莓派断电,并将CSI摄像头接入靠近网孔的排孔中,CSI摄像头蓝色面朝网孔方向。

 

系统使能摄像头

执行命令:

sudo raspi-config

 

  

 

拍摄一张照片并查看

拍摄:

raspistill -o new.jpg

查看:

其中xdg-open 为使用系统默认应用打开

xdg-open new.jpg

 

视频的录制

录制视频:

raspivid -o vv.h264 -t 10000s

播放可用windows的爱奇艺万能播放器

 

实现远程拍照控制及照片获取

      简单网络获取实时照片实现,建立socket通信,树莓派用python写socket服务器,线程监听端口,Windows用java写socket客户端。客户端连接服务器后发送相关指令调用树莓派拍照程序进行拍照,然后把照片数据用byte格式传递给客户端,客户端进行有效接收,并显示。

   其中启动按钮为启动socket客户端,测试按钮为测试连接状态,获取按钮为调用拍照指令,程序整体实现较简单,java客户端没有使用线程,所以会有卡顿现象。后续进会进一步调优。

效果展示:

 Python代码实现:

 

Java代码实现:

  1 import java.awt.Graphics;
  2  java.awt.Image;
  3  java.awt.Toolkit;
  4  java.awt.event.ActionEvent;
  5  java.awt.event.ActionListener;
  6  java.awt.event.WindowAdapter;
  7  java.awt.event.WindowEvent;
  8  java.io.DataInputStream;
  9  java.io.FileNotFoundException;
 10  java.io.FileOutputStream;
 11  java.io.IOException;
 12  java.io.InputStream;
 13  java.io.OutputStream;
 14  java.io.UnsupportedEncodingException;
 15  java.net.Socket;
 16  java.net.UnknownHostException;
 17  javax.swing.ImageIcon;
 18  javax.swing.JButton;
 19  javax.swing.JFrame;
 20  javax.swing.JLabel;
 21  javax.swing.JPanel;
 22 
 23 
 24 class Main2 extends JFrame{
 25     JLabel jlde;
 26     private Image image; //获取的图像
 27     private Toolkit toolKit; Toolkit对象,用于获取图像
 28     private Socket sock;
 29      InputStream reader;
 30      OutputStream writer;
 31     private boolean booxie;
 32      DataInputStream dis;
 33     JLabel zt;
 34     int sizex=0;
 35     public Main2(){构造函数
 36     super("图片获取实现");标题显示内容
 37     this.setSize(600,400);页面大小
 38     this.setResizable(false);不可缩放
 39     this.setLocationRelativeTo(null);全屏居中居中显示
 40     jlde=new JLabel();
 41     jlde.setBounds(0,this.getWidth(),1)">this.getWidth());
 42     .add(jlde);
 43     JButton qd=new JButton("启动");
 44     JButton cs=new JButton("测试" 45     JButton hq=new JButton("获取" 46     JPanel jp= JPanel();
 47     zt =  48     jp.add(qd);
 49     jp.add(cs);
 50     jp.add(hq);
 51     jp.add(zt);
 52     Imgben("lala.png");初始图片显示
 53     this.setIconImage(new ImageIcon("lala.png").getImage());图标图片文件
 54     this.add(jp,"South" 55     this.setVisible(true);显示界面
 56     qd.addActionListener(new ActionListener(){-------------------启动按钮监听,开启socket
 57         @Override
 58         public void actionPerformed(ActionEvent e) {
 59             zt.setText("正在启动......." 60             try {
 61                 
 62                 
 63                 sock=new Socket("192.168.43.243",2351 64                 writer=sock.getOutputStream();获取输出流
 65                 reader=sock.getInputStream();获取输入流
 66                 dis = new DataInputStream(sock.getInputStream());包装输入流, 允许应用程序以与机器无关方式从底层输入流中读取基本 Java 数据类型。
 67                 writer.write(("0").getBytes("GBK"));发送确认信息
 68                 reads();读数据
 69                 
 70                 
 71             } catch (UnknownHostException e1) {
 72                 e1.printStackTrace();
 73             }  (IOException e1) {
 74  75             }}});
 76     cs.addActionListener(------------------------测试是否连接成功
 77 
 78  79          80              81                 
 82                 writer.write(("0").getBytes("GBK"));
 83                 reads();
 84                 
 85             }  (UnsupportedEncodingException e1) {
 86  87             }  88  89  90     hq.addActionListener(-------------------获取图片按钮,点击可显示实时图片
 91  92          93              94                 zt.setText("开始获取......" 95                 writer.write(("1").getBytes("GBK"));发送获取图片指令
 96  97  98                 writer.write(("3").getBytes("GBK"));发送空的确认获取指令
 99                 String str= reads();
100                 sizex=Integer.parseInt(str.substring(str.indexOf("e")+2));得到图片大小
101                 reads();读取图片数据
102                 zt.setText("  成功获取 *-*  "103                 Imgben("new.jpg");显示获取的图片
104                 
105             } 106 107             } 108 109 110      this.addWindowListener(new WindowAdapter() {点击叉监听,完全退出程序
111           windowClosing(WindowEvent arg0) {
112              System.exit(0113          }
114          });}
115     public String reads() throws FileNotFoundException{
116         String strread=""117         FileOutputStream fos=null118            if(sizex>0){【 开始接收文件 】 
119                fos = new FileOutputStream("new.jpg");  
120                byte[] bytes = new byte[1024];  
121                int length = 0;  
122                int bensizej=0123                124                 while(( length = dis.read(bytes,bytes.length)) != -1) {
125                     bensizej+=length;
126                        127                         fos.write(bytes,length);以追加的方式写数据
128                         fos.flush();
129                         if(sizex<=bensizej) break;获取完成
130                         }  (IOException e) {
131                         e.printStackTrace();
132                     }  }} 133                 e.printStackTrace();}   
134                sizex=0135                bensizej=0;  清零计数
136            }else{ 【 开始接收普通数据 】 
137         byte[] bu=];
138         139             reader.read(bu);
140              strread=(new String(bu,"GBK")).trim();
141              System.out.println(strread);
142              zt.setText(strread);
143           }  (Exception e) {
144               e.printStackTrace();
145           }}
146           return strread;返回读取的普通数据
147           }
148     
149 加载本地图片
150  Imgben(String imagePath){
151           toolKit = Toolkit.getDefaultToolkit();
152           repaint(); 重绘屏幕
153           image= toolKit.getImage(imagePath);
154  }
155  paint(Graphics g){
156         super.paint(g);
157         if (image!=){
158           image.getScaledInstance(500,500,Image.SCALE_DEFAULT);
159           ImageIcon ico= ImageIcon(image);
160           ico.setImage(ico.getImage().getScaledInstance(600,370161           jlde.setIcon(ico);
162         }}}
163 
164 class Main {
165     static  main(String[] args) {
166          Main2();
167     }
168 
169 }

 

 

相关文章

文章浏览阅读1.8k次,点赞63次,收藏54次。Linux下的目录权限...
文章浏览阅读1.6k次,点赞44次,收藏38次。关于Qt的安装、Wi...
本文介绍了使用shell脚本编写一个 Hello
文章浏览阅读1.5k次,点赞37次,收藏43次。【Linux】初识Lin...
文章浏览阅读3k次,点赞34次,收藏156次。Linux超详细笔记,...
文章浏览阅读6.8k次,点赞109次,收藏114次。【Linux】 Open...