嵌入式暨互联大赛作品

pynq apriltag cv2 python的空间识别

前言:本人是一名大学生,并且是第一次写博客。如果有什么疑惑的地方请在评论中说出来,所需要的软件,代码等资源,我会放在百度网盘,CSDN上。链接在最最底下的附录,需要者自取。

关于本章一些疑问:(可以选择先看下面内容,这里先跳过)
1、为什么不适用jupyter来写,而是用xftp进行上传?
答:之前测试过一下jupyter的,发现不能实时显示图像,所以放弃了。

2、为什么用xhell,同样也可以选择用putty?
答:个人喜爱吧,哈哈。其实主要是需要用到xftp,正好一起用了。

3、TCP传输的格式是怎么样的?
答:tag的数量–>tag的id–>四元数相关的–>tag的id–>四元数相关的……。emmm,具体格式是我队友写的,因为processing的代码不是我写的,忘了具体是咋样的,应该你们用不到TCP连接吧,如果万一需要的话,请私信我或者在下方评论。

1、烧录pynq镜像

选择Win32DiskImager来烧录pynq-z1镜像,我这里使用的是pynq-z1,请根据自己的板子选择合适的镜像。
烧录在一张SD卡上,16G或者32G,不要太大,不要太小。自行选择合适大小。
Win32DiskImager烧录pynq-z1

2、安装xshell与xftp并连接pynq的Linux系统

1)下载xshell,官网地址:https://www.netsarang.com/zh/xshell/ 可能会有点慢,需要者可以在百度网盘自取。
2)下载xftp,官网地址:https://www.netsarang.com/zh/xftp/ 可能会有点慢,需要者可以在百度网盘自取。
3)xshell连接pynq在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
经过这些步骤,你已经成功的连接上了pynq的Linux系统
输入

xilinx@pynq:~$ hostname
pynq

出现pynq就表示连接成功了

附加一句,关机命令,请不要直接断电:

sudo halt

3、给pynq连接网络

1)有可上网路由器的,且有网线的

直接用网线将pynq连接到路由器上即可,这个应该有手就行

2)有可上网的笔记本,有网线的

用网线将pynq与笔记本相连接
在电脑上进行设置

注意事项:可能有很多人跟着下面一步一步走,但是会发现电脑之间选项还有点差异,导致进行不了。大家可自行搜索笔记本电脑如何共享网络给其他设备,因为我这里没有这样的问题,所以没有去寻找解决方案。别骂了,别骂了,呜呜呜。

言归正传
在这里插入图片描述
什么,你说你桌面没有网络这个图标,那么看下面,有网络这个图标的请跳过。调出这个页面,应该有手就行了吧!
在这里插入图片描述
回归正传
在这里插入图片描述
在这里插入图片描述
点击确定,然后点击关闭。
然后是点击前面那张图片上的以太网
在这里插入图片描述
在这里插入图片描述
点击确定,再点击确定

测试是否有网络了,转到xshell,输入命令

ping 39.156.69.76

这是百度的IP地址,不能直接ping baidu.com,因为pynq没有域名系统

是否成功了
在这里插入图片描述
出现这样的,就是成功了,然后按ctrl+c中止ping的操作
如果不成功,请先关掉共享,然后再开启。我遇到多次这个问题,是正常的。

4、安装apriltag库

建议切换到管理员用户进行安装,不然可能会出现管理员用户无法导入apriltag的问题,当然也有解决方法。
切换至管理用户命令:

sudo su

然后安装apriltag

pip3 install apriltag

然后就是漫长的等待了,可能会卡住,请不要着急。ctrl+c中断掉,等待pynq冷静下来,然后重复

关于在xilinx用户下安装的这个包,想让管理员用户进行调用,那该怎么办呢?
请看下面,如果是管理员用户安装的请跳过这一段小插曲

root@pynq:/home/xilinx# python3
>>> import apriltag
>>> apriltag
<module 'apriltag' from '/usr/local/lib/python3.6/dist-packages/apriltag.py'>

那么你的apriltag路径就出来了,我这里是已经进行了更改的路径,所以路径会有很大的不同

chown -R root .local

这条命令应该是行不通的,哈哈哈哈,只能说参考参考,因为确实是很大不同,思想就是更改所属组为root,递归更改。

5、代码编写

这次项目的完整代码:https://paste.ubuntu.com/p/JYGRJ7tN6t/

import cv2
import apriltag
from socket import *
from pynq.overlays.base import BaseOverlay
from pynq.lib.video import *
import time
base = BaseOverlay('base.bit')
# 创立TCP套接字,因为我们需要用到另一个pc来进行模型显示
mf_client = socket(AF_INET,SOCK_STREAM)
# 打开摄像头捕获,采用的是USB摄像头
capture = cv2.VideoCapture(0)
print('have open videocapture')
# 设置宽高
capture.set(cv2.CAP_PROP_FRAME_WIDTH, 1280)
capture.set(cv2.CAP_PROP_FRAME_HEIGHT, 720)
# 调用apriltag,识别tag36h11和tag25h9
detector = apriltag.Detector(apriltag.DetectorOptions(families='tag36h11 tag25h9') )
# 相机内参,四个数字,我们用matlab测出的,请自行测试,在windows平台进行的测量
camera_mf_can = [3.679603901027145e+02,4.889721342314712e+02,3.156954083635586e+02,2.686809834925573e+02]
# TCP连接,填写自己的IP地址与端口,端口注意不要与常用端口重复,如22 23端口等
mf_client.connect(('192.xxx.xxx.xxx',8000))
print('have connect server')
# pynq进行hdmi输出
hdmi_out = base.video.hdmi_out
# 为什么设置成640,480,因为720p处理的很慢
Mode = VideoMode(640,480,24)
hdmi_out = base.video.hdmi_out
hdmi_out.configure(Mode,PIXEL_BGR)
hdmi_out.start()
print('hdmi_out have ready')
print('start')
while True:
# 为了测试处理一帧图像,大概需要多长时间
    starttime = time.time() 
# 读取摄像头
    success, frame = capture.read()
    outframe = hdmi_out.newframe()
    frame = cv2.resize(frame,(640,480))
# 灰度化处理
    gray = cv2.cvtColor(frame, cv2.COLOR_RGB2GRAY)
    detections, dimg = detector.detect(gray, return_image=True)  
    overlay = frame // 2 + dimg[:, :, None] // 2
    mf_str_data=(str)( (int) ( len(detections) ) )
    for i, detection in enumerate(detections):
    # 姿态计算
        pose_mtx, e0, e1 = detector.detection_pose(detection,camera_mf_can,2.0)
        # 画出二维码上的立体方框,3.0表示立方体框框的大小,可自己选择性调节
        apriltag._draw_pose(overlay,camera_mf_can,3.0,pose_mtx)
        mf_str_data = mf_str_data + ' ' +((str)((int)(detection.tag_id)))
    outframe[0:480,0:640,:]=overlay
    # 发送数据
    mf_client.send(mf_str_data.encode('gbk'))
    # hdmi显示
    hdmi_out.writeframe(outframe)
    endtime = time.time()
    print('time is '+str(endtime - starttime)+' s')
print('stop')
capture.release()

目前的bug

第一次运行,图像是正常的。等到第二次运行,图片的颜色与位置就会变化。目前还没解决,呜呜呜。

效果图

在这里插入图片描述
图片有点不清楚哈,大概就是在tag上向外画一个立方体框框。😓😓😓

结束语

作者是一名在校大学生,如果觉得本文对你有帮助,如果你愿意打赏一下作者的话,作者在此先感谢了,打赏金额数量你自己拿定。
当然,这个纯属自愿,如果不想打赏,你也可以获取全部资源,我也同样会回答你的问题的。
在这里插入图片描述
在这里插入图片描述

附录

百度网盘:
https://pan.baidu.com/s/1uwKy3XHLLWnSoCMIisD6nA
提取码:3y94

csdn链接:https://download.csdn.net/download/m0_47008865/13131638
(小声BB):csdn没法上传超过1000MB的资源,所以pynq-z1的镜像在csdn的链接上没有。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值