乐趣区

关于区块链:手把手教你实现pynqz2条形码识别

我是 雪天鱼,一名 FPGA 爱好者,钻研方向是 FPGA 架构摸索和 SOC 设计。

关注公众号【集成电路设计教程】,拉你进“IC 设计交换群”。

1. 前言

单单实现一个二维码辨认就花了将近一个星期,这篇文章我就具体介绍这段时间走过的坑,代码附在文末,焦急须要的小伙伴间接翻到最初即可

2. linux 配置

要想实现本我的项目,首先解决以下 三大要点,也着实节约了很多工夫

2.1 解决 pynq 联网

pynq 联网的教程网上堪称是不少,然而我却整了很久。
首先是在家里,我采纳

所示的办法,而后胜利 ping 通外网
在学校时这个办法却解决不了,我尝试了网上很多办法都无奈解决(可能我太菜了),最终在从新烧录了几次镜像后发现:间接把网线连到宿舍的路由器 上就连上外网了 …

具体还有对于批改下载源变为镜像源的办法能够参考其余博客

2.2 解决 pyzbar 库下载

这个库下载举荐采纳

pip3 install pyzbar

这个库装置的门路也要留神,命令行下输出

pip3 show pyzbar

我的在这里:

<center> 图 2.2.1. pyzbar 的地位 </center>

多说一句,上面的 zbar 包我采纳

sudo apt-get install python-zbar

失去,为什么不必 pip3,因为 pip3 下载这个总是报错,即便是

pip3 upgrade

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

<center> 图 2.2.2. zbar 的地位 </center>

2.3 解决 jupyter 导入库

2.3.1 首先阐明问题的由来

我发现应用

pip3 install pillow

PIL 在 jupyter 下能导入,然而却不能导入 pyzbar
又发现在命令行输出 python3后,能够导入 pyzbar,但不能导入 zbar

<center> 图 2.3.1. python3 导入 pyzbar 胜利,导入 zbar 不胜利 </center>

我在命令行输出 pyhton 解释器下发现不能导入pyzbar,但能够导入zbar
这就引起了我的留神,最终我发现原来 pip3 来的 pyzbar 有独自的存储门路,apt-get同理
至于为什么 python 和 python3 不能引入雷同的包
那就得

import sys
sys.path

采纳语句来察看,发现援用门路不统一。我想我晓得了症结所在:

<center> 图 2.3.2. 不太通顺的解释 </center>

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

2.3.2 办法一:

<center> 批改环境变量 </center>

阐明,以下为援用:

文章源地址:
https://blog.csdn.net/c20081052/article/details/79715132

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 或者登记再次登录后就能够了!

到此援用完结

2.3.3 办法二:

<center> 在代码中退出语句 </center>

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.cnblogs.com/mandy-study/p/7735801.html

3. 提供代码

# 要害辨认代码
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)

最终后果,发现框框并不是很贴合,可能是照片照的问题。然而辨认的后果完全正确

残缺代码请见连贯:
https://download.csdn.net/download/weixin_44360347/15816188

关上是.ipynb 格局。

  • 更多技术文章和学习材料,请关注我的公众号:【集成电路设计教程】
  • 全平台对立:【雪天鱼】
退出移动版