秦子實(shí)
摘要:隨著物聯(lián)網(wǎng)設(shè)備的普及,物聯(lián)網(wǎng)設(shè)備成本大幅下降,基于物聯(lián)網(wǎng)設(shè)備的低成本硬件大量出現(xiàn)。在日常工作中,紙質(zhì)文件掃描過程煩瑣,需要配置掃描儀,而在對數(shù)據(jù)輸入設(shè)備有限制的專用網(wǎng)絡(luò)中,掃描儀接入及管理也是一件復(fù)雜的工作。因此,需要一種具有多種輸入方式,且能夠以常用方式輸出的文件掃描設(shè)備。本文實(shí)現(xiàn)了一種基于樹莓派的簡易文件掃描器,具有成本低、低功率、體積小、使用限制少等特點(diǎn),可以廣泛應(yīng)用于多種文件掃描場景。
關(guān)鍵詞:樹莓派;OpenCV;Python
中圖分類號:TP393? ? ? 文獻(xiàn)標(biāo)識碼:A
文章編號:1009-3044(2021)21-0132-02
開放科學(xué)(資源服務(wù))標(biāo)識碼(OSID):
1概述
在日常企業(yè)辦公過程中,由于無紙化辦公的推進(jìn),有大量紙質(zhì)文件需要轉(zhuǎn)換為數(shù)字檔案進(jìn)行存儲,此類業(yè)務(wù)通常選用掃描儀來完成。掃描儀設(shè)備的使用場景較為單一,必須將大量文件資料逐頁送入掃描儀,且通常使用USB輸出在一臺特定的計(jì)算機(jī)上。隨著物聯(lián)網(wǎng)技術(shù)的發(fā)展,卡片計(jì)算機(jī)及微型攝像頭的成本大幅降低,同時(shí)圖像處理技術(shù)也有了較大提升,而掃描儀本身即為一種將圖像進(jìn)行數(shù)字化處理的光學(xué)設(shè)備。因此,可以使用小型物聯(lián)網(wǎng)設(shè)備對這一過程進(jìn)行模擬并優(yōu)化,使其符合更多的使用場景。
本文實(shí)現(xiàn)了一種基于樹莓派和微型攝像頭的文件掃描器,輸入為文件的照片,可以通過USB、藍(lán)牙、無線/有線網(wǎng)絡(luò)等多種方式進(jìn)行輸出,使用場景靈活,且成本較掃描儀大幅降低。
2技術(shù)簡介
2.1樹莓派
樹莓派是目前應(yīng)用較為廣泛的卡片計(jì)算機(jī),最初設(shè)計(jì)用于基本的計(jì)算機(jī)科學(xué)教育。信用卡大小,流行版本峰值功率約10~15瓦,具備40針GPIO與外部硬件通信,同時(shí)具有15針MIPI接口(攝像頭輸入),CPU為ARMv7或v8系列四核1.2~1.5GHz,完全滿足圖像處理等復(fù)雜任務(wù)要求。操作系統(tǒng)通常使用基于Debian Linux的Raspbian,因此,Linux的大量軟件可以通過本地編譯在樹莓派上繼續(xù)使用。
2.2樹莓派本地編譯
在樹莓派上使用OpenCV或新版Python需要通過源碼編譯,對于OpenCV,需要提前安裝編譯工具、開發(fā)工具、圖片依賴、視頻依賴、GUI依賴等庫,此外,由于在樹莓派這種計(jì)算資源受限的設(shè)備上,還應(yīng)該安裝矩陣計(jì)算優(yōu)化庫:
[# 編譯/開發(fā)工具
sudo apt-get install build-essential cmakepkg-config
# 圖片處理相關(guān)依賴
sudo apt-get install libjpeg-devlibtiff5-dev libjasper-devlibpng12-dev
# 視頻處理相關(guān)依賴
sudo apt-get install libavcodec-devlibavformat-devlibswscale-devlibv4l-dev libxvidcore-devlibx264-dev
# GUI界面顯示相關(guān)依賴
sudo apt-get install libgtk2.0-dev libgtk-3-dev
# 矩陣運(yùn)算優(yōu)化庫
sudo apt-get install libatlas-base-devgfortran ]
對于Python,需要提前安裝頭文件等資源:
[sudo apt-get install python2.7-dev python3-dev ]
另外,在編譯前應(yīng)臨時(shí)調(diào)整系統(tǒng)虛擬內(nèi)存大小并重啟虛擬內(nèi)存服務(wù),使得編譯過程能夠利用樹莓派的全部四顆核心,避免編譯過程因?yàn)閮?nèi)存不足而掛起:
[sudo vim /etc/dphys-swapfile
CONF_SWAPSIZE=1024
sudo /etc/init.d/dphys-swapfile stop
sudo /etc/init.d/dphys-swapfile start ]
編譯完成后應(yīng)改回默認(rèn)值,以避免SD卡因過度讀寫損壞。
3文件掃描器實(shí)現(xiàn)方案
3.1安裝相關(guān)工具
在完成攝像頭硬件安裝后,應(yīng)安裝帶有array模塊的picamera庫,以通過Python驅(qū)動(dòng)攝像頭并直接將圖像轉(zhuǎn)為numpy數(shù)組,以供下游的OpenCV處理:
[pip install "picamera[array]" ]
3.2獲取圖像
通過PiCamera獲取攝像頭圖像,送入OpenCV并顯示在Raspbian系統(tǒng)的GUI中:
[from picamera.array import PiRGBArray
from picamera import PiCamera
import time, cv2
# 初始化攝像頭及數(shù)據(jù)引用
camera = PiCamera()
rawCampture = PiRGBArray(camera)
# 空一小段時(shí)間讓攝像頭硬件啟動(dòng)
time.sleep(0.1)
# 獲取一張圖片并顯示
camera.capture(rawCapture, format="bgr")
img = rawCapture.array