天天看點

樹莓派自帶攝像頭OpenCV圖像識别-二維碼識别

1、安裝樹莓派鏡像,SSH,VNC等這裡就不介紹了很簡單大家自行百度。

2、我沒有用VNC 是以裝了teamviewer用于樹莓派遠端控制

安裝教程參考:http://blog.csdn.net/shaopengf/article/details/75072907

3、安裝一個功能齊全的OenpCV視覺庫

  • sudo apt-get update

    保證各個軟體都是最新的,你将要下載下傳很多東西,請保證網絡暢通。
  • sudo apt-get install build-essential

    安裝編譯OpenCV必不可少的依賴庫
  • sudo apt-get install build-libavformat-dev

    該庫提供一種音視訊碼流的編解碼方法
  • sudo apt-get install ffmpeg

    該庫提供音視訊流的轉碼功能
  • sudo apt-get install python-opencv

    OpenCV所依賴的Python開發包
  • sudo apt-get install opencv-doc

    安裝OpenCV開發文檔,萬一你需要呢
  • sudo apt-get install libcv-dev

    安裝編譯OpenCV所需要的頭檔案和靜态庫
  • sudo apt-get install libcvaux-dev

    安裝更多的開發工具來編譯OpenCV
  • sudo apt-get install libhighgui-dev

    安裝另一個編譯OpenCV所需要的頭檔案和靜态庫
  • cp -r /usr/share/doc/opencv-doc/examples /home/pi/

    将所有示例拷貝到你的根目錄

4、準備攝像頭 如果用USB攝像頭那不用做什麼可以直接使用,要使用樹莓派自帶攝像頭的話參考下面方法:

  • 樹莓派專用CSI攝像頭插到樹莓派的CSI口上并在在raspi-config中打開後就可以使用Raspistill指令直接使用,但如果在OpenCV中調用CSI攝像頭會出現無資料的現象(cv2.VideoCapture(0)這時不會報錯)。

    這是因為樹莓派中的camera module是放在/boot/目錄中以固件形式加載的,不是一個标準的V4L2的攝像頭驅動,是以加載起來之後會找不到/dev/video0的裝置節點。我們在/etc/modules裡面添加一行bcm2835-v4l2(小寫的L)就能解決問題。

    sudo nano /etc/modules

    然後加上一行

    bcm2835-v4l2

    如圖 最後重新開機
    樹莓派自帶攝像頭OpenCV圖像識别-二維碼識别

ls /dev/

檢視有沒有video0的裝置

- 測試攝像頭 把剛剛拷貝到根目錄下的例程中 camera.py 複制出來,測試一下攝像頭

cp /home/pi/examples/python/camera.py /home/pi/

python camera.py

運作看有沒有圖像video0的裝置

5、我們進入正題 二維碼識别,我這裡我們還需要裝一個Python-zbar

輸入指令

sudo apt-get install python-zbar

完成後直接使用下面程式運作

#!/usr/bin/env python  
#-*- coding: UTF-8 -*-   

# import the necessary packages
import simple_barcode_detection
import cv2
import numpy as np
import zbar
from PIL import Image

# create a reader
scanner = zbar.ImageScanner()
# configure the reader
scanner.parse_config('enable')
font=cv2.FONT_HERSHEY_SIMPLEX
camera=cv2.VideoCapture()

while(True):
    # Capture frame-by-frame
    grabbed, frame = camera.read()
    if not grabbed:
        break
    pil= Image.fromarray(frame).convert('L')
    width, height = pil.size
    raw = pil.tobytes()
    zarimage = zbar.Image(width, height, 'Y800', raw)
    scanner.scan(zarimage)
    for symbol in zarimage:  
    # do something useful with results 
    if not symbol.count: 
            print 'decoded', symbol.type, 'symbol', '"%s"' % symbol.data 
        cv2.putText(frame,symbol.data,(,),font,,(,,),)
    cv2.imshow('frame',frame)
    if cv2.waitKey() &  == ord('q'):
        break
cap.release()
cv2.destroyAllWindows()
           

運作效果

樹莓派自帶攝像頭OpenCV圖像識别-二維碼識别

下面是我電腦上的二維碼

樹莓派自帶攝像頭OpenCV圖像識别-二維碼識别

目前中文會亂碼,還未解決,有時間解決還會更新。

6、相關參考文檔

  • OpenCV https://docs.opencv.org/3.0-beta/doc/py_tutorials/py_gui/py_video_display/py_video_display.html
  • Python-zbar https://sourceforge.net/p/zbar/wiki/Home/