• 树莓派识别二维码


    https://amazefcc233.com/archives/148/

    准备

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

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

    样例读取IP并且二维码显示

     

    #!/usr/bin/env python
    #-*- coding: UTF-8 -*-
    import os, signal, subprocess
    import cv2
    import socket
     
    
    #获取IP 
    def get_host_ip():
        """
        查询本机ip地址
        :return: ip
        """
        try:
            s = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
            s.connect(('8.8.8.8', 80))
            ip = s.getsockname()[0]
        finally:
            s.close()
        return ip
    
    #成成英文二维码 暂时不支持中文
    def set_qrcode(Msg='zhe',imgpath=  "qrcode.png"):   
        #Msg='http://'+get_host_ip()+":8080"
        imgpath = "qrcode.png"
        #print(IP)
        os.system("qrencode -o "+imgpath+" '"+Msg+"'")#保存生成的二维码
         
        img = cv2.imread(imgpath)    # 加载生成的二维码图片
        cv2.namedWindow("qrcode",0)
        cv2.imshow("qrcode",img)#显示出来
        cv2.waitKey(100)
    
    #二维码识别
    def konw_qrcode(image_src="qrcode.png"):
        #image_src="/home/pi/Work/WorkPlace/python/1project/30二维码/qrcode.png"
        #image_src="qrcode.png"
        
        #从摄像头抓取一张图片识别
        #zbarcam=subprocess.Popen("zbarcam --raw --nodisplay /dev/video0", stdout=subprocess.PIPE, shell=True, preexec_fn=os.setsid)
        #qrcodetext=zbarcam.stdout.readline()
        
        #读取离线图片
        zbarcam=subprocess.Popen("zbarimg --raw "+image_src, stdout=subprocess.PIPE, shell=True, preexec_fn=os.setsid)
        qrcodetext=zbarcam.stdout.readline().decode()
        if qrcodetext != "":
            qrresult = f"识别结果: {qrcodetext}"
            print(qrresult) 
        else:
            print (u"qrcodetext 为空")
     
       
      
        #return (qrresult)    
     
         
         
    if __name__ == '__main__':
        showmsg='http://'+get_host_ip()+":8080"
        set_qrcode(showmsg,"qrcode.png")#生成二维码
        konw_qrcode("qrcode.png")      #识别二维码
    

      

    综合测试

    生成二维码

    读取离线图片

    从视频读取

    #!/usr/bin/env python
    #-*- coding: UTF-8 -*-
    import os, signal, subprocess
    import cv2
    
    
    
    #成成英文二维码 暂时不支持中文
    def set_qrcode(Msg='0001',imgpath=  "qrcode.png"):   
        #Msg='http://'+get_host_ip()+":8080"
        #imgpath = "qrcode.png"
        #print(IP)
        os.system("qrencode -o "+imgpath+" '"+Msg+"'")#保存生成的二维码
         
        img = cv2.imread(imgpath)    # 加载生成的二维码图片
        cv2.namedWindow("qrcode",0)
        cv2.imshow("qrcode",img)#显示出来
        cv2.waitKey(100)
    
    #set_qrcode(msg,num+".png")#生成二维码
    
    
    
    #二维码识别  从离线图片读取
    def konw_qrcode(image_src="qrcode.png"):
       
        
        #从摄像头抓取一张图片识别
        #zbarcam=subprocess.Popen("zbarcam --raw --nodisplay /dev/video0", stdout=subprocess.PIPE, shell=True, preexec_fn=os.setsid)
        #qrcodetext=zbarcam.stdout.readline()
        
        #读取离线图片
        zbarcam=subprocess.Popen("zbarimg --raw "+image_src, stdout=subprocess.PIPE, shell=True, preexec_fn=os.setsid)
        qrcodetext=zbarcam.stdout.readline().decode()
        
        if qrcodetext != "":
            qrresult = f"识别结果: {qrcodetext}"
            print(qrresult) 
        else:
            print (u"qrcodetext 为空")
     
    #二维码识别  从USB相机
    def video():
        
        cap=cv2.VideoCapture(0)
        cap.set(3,640)
        cap.set(4,480)
        while(cap.isOpened()):
    
    
    
            ret_flag, Vshow = cap.read()
    
            #cap.read()返回两个值,第一个值为布尔值,如果视频正确,那么就返回true,  第二个值代表图像三维像素矩阵
            
            cv2.imshow('Capture', Vshow)
            #cv2.imwrite('Saveimage.png',Vshow)
            #konw_qrcode('Saveimage.png')
            
            k=cv2.waitKey(10)
            if k==ord('s'):
                cv2.imwrite('Saveimage.png',Vshow)
                konw_qrcode('Saveimage.png')  
              
                
        cap.release()
    
        cv2.destoryAllWindows()
            #重中之重,这个必须有,这个获取字母,但是一直不能通过,即等待一定时间内的用户反馈,如果用户没有按下按键,则继续等待循环。
    
         
          
     
         
         
    if __name__ == '__main__':
        
        #生成二维码并保存  0001 内容   qrcode.png 保存路径和名字
        #set_qrcode('0001', "qrcode.png"):   
        
        #离线图像测试
        #path="0003"+".png"
        #konw_qrcode(path)      #识别二维码
        
        #在线USB测试
        video()
    

      

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

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

    需要支持识别中文二维码

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

    安装前置库

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

     
    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_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
    

      

  • 相关阅读:
    第2课:关闭被黑客扫描的端口
    CentOS安装zip及用法
    网络安全目录
    第1课:电脑基础命令讲解
    SQL注入目录
    windows下安装redis
    CentOS安装rar及用法
    CentOS安装OpenOffice
    hadoop异常
    删除CentOS系统自带的jdk
  • 原文地址:https://www.cnblogs.com/kekeoutlook/p/12723837.html
Copyright © 2020-2023  润新知