You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Python QR扫码器未检测到码5秒退出、检测后等待处理完成再退出的实现问题

二维码扫描脚本超时逻辑修复方案

问题根因

你当前的逻辑是主进程不感知子进程状态,等待5秒后直接强制终止子进程,所以即便已经识别到二维码进入处理流程,也会被打断。我们可以通过多进程的Event通信机制实现状态同步,让主进程感知到子进程已经进入处理流程,就不再执行强制终止逻辑,等待子进程处理完成后自然退出。

修复后完整代码

import cv2
import numpy as np
from pyzbar.pyzbar import decode
from multiprocessing import Process, Event
import time

def decoder(image, scan_success_event):
    gray_img = cv2.cvtColor(image,0)
    barcode = decode(gray_img)
    
    for obj in barcode:
        # 识别到二维码,第一时间通知主进程取消超时终止逻辑
        scan_success_event.set()
        points = obj.polygon
        (x,y,w,h) = obj.rect
        pts = np.array(points, np.int32)
        pts = pts.reshape((-1, 1, 2))        
        barcodeData = obj.data.decode("utf-8")
        barcodeType = obj.type
        string = str(barcodeData)
        cv2.destroyAllWindows()
        # 替换为你自己的processMyQRCode处理逻辑
        i = 0
        while i < 10:
            print("processing code for " + str(i) + " seconds")
            i += 1
            time.sleep(1)
        
        print(string + " is processed")
        exit()

def open_scanner(scan_success_event):
    # 树莓派运行时删除cv2.CAP_DSHOW参数
    cap = cv2.VideoCapture(0 , cv2.CAP_DSHOW)
    while True:
        ret, frame = cap.read()
        decoder(frame, scan_success_event)
        cv2.imshow('My Title', frame)
        code = cv2.waitKey(1)
        if code == ord('q'):
            exit()

if __name__ == '__main__':
    # 初始化扫码成功事件作为进程间通信标记
    scan_success = Event()
    action_process = Process(target=open_scanner, args=(scan_success,))
    action_process.start()
    # 等待5秒扫码窗口期
    action_process.join(timeout=5)
    # 仅未扫码成功的场景下才终止进程,已扫码成功则等待处理完成后自然退出
    if not scan_success.is_set():
        action_process.terminate()
    else:
        action_process.join()

核心修改点

  • 导入多进程的Event类作为进程间通信的信号标记
  • 识别到二维码后第一时间触发Event信号,告知主进程无需执行超时终止逻辑
  • 主进程等待5秒后先检查信号状态,未收到信号说明无二维码,直接终止进程;收到信号则持续等待子进程处理完成后再退出

内容的提问来源于stack exchange,提问作者lennert_h

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.25 00:36:01