亲手教你实现pynq-z2条形码识别功能

 更新时间:2022年07月21日 15:54:45   作者:雪天鱼  
这篇文章主要介绍了pynq-z2条形码识别功能,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下

1. linux配置

要想实现本项目,首先解决以下三大要点,也着实浪费了很多时间

1.1解决pynq联网

pynq联网的教程网上可谓是不少,但是我却整了很久。
首先是在家里,我采用

所示的方法,然后成功ping通外网
在学校时这个方法却解决不了,我尝试了网上很多方法都无法解决(可能我太菜了),最终在重新烧录了几次镜像后发现:直接把网线连到宿舍的路由器上就连上外网了...

具体还有关于修改下载源变为镜像源的方法可以参考其他博客

1.2解决pyzbar库下载

这个库下载推荐采用

pip3 install pyzbar

这个库安装的路径也要注意,命令行下输入

pip3 show pyzbar

我的在这里:

图 2.2.1. pyzbar的位置

多说一句,下面的zbar包我采用

sudo apt-get install python-zbar

得到,为什么不用pip3,因为pip3下载这个总是报错,即使是

pip3 upgrade

也不行,不是pip3版本的问题。
我的linux镜像是v2.3版本的,不知道大家采用v2.5或者更高会不会好些

图 2.2.2. zbar的位置

1.3解决jupyter导入库

1.3.1 首先说明问题的由来

我发现使用

pip3 install pillow

PIL在jupyter下能导入,但是却不能导入pyzbar
又发现在命令行输入 python3后,可以导入pyzbar,但不能导入zbar

图 2.3.1. python3导入pyzbar成功,导入zbar不成功

我在命令行输入pyhton 解释器下发现不能导入pyzbar,但可以导入zbar
这就引起了我的注意,最终我发现原来pip3来的pyzbar有单独的存储路径,apt-get同理
至于为什么python和python3不能引入相同的包
那就得

import sys
sys.path

采用语句来观察,发现引用路径不一致。我想我知道了症结所在:

图 2.3.2. 不太通顺的解释

$\color{#FF3030}{红字}$不太通顺,翻译成 人话 就是:
jupyter要设置为 支持引用 存储pyzbar包的路径

1.3.2 方法一:

修改环境变量

说明,以下为引用:

文章源地址:https://www.jb51.net/article/256333.htm

Linux 下设置环境变量有三种方法,一种用于当前终端,一种用于当前用户,一种用于所有用户:
一:用于当前终端:
在当前终端中输入:export PATH=$PATH:<你的要加入的路径>
不过上面的方法只适用于当前终端,一旦当前终端关闭或在另一个终端中,则无效。

export NDK_ROOT=/home/jiang/soft/Android-ndk-r8e 

只能在当前终端使用。
二:用于当前用户:
在用户主目录下有一个 .bashrc 隐藏文件,可以在此文件中加入 PATH 的设置如下:

$ gedit ~/.bashrc

加入:

export PATH=<你的要加入的路径>:$PATH

如果要加入多个路径,只要:

export PATH=<你要加入的路径1>:<你要加入的路径2>: ...... :$PATH

当中每个路径要以冒号分隔。

这样每次登录都会生效

添加PYTHONPATH的方法也是这样,在.bashrc中添加

export PYTHONPATH=/home/zhao/setup/caffemaster/python:/home/zhao/setup/mypy:$PYTHONPATH 

保存后在终端输入 $ source ~/.bashrc 使环境变量立即生效

三:用于所有用户:

$ sudo gedit /etc/profile 

加入:

export PATH=<你要加入的路径>:$PATH

就可以了。
终端输入:echo $PATH 可以查看环境变量

注意,修改环境变量后,除了第一种方法立即生效外,第二第三种方法要立即生效,可以source ~/.bashrc或者注销再次登录后就可以了!

到此引用结束

1.3.3 方法二 :

在代码中加入语句

import sys
sys.path
sys.path.append('/home/xilinx/.local/lib/python3.6/site-packages')

sys.path是查看jupyter的库查找路径,可以查看你的jupyter是否包括了你的包的路径
一般来说库导入失败都是由于这个原因——jupyter库路径
这是设置引用额外引用路径的方法:

sys.path.append('')

可参考这篇文章:https://www.jb51.net/article/44107.htm

2. 提供代码

# 关键识别代码
barcodes = decode(image)
def decode (image,barcodes):
    # loop over the detected barcodes
    for barcode in barcodes:
        # extract the bounding box location of the barcode and draw the
        # bounding boxr surrounding the barcode on the image
        (x, y, w, h) = barcode.rect
        cv2.rectangle(image, (x, y),(x + w,y + h), (255, 0, 0), 5)
        # the barcode data is a bytes object so if we want to draw it on
        # our output image wre need to convert it to a string first
        barcodeData = barcode.data.decode("utf-8")
        barcodeType = barcode.type
        # draw the barcode data and barcode type on the image
        text ="{} ({})". format(barcodeData,barcodeType)
        cv2.putText(image,text,(x, y - 10), cv2.FONT_HERSHEY_SIMPLEX,.8, (255, 0, 0), 2) 
        # print the barcode type and data to the terminal
        print("[INFO] Found {} barcode: {}".format(barcodeType,barcodeData))
    plt.figure(figsize=(10,10))
    plt.imshow(image)
    plt.show()
# Decoding barcodes
decode(image,barcodes)

最终结果,发现框框并不是很贴合,可能是照片照的问题。但是识别的结果完全正确

完整代码请见连接:

http://xiazai.jb51.net/202207/yuanma/QRcode_jb51.rar

打开是.ipynb格式。

到此这篇关于亲手教你实现pynq-z2条形码识别功能的文章就介绍到这了,更多相关pynq-z2条形码识别内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • Python pyautogui模块实现鼠标键盘自动化方法详解

    Python pyautogui模块实现鼠标键盘自动化方法详解

    这篇文章主要介绍了Python pyautogui 模块实现鼠标键盘自动化方法详解,需要的朋友可以参考下
    2020-02-02
  • Python Pygame中精灵和碰撞检测详解

    Python Pygame中精灵和碰撞检测详解

    对于游戏中出现的每一样东西,比如砖块箱子水管地面,还有人物都可以看成是一个独立的物体,所以每个物体类都继承了pygame的精灵类pg.sprite.Sprite,这篇文章主要给大家介绍了关于Python Pygame中精灵和碰撞检测的相关资料,需要的朋友可以参考下
    2021-10-10
  • vue.js刷新当前页面的实例讲解

    vue.js刷新当前页面的实例讲解

    在本篇文章里小编给各位分享了一篇关于vue.js刷新当前页面的实例讲解,有兴趣的朋友们可以学习参考下。
    2020-12-12
  • python基于C/S模式实现聊天室功能

    python基于C/S模式实现聊天室功能

    这篇文章主要为大家详细介绍了python基于C/S模式实现聊天室功能,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2019-01-01
  • python如何获取网络数据

    python如何获取网络数据

    这篇文章主要介绍了python如何获取网络数据,帮助大家更好的理解和学习使用python,感兴趣的朋友可以了解下
    2021-04-04
  • Python3.5面向对象与继承图文实例详解

    Python3.5面向对象与继承图文实例详解

    这篇文章主要介绍了Python3.5面向对象与继承,结合图文与实例形式详细分析了Python3.5面向对象与继承的相关概念、原理、实现方法及操作注意事项,需要的朋友可以参考下
    2019-04-04
  • python Pandas高级功能之数据透视表和字符串操作

    python Pandas高级功能之数据透视表和字符串操作

    Pandas是Python中用于数据处理和分析的强大库,这篇文章将深入探讨Pandas库的高级功能:数据透视表和字符串操作,需要的朋友可以参考下
    2023-07-07
  • 深入了解Python中反射和动态属性的无限可能

    深入了解Python中反射和动态属性的无限可能

    理解 Python 中的反射和动态属性是编写灵活和强大程序的关键,在这篇文章中,小编将带领大家一起反射和动态属性的概念,并提供大量示例代码,希望对大家有所帮助
    2023-11-11
  • Python操作qml对象过程详解

    Python操作qml对象过程详解

    这篇文章主要介绍了Python操作qml对象过程详解,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2019-09-09
  • 以一个投票程序的实例来讲解Python的Django框架使用

    以一个投票程序的实例来讲解Python的Django框架使用

    这篇文章主要介绍了以一个投票程序的实例来讲解Python的Django框架使用,Django是Python世界中人气最高的MVC框架,需要的朋友可以参考下
    2016-02-02

最新评论