求助,wechat_qrcode_WeChatQRCode过于灵敏和自动聚焦放大问题

bleach210 2023-08-10 14:26:55

大家好,我用Python编写了一个启用摄像头扫码的功能,使用了wechat的库进行扫码识别,但在实际测试的过程中发现,当二维码放在镜头下,一张二维码经常会被连续扫码两次,出现两个一样的扫码结果,这种情况如何解决。
另外一个问题就是,想让电脑上的摄像头能够实现和手机微信里的扫一扫,有绿线从上到下然后自动聚焦并放大二维码的功能。如何实现?

部分代码如下:

qrcode_detector = cv2.wechat_qrcode_WeChatQRCode( # 创建二维码检测器
"./model/detect.prototxt",
"./model/detect.caffemodel",
"./model/sr.prototxt",
"./model/sr.caffemodel",
)

while True:
#start_time = time.time() # 用于计算用时
ret, image = cap.read() # 读取帧

result = qrcode_detector.detectAndDecode(image) #

if len(result[0]) > 0: # 如果检测到二维码
text = result[0] # 获取二维码文本(链接或文字)
text = ''.join(str(i) for i in text)

print(text)

 

 

 

...全文
1107 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
Mr Dinosaur 2023-08-11
  • 打赏
  • 举报
回复

问题2:实现电脑摄像头扫描类似手机微信的功能

要实现类似手机微信的扫码体验,你需要实现以下功能:

自动聚焦:使用OpenCV的cv2.VideoCapture对象,你可以调用cap.set(cv2.CAP_PROP_AUTOFOCUS, 1)来启用自动对焦。

自动放大:你可以通过调整摄像头的焦距来实现自动放大。这取决于你的摄像头硬件支持的程度。

绿线效果:你可以在扫描时在图像上绘制一个绿色的竖线,模拟手机微信扫码时的绿线效果。

演示代码如下:

import cv2

cap = cv2.VideoCapture(0)

启用自动聚焦

cap.set(cv2.CAP_PROP_AUTOFOCUS, 1)

while True:
ret, image = cap.read()

# 在图像上绘制绿线
cv2.line(image, (image.shape[1] // 2, 0), (image.shape[1] // 2, image.shape[0]), (0, 255, 0), 2)

cv2.imshow('Scanner', image)
key = cv2.waitKey(1)
if key == 27:  # 按下ESC键退出循环
    break

cap.release()
cv2.destroyAllWindows()

bleach210 2023-08-11
  • 举报
回复
@Mr Dinosaur 我是想说能不能实现类似微信扫一扫的功能,就是如果二维码比较小或者比较远,微信扫码的时候,摄像头会自动放大图像来拉近二维码,然后扫码成功,而且微信的绿线是一直在从上到下循环滚动扫描,谢谢。
Mr Dinosaur 2023-08-11
  • 举报
回复
@bleach210 你所说的这种实现效果可能就比较复杂一些了,我只能为你提供一个基本的框架和思路 这个框架将使用Python的OpenCV库来处理图像,以及Tkinter库来构建简单的GUI界面。 pip install opencv-python opencv-python-headless pillow 演示代码: import cv2 import tkinter as tk from tkinter import ttk from PIL import Image, ImageTk # 创建主窗口 root = tk.Tk() root.title("QR Code Scanner") # 创建摄像头捕获对象 cap = cv2.VideoCapture(0) # 创建标签用于显示摄像头图像 video_label = ttk.Label(root) video_label.pack() # 绿线扫描参数 line_position = 0 line_color = (0, 255, 0) # 绿色 line_thickness = 2 def update_frame(): global line_position ret, frame = cap.read() # 读取帧 if ret: # 在图像上绘制绿色扫描线 cv2.line(frame, (0, line_position), (frame.shape[1], line_position), line_color, line_thickness) # 更新扫描线位置 line_position = (line_position + 5) % frame.shape[0] # 循环滚动 # 将OpenCV图像转换为Tkinter PhotoImage img = cv2.cvtColor(frame, cv2.COLOR_BGR2RGB) img = Image.fromarray(img) img = ImageTk.PhotoImage(image=img) video_label.img = img video_label.config(image=img) root.after(10, update_frame) # 启动图像更新循环 update_frame() root.mainloop() # 释放摄像头资源 cap.release()
Mr Dinosaur 2023-08-11
  • 打赏
  • 举报
回复 1

问题1:二维码被连续扫码两次的解决方法

这种情况可能是由于视频帧连续捕获到的图像微小变化引起的。你可以通过引入一个冷却时间来解决这个问题,确保每次检测到的二维码之间有一段时间的间隔。

你可以使用Python的time模块来实现冷却时间。在每次成功检测到二维码后,记录当前时间,然后在下一次检测之前检查一下时间间隔是否足够。

演示代码如下:
import time

在循环内部

if len(result[0]) > 0: # 如果检测到二维码
current_time = time.time()
if current_time - last_detection_time > cooldown_duration: # 检查是否过了冷却时间
text = result[0] # 获取二维码文本(链接或文字)
text = ''.join(str(i) for i in text)
print(text)
last_detection_time = current_time

bleach210 2023-08-11
  • 举报
回复
@Mr Dinosaur 非常感谢,此问题已解决,我将间隔设置为了0.5秒,如果一直放着超过这个时间才会重复扫码。再次感谢。
打开链接下载源码: https://pan.quark.cn/s/a4b39357ea24 QT框架是由Qt公司设计的一种跨平台C++图形用户界面应用程序开发工具包,该框架被广泛地应用于桌面电脑、移动设备以及嵌入式系统等领域。QTableView作为QT框架中的一个核心组件,其主要功能是用于展示表格形式的数据,并且常常与QAbstractItemModel或QSqlTableModel等模型类协同工作。在QTableView中嵌入自定义组件,例如按钮,能够实现更加多样化的用户交互功能。 在QT框架环境下,若想在QTableView的一列中嵌入两个按钮,我们需要掌握以下几个关键的技术要点: 1. **QTableView**:QTableView是QTableView类的一个实例,它提供了一个二维的表格视图界面,可以用来展示和编辑模型中的数据。QTableView能够显示由QAbstractItemModel子类所提供的数据,例如QStandardItemModel或QAbstractTableModel等。 2. **QTableWidgetItem**:在QTableView中,QTableWidgetItem是构成表格单元格的基本对象,它用于表示表格中每一行每一列的数据。在默认情况下,QTableView仅能展示文本信息,但通过继承QTableWidgetItem并重新绘制,我们可以实现自定义的内容,比如嵌入按钮。 3. **自定义视图项**:若要在单元格内部嵌入两个按钮,我们需要开发一个自定义的QTableWidgetItem子类,该子类中包含两个QPushButton。这个子类需要重写paintEvent()方法以绘制按钮,并且实现必要的信号和槽机制来处理按...
内容概要:本文系统研究了LLC谐振变换器的变频移相混合控制模型,并基于Simulink平台进行了完整的仿真实现。文章首先阐述了LLC谐振变换器在高频高效电源转换中的工作原理与技术优势,重点提出了一种融合变频控制与移相控制的混合调控策略,旨在拓宽输出调节范围并提升系统的动态响应能力与运行效率。通过建立精确的系统数学模型,设计了复合控制框图,并在Simulink中搭建仿真系统,全面验证了该控制策略在不同负载条件和输入电压波动下的稳定性、效率表现及软开关实现能力。仿真结果表明,所提出的混合控制方法能有效降低开关损耗,提高能量转换效率,具备良好的工程应用前景。; 适合人群:具备电力电子技术、自动控制理论基础,熟悉Simulink仿真环境,从事高频电源变换器、谐振变换器设计与优化的研究生、科研人员及电力电子领域工程技术人员。; 使用场景及目标:①用于高性能LLC谐振变换器控制系统的设计与动态性能优化;②为软开关技术在电力电子变换器中的应用提供仿真验证平台;③支撑相关课题的科研论文撰写、项目开发与创新方案验证。; 阅读建议:建议读者结合Simulink仿真模型文件进行同步操作,深入理解变频与移相控制的协调机制、控制环路设计及关键参数整定方法,重点关注软开关实现条件与系统效率优化路径,以促进理论研究向实际工程应用的转化。

5,483

社区成员

发帖
与我相关
我的任务
社区描述
《深度学习计算机视觉实战》和《学习OpenCV4:基于Python的算法实战》作者,喜欢深度学习、计算机视觉、OpenCV、无人驾驶、算法、C++/Python编程及其提升。
opencv计算机视觉深度学习 个人社区 广东省·珠海市
社区管理员
  • 编程大师兄
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧