秦子實(shí)
摘要:隨著物聯(lián)網(wǎng)設(shè)備的普及,物聯(lián)網(wǎng)設(shè)備成本大幅下降,基于物聯(lián)網(wǎng)設(shè)備的低成本硬件大量出現(xiàn)。在日常工作中,紙質(zhì)文件掃描過(guò)程煩瑣,需要配置掃描儀,而在對(duì)數(shù)據(jù)輸入設(shè)備有限制的專(zhuān)用網(wǎng)絡(luò)中,掃描儀接入及管理也是一件復(fù)雜的工作。因此,需要一種具有多種輸入方式,且能夠以常用方式輸出的文件掃描設(shè)備。本文實(shí)現(xiàn)了一種基于樹(shù)莓派的簡(jiǎn)易文件掃描器,具有成本低、低功率、體積小、使用限制少等特點(diǎn),可以廣泛應(yīng)用于多種文件掃描場(chǎng)景。
關(guān)鍵詞:樹(shù)莓派;OpenCV;Python
中圖分類(lèi)號(hào):TP393? ? ? 文獻(xiàn)標(biāo)識(shí)碼:A
文章編號(hào):1009-3044(2021)21-0132-02
開(kāi)放科學(xué)(資源服務(wù))標(biāo)識(shí)碼(OSID):
1概述
在日常企業(yè)辦公過(guò)程中,由于無(wú)紙化辦公的推進(jìn),有大量紙質(zhì)文件需要轉(zhuǎn)換為數(shù)字檔案進(jìn)行存儲(chǔ),此類(lèi)業(yè)務(wù)通常選用掃描儀來(lái)完成。掃描儀設(shè)備的使用場(chǎng)景較為單一,必須將大量文件資料逐頁(yè)送入掃描儀,且通常使用USB輸出在一臺(tái)特定的計(jì)算機(jī)上。隨著物聯(lián)網(wǎng)技術(shù)的發(fā)展,卡片計(jì)算機(jī)及微型攝像頭的成本大幅降低,同時(shí)圖像處理技術(shù)也有了較大提升,而掃描儀本身即為一種將圖像進(jìn)行數(shù)字化處理的光學(xué)設(shè)備。因此,可以使用小型物聯(lián)網(wǎng)設(shè)備對(duì)這一過(guò)程進(jìn)行模擬并優(yōu)化,使其符合更多的使用場(chǎng)景。
本文實(shí)現(xiàn)了一種基于樹(shù)莓派和微型攝像頭的文件掃描器,輸入為文件的照片,可以通過(guò)USB、藍(lán)牙、無(wú)線/有線網(wǎng)絡(luò)等多種方式進(jìn)行輸出,使用場(chǎng)景靈活,且成本較掃描儀大幅降低。
2技術(shù)簡(jiǎn)介
2.1樹(shù)莓派
樹(shù)莓派是目前應(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的大量軟件可以通過(guò)本地編譯在樹(shù)莓派上繼續(xù)使用。
2.2樹(shù)莓派本地編譯
在樹(shù)莓派上使用OpenCV或新版Python需要通過(guò)源碼編譯,對(duì)于OpenCV,需要提前安裝編譯工具、開(kāi)發(fā)工具、圖片依賴、視頻依賴、GUI依賴等庫(kù),此外,由于在樹(shù)莓派這種計(jì)算資源受限的設(shè)備上,還應(yīng)該安裝矩陣計(jì)算優(yōu)化庫(kù):
[# 編譯/開(kāi)發(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)化庫(kù)
sudo apt-get install libatlas-base-devgfortran ]
對(duì)于Python,需要提前安裝頭文件等資源:
[sudo apt-get install python2.7-dev python3-dev ]
另外,在編譯前應(yīng)臨時(shí)調(diào)整系統(tǒng)虛擬內(nèi)存大小并重啟虛擬內(nèi)存服務(wù),使得編譯過(guò)程能夠利用樹(shù)莓派的全部四顆核心,避免編譯過(guò)程因?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卡因過(guò)度讀寫(xiě)損壞。
3文件掃描器實(shí)現(xiàn)方案
3.1安裝相關(guān)工具
在完成攝像頭硬件安裝后,應(yīng)安裝帶有array模塊的picamera庫(kù),以通過(guò)Python驅(qū)動(dòng)攝像頭并直接將圖像轉(zhuǎn)為numpy數(shù)組,以供下游的OpenCV處理:
[pip install "picamera[array]" ]
3.2獲取圖像
通過(guò)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