f_c_c

树莓派 - 从零开始的识别二维码教程&从一开始的支持中文的zbar编译安装教程!
买了个树莓派,带了个摄像头。 正好想到自己的项目似乎可以用到二维码识别。 于是乎...动手了!
扫描右侧二维码阅读全文
19
2019/10

树莓派 - 从零开始的识别二维码教程&从一开始的支持中文的zbar编译安装教程!

买了个树莓派,带了个摄像头。
正好想到自己的项目似乎可以用到二维码识别。
于是乎...动手了!

Head pic: 【可愛くなりたい】 / TOKKYU

正文

准备

在本教程所给出的内容中,您需要安装以下工具:

  • sudo apt-get install python-imaging
  • sudo apt-get install qrencode
  • sudo apt-get install python-pygame
    如果您想识别二维码而不需要支持中文,那么您可以使用一键命令:
  • sudo apt-get install zbar-tools
    如果想要支持中文,那么...请遵守教程中的指示以进行操作。

此外,本教程中的识别二维码这一过程中,需要摄像头的参与。本教程中所使用的摄像头模块通过连接Camera接口而可使用。
开启摄像头:

  1. sudo raspi-config
  2. 进入选项5
  3. 进入选项P1
  4. 选择Enable
  5. 选择Finish
  6. 选择Reboot

同时这里是一份本教程中的示例代码。您可以直接复制或是前往Gayhub下载。

main.py

#!/usr/bin/env python
#-*- coding: UTF-8 -*-
'''
主程序
'''

import qrcode

while (True):
    print ("1: qrcode 创建")
    print ("2: qrcode 识别")
    print (u"3: 退出")
    select=int(input(u"请选择: "))
    if select == 1:
        qrcode.erzeugen()
    elif select == 2:
        result=qrcode.lesen().strip()
        print (result)
    elif select == 3:
        print (u"完成程序...")
        break

qrcode.py

#!/usr/bin/env python
#-*- coding: UTF-8 -*-
import os, signal, subprocess
from picamera import PiCamera 

strfile1 = "qrcode"

def erzeugen():
    text=input(u"enter text QRCode: ")
    os.system("qrencode -o "+strfile1+".png '"+text+"'")
    print (u"QRCode in: "+strfile1+".png")

def lesen():
    os.system("raspistill -t 1000 -w 320 -h 240 -o /home/pi/Desktop/cam/qrcode/image.jpg")
    print (u"raspistill finished")
    #zbarcam=subprocess.Popen("zbarcam --raw --nodisplay /dev/video0", stdout=subprocess.PIPE, shell=True, preexec_fn=os.setsid)
    #print u"zbarcam started successfully..."
    #qrcodetext=zbarcam.stdout.readline()
    zbarcam=subprocess.Popen("zbarimg --raw /home/pi/Desktop/cam/qrcode/image.jpg", stdout=subprocess.PIPE, shell=True, preexec_fn=os.setsid)
    qrcodetext=zbarcam.stdout.readline().decode()
    if qrcodetext != "":
        #print (qrcodetext)
        pass
    else:
        print (u"qrcodetext 为空")

    #os.killpg(zbarcam.pid, signal.SIGTERM)
    print (u"zbarcam stopped successfully...")
    qrresult = f"QRCode: {qrcodetext}"
    return (qrresult)

不需要支持识别中文二维码

只要上面所有的准备工作都全部成功地做完了,那么您运行代码即可。按理来说应该并没有什么问题会出现。

需要支持识别中文二维码

请在阅读以下内容之前,再想一想:我是否真的需要支持中文呢?
......
......
......
如果答案仍然为是,那么请继续阅读。否则请使用方便快捷的不需要支持中文的方式。
因为此部分内容会涉及到一些编译安装的相关内容。

安装前置库

首先,请运行以下命令,安装工具库

wget http://www.imagemagick.org/download/delegates/jpegsrc.v9b.tar.gz
tar -xzvf jpegsrc.v9b.tar.gz
cd jpeg.9b
./configure
make
sudo make install

(讲真我也不知道这步骤是否为必须的。但我装了没啥问题= =还请大家自己尝试)

然后,就要安装Imagemagick了。

wget https://www.imagemagick.org/download/ImageMagick.tar.gz
# 文件夹名称可能有所不同。还请自行灵活处理。
cd ImageMagick-7.0.8-68
./configure 
make
sudo make install
sudo ldconfig /usr/local/lib
# 检验安装是否成功
convert -version

并且,我们还需要配置一波软链接:

sudo ln -s /usr/local/include/ImageMagick-7 /usr/local/include/ImageMagick
sudo ln -s /usr/local/include/ImageMagick-7/MagickWand /usr/local/include/wand

编译安装zbar

首先,下载一份zbar源码,并准备编译器:

sudo apt-get install python-gtk2-dev
sudo apt-get install libqt4-dev
wget http://downloads.sourceforge.net/project/zbar/zbar/0.10/zbar-0.10.tar.gz
tar -zxvf zbar-0.10.tar.gz

然后,我们需要编辑一下编码,使得可以支持中文。

# 进入目录
cd zbar.0.10/zbar/qrcode/
vim qrdectxt.c

找到如图片所示的代码(约第64行),将红框内圈出部分的编码进行替换
(替换的内容为日文的编码。如果希望识别日文,那请替换其他编码,但不要替换utf-8)
snipaste_20191019_141142.png
同文件找到如图片所示的代码,将编码顺序进行排列
(建议中文放在最前面)
snipaste_20191019_141214.png
保存,并退出。
然后,就可以开始编译工作啦!

# 首先回到自己的目录(目录仅为示例,对于不同人可能会有不同)
cd /home/pi/Desktop/build/zbar-0.10
# 以下代码安装后将**不可以**使用zbarcam命令。若想使用zbarcam,请去除--disable-video命令,并自行安装相关库
./configure --disable-video -without-qt -without-gtk -without-x -with-jpeg
make
sudo make install

安装完成,使用上面的代码来尝试二维码识别吧~

疑难杂症

按照此教程进行,您应该是碰不到有什么问题出现的。
如果还是出现了...欢迎留言=-=但我也不知道能不能帮上忙emmm

感谢

咱也只是刚刚用树莓派没多久。相当一部分的资源都是百度得来的。
咱参考了以下的链接。没有这些链接是无法完成本作品的,在此感谢这些作者=-=


Last modification:October 19th, 2019 at 03:10 pm
If you think my article is useful to you, please feel free to appreciate

Leave a Comment