1. 程式人生 > >樹莓派攝像頭基本操作

樹莓派攝像頭基本操作

本樹莓派攝像頭實現完成裡樹莓派CSI攝像頭拍取照片,拍攝視訊及簡單的網路圖片圖片傳輸功能。

 

第一步:

將樹莓派斷電,並將CSI攝像頭接入靠近網孔的排孔中,CSI攝像頭藍色面朝網孔方向。

 

 

第二步:

使能攝像頭,命令sudo raspi-config

 

 

  

 

 

第三步:

拍攝一張照片並檢視

拍攝:raspistill -o new.jpg

檢視:xdg-open new.jpg   # xdg-open 為系統預設應用開啟

 

第四步:

錄製視訊:raspivid -o vv.h264 -t 10000s

播放可用windows的愛奇藝萬能播放器

 

第五步:

簡單網路獲取實時照片實現,建立socket通訊,樹莓派用python寫socket伺服器,執行緒監聽埠,Windows用java寫socket客戶端。客戶端連線伺服器後傳送相關指令呼叫樹莓派拍照程式進行拍照,然後把照片資料用byte格式傳遞給客戶端,客戶端進行有效接收,並顯示。

其中啟動按鈕為啟動socket客戶端,測試按鈕為測試連線狀態,獲取按鈕為呼叫拍照指令,程式整體實現較簡單,java沒有使用執行緒,所以會有卡頓現象。

 

 

附件:

# Python程式碼:

 

 

//Java程式碼:

import java.awt.Graphics;

import java.awt.Image;

import java.awt.Toolkit;

import java.awt.event.ActionEvent;

import java.awt.event.ActionListener;

import java.awt.event.WindowAdapter;

import java.awt.event.WindowEvent;

import java.io.DataInputStream;

import java.io.FileNotFoundException;

import java.io.FileOutputStream;

import java.io.IOException;

import java.io.InputStream;

import java.io.OutputStream;

import java.io.UnsupportedEncodingException;

import java.net.Socket;

import java.net.UnknownHostException;

import javax.swing.ImageIcon;

import javax.swing.JButton;

import javax.swing.JFrame;

import javax.swing.JLabel;

import javax.swing.JPanel;

 

 

class Main2 extends JFrame{

   JLabel jlde;

   private Image image; //獲取的影象

   private Toolkit toolKit; //Toolkit物件,用於獲取影象

   private Socket sock;

   private InputStream reader;

   private OutputStream writer;

   private boolean booxie;

     private DataInputStream dis;

   JLabel zt;

   int sizex=0;

   public Main2(){//建構函式

   super("圖片獲取實現");//標題顯示內容

   this.setSize(600, 400);//頁面大小

   this.setResizable(false);//不可縮放

   this.setLocationRelativeTo(null);//全屏居中居中顯示

   jlde=new JLabel();

   jlde.setBounds(0, 0,this.getWidth(), this.getWidth());

   this.add(jlde);

   JButton qd=new JButton("啟動");

   JButton cs=new JButton("測試");

   JButton hq=new JButton("獲取");

   JPanel jp=new JPanel();

   zt = new JLabel();

   jp.add(qd);

   jp.add(cs);

   jp.add(hq);

   jp.add(zt);

   Imgben("lala.png");//初始圖片顯示

   this.setIconImage(new ImageIcon("lala.png").getImage());//圖示圖片檔案

   this.add(jp,"South");

   this.setVisible(true);//顯示介面

   qd.addActionListener(new ActionListener(){//-------------------啟動按鈕監聽,開啟socket

      @Override

      public void actionPerformed(ActionEvent e) {

         zt.setText("正在啟動.......");

         try {

           

           

            sock=new Socket("192.168.43.243",2351);

            writer=sock.getOutputStream();//獲取輸出流

            reader=sock.getInputStream();//獲取輸入流

            dis = new DataInputStream(sock.getInputStream());//包裝輸入流, 允許應用程式以與機器無關方式從底層輸入流中讀取基本 Java 資料型別。

            writer.write(("0").getBytes("GBK"));//傳送確認資訊

            reads();//讀資料

           

           

         } catch (UnknownHostException e1) {

            e1.printStackTrace();

         } catch (IOException e1) {

            e1.printStackTrace();

         }}});

   cs.addActionListener(new ActionListener(){//------------------------測試是否連線成功

 

      @Override

      public void actionPerformed(ActionEvent e) {

         try {

           

            writer.write(("0").getBytes("GBK"));

            reads();

           

         } catch (UnsupportedEncodingException e1) {

            e1.printStackTrace();

         } catch (IOException e1) {

            e1.printStackTrace();

         }}});

   hq.addActionListener(new ActionListener(){//-------------------獲取圖片按鈕,點選可顯示實時圖片

      @Override

      public void actionPerformed(ActionEvent e) {

         try {

            zt.setText("開始獲取......");

            writer.write(("1").getBytes("GBK"));//傳送獲取圖片指令

            reads();

            reads();

            writer.write(("3").getBytes("GBK"));//傳送空的確認獲取指令

            String str= reads();

            sizex=Integer.parseInt(str.substring(str.indexOf("e")+2));//得到圖片大小

            reads();//讀取圖片資料

            zt.setText("  成功獲取 *-*  ");

            Imgben("new.jpg");//顯示獲取的圖片

           

         } catch (UnsupportedEncodingException e1) {

            e1.printStackTrace();

         } catch (IOException e1) {

            e1.printStackTrace();

         }}});

    this.addWindowListener(new WindowAdapter() {//點選叉監聽,完全退出程式

         public void windowClosing(WindowEvent arg0) {

             System.exit(0);

         }

         });}

   public String reads() throws FileNotFoundException{

      String strread="";

      FileOutputStream fos=null;

         if(sizex>0){//【 開始接收檔案 】

            fos = new FileOutputStream("new.jpg"); 

               byte[] bytes = new byte[1024]; 

               int length = 0; 

               int bensizej=0;

               try {

            while(( length = dis.read(bytes, 0, bytes.length)) != -1) {

                bensizej+=length;

                   try {

                   fos.write(bytes, 0, length);//以追加的方式寫資料

                   fos.flush();

                   if(sizex<=bensizej) break;//獲取完成

                   } catch (IOException e) {

                   e.printStackTrace();

                }  }} catch (IOException e) {

            e.printStackTrace();}  

               sizex=0;

               bensizej=0;  //清零計數

         }else{ //【 開始接收普通資料 】

        byte[] bu=new byte[1024];

        try {

         reader.read(bu);

             strread=(new String(bu,"GBK")).trim();

             System.out.println(strread);

             zt.setText(strread);

          } catch (Exception e) {

              e.printStackTrace();

          }}

          return strread;//返回讀取的普通資料

          }

  

//載入本地圖片

public void Imgben(String imagePath){

        toolKit = Toolkit.getDefaultToolkit();

        repaint(); //重繪螢幕

         image= toolKit.getImage(imagePath);

 }

public void paint(Graphics g){

       super.paint(g);

       if (image!=null){

         image.getScaledInstance(500, 500, Image.SCALE_DEFAULT);

         ImageIcon ico=new ImageIcon(image);

         ico.setImage(ico.getImage().getScaledInstance(600,370, Image.SCALE_DEFAULT));

         jlde.setIcon(ico);

       }}}

 

public class Main {

   public static void main(String[] args) {

      new Main2();

   }

 

}