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

关注公众号,拉你进“IC设计交流群”。

1.前言

单单实现一个二维码识别就花了将近一个星期,这篇文章我就详细介绍这段时间走过的坑,代码附在文末,着急需要的小伙伴直接翻到最后即可

2. linux配置

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

2.1解决pynq联网

pynq联网的教程网上可谓是不少,但是我却整了很久。

首先是在家里,我采用

所示的方法,然后成功ping通外网

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

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

2.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的位置

2.3解决jupyter导入库

2.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包的路径

2.3.2 方法一:

修改环境变量

说明,以下为引用:

文章源地址:

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 方法二 :

在代码中加入语句

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格式。

  • 更多技术文章和学习资料,请关注我的公众号:【集成电路设计教程】
  • 全平台统一:【雪天鱼】

手把手教你实现pynq-z2条形码识别的更多相关文章

  1. Pytorch入门——手把手教你MNIST手写数字识别

    MNIST手写数字识别教程 要开始带组内的小朋友了,特意出一个Pytorch教程来指导一下 [!] 这里是实战教程,默认读者已经学会了部分深度学习原理,若有不懂的地方可以先停下来查查资料 目录 MNI ...

  2. UWP Jenkins + NuGet + MSBuild 手把手教你做自动UWP Build 和 App store包

    背景 项目上需要做UWP的自动安装包,在以前的公司接触的是TFS来做自动build. 公司要求用Jenkins来做,别笑话我,之前还真不晓得这个东西. 会的同学请看一下指出错误,不会的同学请先自行脑补 ...

  3. 手把手教你在Windows下使用MinGW编译libav(参考libx264的编入)

    转自:http://www.th7.cn/Program/cp/201407/242762.shtml 手把手教你在Windows下使用MinGW编译libav libav是在Linux下使用纯c语言 ...

  4. 只有20行Javascript代码!手把手教你写一个页面模板引擎

    http://www.toobug.net/article/how_to_design_front_end_template_engine.html http://barretlee.com/webs ...

  5. 手把手教你ranorex_android自动化测试第一个示例

    要说android的自动化,那真是折腾死我了,从早期的monkeyrunner,到后来的robotium,再到最新的uiautomator,各有各的问题,总之性价比都不够高,不太适合我的使用场景.于是 ...

  6. 手把手教你webpack、react和node.js环境配置(上篇)

    很多人刚学习react的时候,往往因为繁琐的配置而头疼,这里我将手把手教大家怎么用webpack配置react和redux的环境,这篇教程包括前端react和后台node整个网站的环境配置,对node ...

  7. 【技术分享】手把手教你使用PowerShell内置的端口扫描器

    [技术分享]手把手教你使用PowerShell内置的端口扫描器 引言 想做端口扫描,NMAP是理想的选择,但是有时候NMAP并不可用.有的时候仅仅是想看一下某个端口是否开放.在这些情况下,PowerS ...

  8. 【转】手把手教你读取Android版微信和手Q的聊天记录(仅作技术研究学习)

    1.引言 特别说明:本文内容仅用于即时通讯技术研究和学习之用,请勿用于非法用途.如本文内容有不妥之处,请联系JackJiang进行处理!   我司有关部门为了获取黑产群的动态,有同事潜伏在大量的黑产群 ...

  9. 周一干货~手把手教你安装 Visual Studio 安卓模拟器

    干货~手把手教你安装 Visual Studio 安卓模拟器 转 http://mini.eastday.com/mobile/171107134734194.html# 今天软妹为大家带来一篇来自M ...

  10. 手把手教你读取Android版微信和手Q的聊天记录(仅作技术研究学习)

    1.引言 特别说明:本文内容仅用于即时通讯技术研究和学习之用,请勿用于非法用途.如本文内容有不妥之处,请联系JackJiang进行处理!   我司有关部门为了获取黑产群的动态,有同事潜伏在大量的黑产群 ...

随机推荐

  1. Linux中常用的监控性能的命令(sar、mpstat,vmstat, iostat,)详解

    Linux中常用的监控性能的命令有: sar:能查看CPU的平均信息,还能查看指定CPU的信息.与mpstat相比,sar能查看CPU历史信息 mpstat:能查看所有CPU的平均信息,还能查看指定C ...

  2. react中自定义antd主题与支持less(第二部)

    自定义主题 首先自定义主题需要修改antd,antd本身也是less写的之后编译成css的,所以当我们需要使用less. 1.yarn add react-app-rewire-less --dev ...

  3. react将HTML字符串解析为HTML标签

    当后台返回的数据是字符串html的话,我们可以利用dangerouslySetInnerHTML属性来把字符串转换成html标签 function showhtml(htmlString){ var ...

  4. HTTP 408 问题 - Koa body parser

    环境描述: 1.nodejs 作为 api 服务器,转发请求给 nginx 2.用 curl 测试,返回 408 找了很久没有找到原因,发现了一篇文章: https://lujunda.cn/2016 ...

  5. 创客系列教程——认识LED灯

    认识LED灯 一.初识LED灯   LED灯是一种能够将电能转化为可见光的固态的半导体器件,它可以直接把电转化为光.LED灯逐步融入到生活中的方方面面:室内外的照明.电子指示牌.酷炫的舞台灯光.车辆的 ...

  6. 【算法】nSum问题

    LeetCode中出现了2sum, 3sum, 4sum的问题,文章给出了一种通用的解法,想法是将n_sum问题转换为(n-1)_sum问题,具体步骤如下: 定义函数sum(n, target),表示 ...

  7. 【刷题-LeetCode】152 Maximum Product Subarray

    Maximum Product Subarray Given an integer array nums, find the contiguous subarray within an array ( ...

  8. 【刷题-PAT】A1111 Online Map (30 分)

    1111 Online Map (30 分) Input our current position and a destination, an online map can recommend sev ...

  9. React/Vue 项目在 GitHub Pages 上部署时资源的路径问题

    GitHub Pages 常被用来部署个人博客,而无论是大名鼎鼎的 Jekyll,还是 Hugo 或者 Hexo,他们都是将我们的文章嵌入模板,发布为静态页面,也就是说,GitHub Pages (G ...

  10. 通俗易懂详解iptables

    防火墙相关概念 从逻辑上讲.防火墙可以大体分为主机防火墙和网络防火墙. 主机防火墙:针对于单个主机进行防护. 网络防火墙:往往处于网络入口或边缘,针对于网络入口进行防护,服务于防火墙背后的本地局域网. ...