APP下载

基于树莓派的文件扫描器的设计与实现

2021-09-23秦子实

电脑知识与技术 2021年21期
关键词:树莓派

秦子实

摘要:随着物联网设备的普及,物联网设备成本大幅下降,基于物联网设备的低成本硬件大量出现。在日常工作中,纸质文件扫描过程烦琐,需要配置扫描仪,而在对数据输入设备有限制的专用网络中,扫描仪接入及管理也是一件复杂的工作。因此,需要一种具有多种输入方式,且能够以常用方式输出的文件扫描设备。本文实现了一种基于树莓派的简易文件扫描器,具有成本低、低功率、体积小、使用限制少等特点,可以广泛应用于多种文件扫描场景。

关键词:树莓派;OpenCV;Python

中图分类号:TP393      文献标识码:A

文章编号:1009-3044(2021)21-0132-02

开放科学(资源服务)标识码(OSID):

1概述

在日常企业办公过程中,由于无纸化办公的推进,有大量纸质文件需要转换为数字档案进行存储,此类业务通常选用扫描仪来完成。扫描仪设备的使用场景较为单一,必须将大量文件资料逐页送入扫描仪,且通常使用USB输出在一台特定的计算机上。随着物联网技术的发展,卡片计算机及微型摄像头的成本大幅降低,同时图像处理技术也有了较大提升,而扫描仪本身即为一种将图像进行数字化处理的光学设备。因此,可以使用小型物联网设备对这一过程进行模拟并优化,使其符合更多的使用场景。

本文实现了一种基于树莓派和微型摄像头的文件扫描器,输入为文件的照片,可以通过USB、蓝牙、无线/有线网络等多种方式进行输出,使用场景灵活,且成本较扫描仪大幅降低。

2技术简介

2.1树莓派

树莓派是目前应用较为广泛的卡片计算机,最初设计用于基本的计算机科学教育。信用卡大小,流行版本峰值功率约10~15瓦,具备40针GPIO与外部硬件通信,同时具有15针MIPI接口(摄像头输入),CPU为ARMv7或v8系列四核1.2~1.5GHz,完全满足图像处理等复杂任务要求。操作系统通常使用基于Debian Linux的Raspbian,因此,Linux的大量软件可以通过本地编译在树莓派上继续使用。

2.2树莓派本地编译

在树莓派上使用OpenCV或新版Python需要通过源码编译,对于OpenCV,需要提前安装编译工具、开发工具、图片依赖、视频依赖、GUI依赖等库,此外,由于在树莓派这种计算资源受限的设备上,还应该安装矩阵计算优化库:

[# 编译/开发工具

sudo apt-get install build-essential cmakepkg-config

# 图片处理相关依赖

sudo apt-get install libjpeg-devlibtiff5-dev libjasper-devlibpng12-dev

# 视频处理相关依赖

sudo apt-get install libavcodec-devlibavformat-devlibswscale-devlibv4l-dev libxvidcore-devlibx264-dev

# GUI界面顯示相关依赖

sudo apt-get install libgtk2.0-dev libgtk-3-dev

# 矩阵运算优化库

sudo apt-get install libatlas-base-devgfortran ]

对于Python,需要提前安装头文件等资源:

[sudo apt-get install python2.7-dev python3-dev ]

另外,在编译前应临时调整系统虚拟内存大小并重启虚拟内存服务,使得编译过程能够利用树莓派的全部四颗核心,避免编译过程因为内存不足而挂起:

[sudo vim /etc/dphys-swapfile

CONF_SWAPSIZE=1024

sudo /etc/init.d/dphys-swapfile stop

sudo /etc/init.d/dphys-swapfile start ]

编译完成后应改回默认值,以避免SD卡因过度读写损坏。

3文件扫描器实现方案

3.1安装相关工具

在完成摄像头硬件安装后,应安装带有array模块的picamera库,以通过Python驱动摄像头并直接将图像转为numpy数组,以供下游的OpenCV处理:

[pip install "picamera[array]" ]

3.2获取图像

通过PiCamera获取摄像头图像,送入OpenCV并显示在Raspbian系统的GUI中:

[from picamera.array import PiRGBArray

from picamera import PiCamera

import time, cv2

# 初始化摄像头及数据引用

camera = PiCamera()

rawCampture = PiRGBArray(camera)

# 空一小段时间让摄像头硬件启动

time.sleep(0.1)

# 获取一张图片并显示

camera.capture(rawCapture, format="bgr")

img = rawCapture.array

猜你喜欢

树莓派
智能安全防盗探测小车
基于嵌入式技术的农村医疗系统设计