如何用QtPy创建Webcam扫码应用

之前分享了如何用QtPy和Dynamsoft Barcode Reader创建一个简单的桌面应用, 通过加载一张图片来识别条形码。这篇文章要分享如何加上摄像头的支持做实时扫码。

如何用Python和PyQt代码显示Camera视频流

要获取视频流,最简单的方法就是用OpenCV:

pip install opencv-python
用OpenCV来显示视频流的代码很简单,只需要一个无限循环:

import cv2
vc = cv2.VideoCapture(0)
while True:
rval, frame = vc.read()
cv2.imshow("Camera View", frame)
现在要解决的问题就是把OpenCV获取的视频帧数据通过Qt的Widget显示出来。在Qt中,不能使用循环,要用timer:

def init(self):

Create a timer.

    self.timer = QTimer()
    self.timer.timeout.connect(self.nextFrameSlot)

def nextFrameSlot(self):
rval, frame = self.vc.read()
frame = cv2.cvtColor(frame, cv2.COLOR_BGR2RGB)
image = QImage(frame, frame.shape[1], frame.shape[0], QImage.Format_RGB888)
pixmap = QPixmap.fromImage(image)
self.label.setPixmap(pixmap)

    results = dbr.decodeBuffer(frame, 0x3FF | 0x2000000 | 0x4000000 | 0x8000000 | 0x10000000)
    out = ‘‘
    index = 0
    for result in results:
        out += "Index: " + str(index) + "\n"
        out += "Barcode format: " + result[0] + ‘\n‘
        out += "Barcode value: " + result[1] + ‘\n‘
        out += ‘-----------------------------------\n‘
        index += 1

    self.results.setText(out)

这里注意下要把颜色空间从BGR转成RGB再放到QImage中。

创建一个QHBoxLayout来放置两个button:

button_layout = QHBoxLayout()

btnCamera = QPushButton("Open camera")
btnCamera.clicked.connect(self.openCamera)
button_layout.addWidget(btnCamera)

btnCamera = QPushButton("Stop camera")
btnCamera.clicked.connect(self.stopCamera)
button_layout.addWidget(btnCamera)

layout.addLayout(button_layout)
点击button之后触发和停止timer:

def openCamera(self):
self.vc = cv2.VideoCapture(0)

vc.set(5, 30) #set FPS

    self.vc.set(3, 640) #set width
    self.vc.set(4, 480) #set height

    if not self.vc.isOpened():
        msgBox = QMessageBox()
        msgBox.setText("Failed to open camera.")
        msgBox.exec_()
        return

    self.timer.start(1000./24)

def stopCamera(self):
self.timer.stop()
监听关闭事件:

def closeEvent(self, event):

    msg = "Close the app?"
    reply = QMessageBox.question(self, ‘Message‘,
                    msg, QMessageBox.Yes, QMessageBox.No)

    if reply == QMessageBox.Yes:
        event.accept()
        self.stopCamera()
    else:
        event.ignore()

最后运行效果:

原文地址:http://blog.51cto.com/14009535/2348452

时间: 2024-08-30 16:24:06

如何用QtPy创建Webcam扫码应用的相关文章

如何用React, Webcam和JS Barcode SDK创建Web扫码App

这篇文章分享下如何结合React Webcam和Dynamsoft JavaScript Barcode SDK来创建Web扫码App. Web实时扫码 从GitHub上下载react-webcam.js放到React工程中. 打开这个JS文件.在render()函数中添加一个button和canvas: render() { return ( <div id='videoview' width={this.props.width} height={this.props.height}> &l

音乐播放APP初步开发(二)自动登录和 扫码识别设备

在登录页面login.html初次登录时,发送post请求,对返回的数据判断,如果code=0,表示已经登录成功的用户.则将其_id数据设置到类似cookie的全局中去. if(data.code==0){ window.localStorage.setItem("user",data.data._id); // console.log(window.localStorage.getItem("user")); console.log(JSON.stringify(

支付宝支付开发—当面付条码支付和扫码支付

关键字:支付宝 当面付 条码支付 扫码支付 二维码支付 订单查询 退款作者:方倍工作室 本文介绍支付宝中当面付下属的条码支付.扫码支付.订单查询.退款申请的集成开发过程. 本文分为以下五个部分: 条码支付和扫码支付介绍 申请应用 密钥生成及配置 API及SDK集成 条码支付.扫码支付.订单查询.退款申请 一.条码支付及二维码支付介绍 1. 条码支付 条码支付是支付宝给到线下传统行业的一种收款方式.商家使用扫码枪等条码识别设备扫描用户支付宝钱包上的条码/二维码,完成收款.用户仅需出示付款码,所有收

支付宝支付开发——当面付条码支付和扫码支付

关键字:支付宝 当面付 条码支付 扫码支付 二维码支付 订单查询 退款作者:方倍工作室原文: http://www.cnblogs.com/txw1958/p/alipay-f2fpay.html 本文介绍支付宝中当面付下属的条码支付.扫码支付.订单查询.退款申请的集成开发过程. 本文分为以下五个部分: 条码支付和扫码支付介绍 申请应用 密钥生成及配置 API及SDK集成 条码支付.扫码支付.订单查询.退款申请 注: 支付宝支付开发有一定的门槛,如果您愿意为知识付费来节省您宝贵的时间,请直接见底

扫码登录是如何实现的?

网页版微信刚推出时,无数人被它的登录方式惊艳了一下,不需要输入用户名密码,打开手机微信扫一扫,便自动登录.从原理上讲,二维码只能是一段文本的编码,如何用它实现快捷登录的呢? 打开网页版微信,可以看到如下的页面: 微信扫码界面 如果你用我查查.支付宝.新浪微博等软件扫码二维码,你会发现此二维码解析出来是如下的网址: https://login.weixin.qq.com/l/obsbQ-Dzag== 接下来详细介绍一下扫码登录具体的每个步骤: 扫码登录完整流程 ①:用户 A 访问微信网页版,微信服

如何用C代码生成二维码

当下因微信和支付宝等手机应用广泛使用,而基于二维码/一维条码的移动支付,也借助手机移动端席卷全国,使得越来越多的人知道有"二维码"这么一种东西. 对于普通用户而来,一般只知道将自己的二维码展示给别人,别人使用软件识别这个二维码即可完成一定的功能.比如,扫码二维码付款.扫码二维码加微信好友.扫码二维码访问网页.扫码二维码下载app等等.这些个功能,在日常行为中,已经很常见了,但作为程序猿的我们,我们怎么能不知道二维码是如何生成的呢?或者说,我要自己生成一个二维码,除了去网页上找二维码生成

Web应用多账号系统设计及微信扫码登录实现

Web应用多账号系统设计及微信扫码登录实现 1   前言概述 公司对功能测试,性能测试,安全测试等等都做了比较好的自动化后,急需要一个MIS系统来统一管理这些结果及报表. 此MIS系统特点如下: 仅内部人员使用 部署在公网 基于如上特点,显然让公司的人为这样一个内部系统而实现一个完整的账号不太现实,要兼顾隐私性和便捷性的需求,作者想到了使用微信扫码登录来做为身份认证,然后后台管理员审核,这样就可以达到如下的效果: 可以实现无门槛注册(微信扫一扫就完成注册),保证了便捷性 系统对未审核通过的人员进

微信扫码支付+Asp.Net MVC

这里的扫码支付指的是PC网站上面使用微信支付,也就是官方的模式二,网站是Asp.net MVC,整理如下. 一.准备工作 使用的微信API中的统一下单方法,关键的参数是‘公众账号ID(appid)’,‘商户号(mch_id)’和’商户支付密钥(KEY)‘,所以首先要有一个审核过的公众号,并开通支付功能,然后申请商户,通过审核后得到商户号,也就是商户平台的登录名.商户支付密钥是用来签名的,确保url不被篡改.进入商户平台后在API安全中设置,是一个32位的字符串. 有这三个参数后,还有一点要注意的

C#开发微信门户及应用(41)--基于微信开放平台的扫码登录处理

在现今很多网站里面,都使用了微信开放平台的扫码登录认证处理,这样做相当于把身份认证交给较为权威的第三方进行认证,在应用网站里面可以不需要存储用户的密码了.本篇介绍如何基于微信开放平台的扫码进行网站的登陆处理. 1.开放平台的认证 要使用网站的扫码登录处理,就需要先进行微信开放平台帐号的开发者资质认证,提交相关的资料,以及交付每年300元的认证费用. 认证后,建立相关的网站应用后,就有相关的APPID和APPSecret了,这些关键的参数就可以用来获取相关的用户信息了. 网站应用的应用详情界面如下