吾爱破解 - 52pojie.cn

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

查看: 1882|回复: 8
收起左侧

[学习记录] python调用摄像头进行二维码连续扫描,结果保存为excel文件

  [复制链接]
felixfqz 发表于 2022-4-16 21:39
需求:有多张印有二维码的投票卡,需要通过扫描二维码将投票码读取出来,然后保存到excel文件中
代码如下:
[Python] 纯文本查看 复制代码
# encoding:utf-8
'''
所用调试设备:surface pro 6
步骤:
获取图片
识别二维码内容,需要校验是否有重复扫码
保存到excel文档中
'''
import cv2  # opencv库,用于调用摄像头
import pyzbar.pyzbar as pyzbar # 识别二维码
import requests
import re
import json
import random
from threading import Thread    # 多线程
from multiprocessing import Process # 多进程
import time     # 用于代码间的暂停
import datetime     # 用于设定抢购时间
from urllib import parse    # 用于字符进行URL编码和解码
import pandas as pd # 处理数据流


def camera1():  
    '''
    例子:调用摄像头,并且在窗口中显示摄像头拍摄的画面
    ''' 
    camera = cv2.VideoCapture(1)    # 捕捉摄像头,0为surface的前置摄像头,1为后置摄像头,如果要打开本地视频,则输入视频路径
    # ret,frame = camera.read() # 读取摄像头画面
    # print(ret)
    # cv2.imshow('windows',frame)
    # cv2.waitKey(1)  # 帧显示间隔,单位为ms

    fps = camera.get(cv2.CAP_PROP_FPS)  # 获取视频帧率
    size = (int(camera.get(cv2.CAP_PROP_FRAME_WIDTH)),int(camera.get(cv2.CAP_PROP_FRAME_HEIGHT)))   # 获取图像尺寸

    while True:
        ret,frame = camera.read() # 读取摄像头画面,ret为读取结果,成功为
        cv2.imshow('windows',frame) # 视频按帧形式显示
        
        c = cv2.waitKey(1)  # 帧显示间隔,单位为ms
        if c == 27: # 功能:按esc键退出,c得到的是键盘输入的ASCII码,esc键对应的ASCII码是27,c = cv2.waitKey(1)等待输入一个字符,当输入的字符是esc键(对应的ASCII码是27),即当按esc键,执行if然后程序break就退出
            break

    camera.release()    # 释放,表示视频结束了
    cv2.destroyAllWindows() # 关闭所有的窗口

def decode(gray):
    barcodes = pyzbar.decode(gray)  # 识别出来是一个列表list类型
    if barcodes == []:  # 如果没有识别到二维码的话,就会返回空值
        # print('barcodes is ',barcodes,type(barcodes))
        pass
    else:   # 识别出二维码则退出
        for barcode in barcodes:
            barcodeData = barcode.data.decode('utf-8')  # 输出数据类型为str类型
            print(barcodeData)
        return barcodeData

def scanner(file_path):
    camera = cv2.VideoCapture(1)    # 捕捉摄像头,0为surface的前置摄像头,1为后置摄像头,如果要打开本地视频,则输入视频路径
    # ret,frame = camera.read() # 读取摄像头画面
    # print(ret)
    # cv2.imshow('windows',frame)
    # cv2.waitKey(1)  # 帧显示间隔,单位为ms

    fps = camera.get(cv2.CAP_PROP_FPS)  # 获取视频帧率
    size = (int(camera.get(cv2.CAP_PROP_FRAME_WIDTH)),int(camera.get(cv2.CAP_PROP_FRAME_HEIGHT)))   # 获取图像尺寸

    temp = ['内容']   # 列表list类型数据,用于暂存扫码结果,同时用于比对扫码结果是否有重复的
    count = 0   # 用于记录扫码成功个数

    while True:
        
        ret,frame = camera.read() # 读取摄像头画面,ret为读取结果,成功为
        cv2.imshow('windows',frame) # 视频按帧形式显示
        
        # 转为灰度图像
        gray = cv2.cvtColor(frame,cv2.COLOR_BGR2GRAY)

        # 解码
        barcodeData = decode(gray)

        # 比对是否有重复扫描结果
        if barcodeData == None:
            # print('没有识别出二维码,请重试')
            pass
        elif barcodeData in temp:
            print('重复扫描,请扫描下一个二维码')
        else:
            temp.append(barcodeData)
            count+=1
            print('已成功扫描了',count,'个二维码')

        c = cv2.waitKey(100)  # 帧显示间隔,单位为ms,相当于刷新率,控制识别频率
        if c == 27: # 功能:按esc键退出,c得到的是键盘输入的ASCII码,esc键对应的ASCII码是27,c = cv2.waitKey(1)等待输入一个字符,当输入的字符是esc键(对应的ASCII码是27),即当按esc键,执行if然后程序break就退出
            break

    camera.release()    # 释放,表示视频结束了
    cv2.destroyAllWindows() # 关闭所有的窗口
    
    df = pd.DataFrame(temp) # 将列表temp转化为pandas的dataframe数据
    print('-'*25)
    print(df)
    print('-'*25)
    print('本次扫码成功扫描了',count,'个二维码')
    print('-'*25)
    df.to_excel(file_path,sheet_name='code',index=False,header = False)  # 将最终的扫码结果保存为excel表格

# 程序入口
if __name__ == '__main__':
    file_path = r'C:\Users\Felix\Desktop\code.xlsx'     # 扫码结果保存的路径和文件名称
    scanner(file_path)







TODO:增加语音提示,增加窗口显示扫扫描结果
效果视频:
https://www.bilibili.com/video/BV1Q34y1e7ak

免费评分

参与人数 1热心值 +1 收起 理由
sanyuebeichen + 1 热心回复!

查看全部评分

发帖前要善用论坛搜索功能,那里可能会有你要找的答案或者已经有人发布过相同内容了,请勿重复发帖。

pkni1230 发表于 2022-4-17 00:11
这个apk文件是怎么生成的?
sanyuebeichen 发表于 2022-4-17 00:53
话痨司机啊 发表于 2022-4-17 08:15
又学到新东西了,不错不错,爱了爱了,希望以后多处教程,加油
y6428021 发表于 2022-4-17 08:47
看看学习下
11qq... 发表于 2022-4-17 10:08
棒!!!!
头像被屏蔽
xiadongming 发表于 2022-4-17 10:13
提示: 作者被禁止或删除 内容自动屏蔽
king100 发表于 2022-4-17 10:27
学习了,慢慢揣摩
 楼主| felixfqz 发表于 2022-4-17 10:42
pkni1230 发表于 2022-4-17 00:11
这个apk文件是怎么生成的?

apk的文件是别人的,就是不会写apk,所以参考用windows下调用摄像头实现的
您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则

返回列表

RSS订阅|小黑屋|处罚记录|联系我们|吾爱破解 - LCG - LSG ( 京ICP备16042023号 | 京公网安备 11010502030087号 )

GMT+8, 2024-11-25 13:18

Powered by Discuz!

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表