我一直在做这个项目,检测二维码,出勤,并在sql数据库中输出结果,到目前为止,我已经完成了所有工作
问题是,当检测到一个二维码、解码并完成上述所有过程时,我实际上希望帧关闭。摄像机工作,帧显示,但检测二维码时速度非常慢
实际发生的情况是,在框架不断打开并检测到QR码后,它实际上会记录多个(大约15个)QR实例,大约2秒钟后被检测到。此外,帧仍然向上,我仍然可以检测图像
只有在按下waitkey(27)或“Esc”后,框架才会关闭
所以我实际上在寻找两件事:
以下是完整的代码供参考:
import cv2
import os
import csv
import sqlite3
import vobject
from datetime import datetime
import numpy as np
from pyzbar import pyzbar
path = 'qr-codes'
images = []
classNames = []
lists = os.listdir(path)
for cl in lists:
curImage = cv2.imread(f'{path}/{cl}')
images.append(curImage)
classNames.append(os.path.splitext(cl)[0])
def main():
camera = cv2.VideoCapture(0)
ret, frame = camera.read()
while ret:
ret, frame = camera.read()
recognizer = parse_vcard(frame)
win_name = 'Face and QR Detection'
cv2.imshow(win_name, recognizer)
if cv2.waitKey(1) & 0xFF == 27:
break
camera.release()
cv2.destroyAllWindows()
def parse_vcard(frame):
barcodes = pyzbar.decode(frame)
for barcode in barcodes:
x, y, w, h = barcode.rect
cv2.rectangle(frame, (x, y),(x+w, y+h), (0, 255, 0), 2)
mydata = barcode.data.decode('utf-8')
vcard = vobject.readOne(mydata)
make_attendence(vcard)
return frame
def make_attendence(vcard):
name = str(vcard.contents['n'][0].value)
# print(type(Employee.name))
profession = str(vcard.contents['title'][0].value)
now = datetime.now()
date = datetime.date(now)
attendance_time = now.strftime('%H:%M:%S')
leave_time = '21:00:00'
connection = sqlite3.connect('employee.db')
conn = connection.cursor()
# conn.execute("""CREATE TABLE employees (
# name text,
# profission text,
# date date,
# attendance_time time,
# leave_time time
# )""")
conn.execute("INSERT INTO employees VALUES \
(:name, :profession, :date, :attendance_time, :leave_time)", {
'name': name,
'profession': profession,
'date': date,
'attendance_time': attendance_time,
'leave_time': leave_time})
connection.commit()
connection.close()
if __name__ == '__main__':
main()
不要为您拍摄的每个二维码和每张照片重新连接到数据库
连接一次。保持联系
imshow窗口是一个窗口。“帧”通常是来自视频的一幅图片/图像的术语。你不能“关闭”一个框架
您可以使用
destroyAllWindows
关闭imshow窗口,也可以使用destroyWindow
关闭单个imshow窗口使用python的“pdb”调试器。使用探查器调查代码的时间开销。如果找不到您喜欢的分析器,请使用
time.perf_counter()
并自己进行测量相关问题 更多 >
编程相关推荐