R329-opencv4_contrib——微信扫码引擎

R329-opencv4_contrib——wechat_qrcode

微信的CV团队开源了微信的二维码扫码引擎,并且已经加入到opencv4_contrib模块,今天我们就来试试它。

安装opencv_contrib

前边的教程我们只是安装了opencv的python版本(其实不用安装也可以使用,因为R329的镜像里已经内置了编译好的opencv库的C++版本和python版本,但是版本好像是opencv3),但是今天我们的实验只有opencv是不行的,我们需要先卸载它,然后安装opencv_contrib。

先卸载已经安装的opencv,没有安装的就不用卸载,查看自己是否安装可以用“pip3 list”来查看查看是否有opencv-python
pip3 uninstall opencv-python
然后下载whl包

点击下载

下载后传到R329上,具体方法见以前的博客,然后cd到whl文件所在的文件夹并执行以下命令即可安装
pip3 install opencv_contrib_python-4.5.5.62-cp36-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl
模型下载:

点击下载

具体实现代码

首先新建文件夹,命名成qrcode,再新建一个qrcode.py文件,内容为

#-*- coding: utf-8 -*-
import time
import cv2

cap = cv2.VideoCapture(0)
#设置图像的高
cap.set(3,240)
#设置图像的宽,这里虽然设置的是240但是实际上是320,
cap.set(4,240)
#写入指定设备
f = open('/dev/fb0','wb')

try:
    detector = cv2.wechat_qrcode_WeChatQRCode(
        "detect.prototxt", "detect.caffemodel", "sr.prototxt", "sr.caffemodel")
except:
    print("---------------------------------------------------------------")
    print("Failed to initialize WeChatQRCode.")
    print("Please, download 'detector.*' and 'sr.*' from")
    print("https://github.com/WeChatCV/opencv_3rdparty/tree/wechat_qrcode")
    print("and put them into the current directory.")
    print("---------------------------------------------------------------")
    exit(0)
    
prevstr = ""
while True:
    st = time.time()
    ret,img = cap.read()
    if ret:
        #截取240*240的图像,lcd最大能显示的是240*240个16位像素
        img = img[:,0:240]
        #将灰度图顺时针旋转180度
        img = cv2.rotate(img,cv2.ROTATE_180)
        res, points = detector.detectAndDecode(img)
        for t in res:
            if t != prevstr:
                print(t)
        #转换为16位色彩,(因为lcd是16位显示)
        img = cv2.cvtColor(img,cv2.COLOR_BGR2BGR565)
        cv2.putText(img, "{0}" .format(str(1 / (time.time() - st))), (0, 30), cv2.FONT_HERSHEY_SIMPLEX, 0.5, (255, 0, 255), 1)
        #写入图像的二进制数据
        f.seek(0)
        f.write(bytearray(img))
将下载好的这四个模型文件上传到qrcode文件夹里

在这里插入图片描述

在这里插入图片描述

然后cd到qrcode文件夹,执行
python3 qrcode.py

效果如图所示,无二维码时大概7-8帧,识别到二维码时大概2-3帧,感觉还可以,比K210的那种纯代码识别要好很多。群友说的把caffemodel转化成NCNN模型效率会更高一些,并且已经有人实现,而且在github上开源出来,但是它是用C++写的,我对C++只能说会hello world,我琢磨琢磨,把模型转化一下,然后代码也用C++重构一下,这个效率应该会提高不少,但是不知道要等到什么时候。

在这里插入图片描述

回复777催更

<think>嗯,用户问的是“mv opencv-4.8.0 opencv“mv opencv_contrib-4.8.0 opencv_contrib”这两条命令的意义。我需要先回想一下之前的对话历史。用户之前询问如何在Ubuntu 20.04上编译OpenCV并启用GPU加速,而我提供了详细的步骤,其中第三步是下载源并重命名文件夹。现在用户对这两个mv命令的意义有疑问。 首先,我要确定用户为什么会问这个问题。可能他们在执行这些命令时不太明白为什么要重命名文件夹,或者想了解背后的原因。用户可能是刚接触Linux命令,对mv的用法目的不太清楚,或者他们想确认这样做是否必要,有没有潜在的影响。 接下来,我需要解释这两个mv命令的作用。mv在Linux中是移动或重命名文件目录的命令。这里的情况是,当用户解压OpenCVContrib的源后,解压出来的文件夹名字会带有版本号,比如opencv-4.8.0opencv_contrib-4.8.0。而后续的编译步骤中,cmake命令需要指定这些模块的路径,比如OPENCV_EXTRA_MODULES_PATH=~/opencv_contrib/modules。如果文件夹名字包含版本号,路径就会变得复杂,容易出错。 所以,使用mv命令将文件夹重命名为更简单的名字(opencvopencv_contrib)是为了方便后续操作。这样在输入路径时不需要记住具体的版本号,减少输入错误,也使得脚本或命令更具通用性,即使以后版本升级,只需修改解压后的文件夹名,而不必改动其他配置步骤。 另外,用户可能担心重命名是否会影响编译过程。需要解释这样做的好处是路径更简洁,避免因版本号变化导致的路径错误。同时,这也是常见的做法,让项目管理更清晰,尤其是在多个项目或不同版本共存的情况下,保持目录结构的一致性很重要。 可能用户还有更深层的疑问,比如是否必须这样做,或者是否有其他替代方法。这时候需要说明这是可选的步骤,但强烈推荐,因为简化路径能减少错误,提高效率。如果用户不想重命名,也可以直接使用原始文件夹名,但需要在cmake命令中正确指定路径。 还需要注意用户的使用场景,他们可能是在按照教程操作,但对每个步骤的细节希望有更深入的理解,以确保自己正确执行,避免后续步骤出错。因此,解释清楚每个命令的意义有助于他们更好地掌握整个编译过程,遇到问题时也能更快排查。 总结来说,用户的需求是理解这两个mv命令在编译OpenCV过程中的作用,确保他们明白每个步骤的目的,避免盲目跟随指令。回答时需要强调重命名带来的便利性必要性,以及如何帮助后续步骤顺利进行。</think>这两条命令 `mv opencv-4.8.0 opencv` `mv opencv_contrib-4.8.0 opencv_contrib` 的作用是 **重命名解压后的源文件夹**,目的是简化后续操作路径,避免版本号对编译配置的干扰。以下是详细解释: --- ### **1. 为什么需要重命名?** - **原始文件夹名包含版本号**: 从 GitHub 下载的 OpenCV压缩包解压后,默认生成的文件夹名称会包含版本号(如 `opencv-4.8.0` `opencv_contrib-4.8.0`)。 **问题**:后续配置 CMake 时,路径需要明确指定源目录额外模块目录。如果路径包含版本号,容易因输入错误导致编译失败。 - **重命名后的优势**: 将文件夹名称简化为 `opencv` `opencv_contrib`,可以: 1. **避免路径复杂性**:后续操作无需记忆版本号,直接使用简化的路径。 2. **提高兼容性**:即使未来 OpenCV 版本升级(如 4.9.0),只需替换文件夹内容,无需修改编译脚本中的路径。 --- ### **2. 具体操作解析** - **解压后的原始结构**: ```bash # 解压后生成的文件夹 opencv-4.8.0/ opencv_contrib-4.8.0/ ``` - **执行重命名**: ```bash mv opencv-4.8.0 opencv # 将 opencv-4.8.0 重命名为 opencv mv opencv_contrib-4.8.0 opencv_contrib # 同理 ``` - **重命名后的结构**: ```bash opencv/ # 主源目录 opencv_contrib/ # 额外模块目录 ``` --- ### **3. 对后续编译的影响** 在配置 CMake 时,以下参数直接依赖重命名后的路径: ```bash -D OPENCV_EXTRA_MODULES_PATH=~/opencv_contrib/modules ``` - 如果未重命名,路径需写成: ```bash -D OPENCV_EXTRA_MODULES_PATH=~/opencv_contrib-4.8.0/modules ``` 这会导致: - 路径冗长且容易输入错误。 - 升级 OpenCV 版本时需手动修改所有路径中的版本号。 --- ### **4. 是否可以不重命名?** 可以,但需要确保: 1. 在 CMake 配置时,路径必须严格匹配原始文件夹名称(含版本号)。 2. 未来版本更新时需同步修改所有相关路径。 **推荐重命名**:减少人为错误,提高操作一致性。 --- ### **总结** 这两条 `mv` 命令的实质是 **标准化源目录名称**,使得后续编译流程更简洁、通用,避免因版本号变化导致的路径维护问题。
评论 4
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值