博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
python是如何利用多线进程优化视频应用到的? 原来是这样的 ...
阅读量:5764 次
发布时间:2019-06-18

本文共 1702 字,大约阅读时间需要 5 分钟。

前言

如果要用Python播放视频,或者打开摄像头获取视频流,我们可以用OpenCV Python。但是在视频帧获取的时候同时做一些图像识别和处理,可能会因为耗时多而导致卡顿。一般来说,我们首先会想到把这些工作放入到线程中处理。但是由于Python GIL的存在,用不用线程几乎没有区别。所以要解决这个问题,必须通过多进程。这里分享下使用Dynamsoft Barcode Reader开发Python条形码扫码的例子。

学习从来不是一个人的事情,要有个相互监督的伙伴,工作需要学习python或者有兴趣学习python的伙伴可以私信回复小编“学习”或者评论,留言,点赞 领取全套免费python学习资料、视频()装包

用Python和摄像头打造的桌面条形码扫码应用

安装Dynamsoft Barcode Reader:

pip install dbr

安装OpenCV Python

pip install opencv-python

在主程序中创建一个新的扫码进程和共享内存:

from multiprocessing import Process, Queueframe_queue = Queue(4)finish_queue = Queue(1)dbr_proc = Process(target=dbr_run, args=(        frame_queue, finish_queue))dbr_proc.start()

通过OpenCV不断获取视频帧插入到队列中:

vc = cv2.VideoCapture(0) if vc.isOpened():  # try to get the first frame    rval, frame = vc.read()else:    return windowName = "Barcode Reader"base = 2count = 0while True:    cv2.imshow(windowName, frame)    rval, frame = vc.read()     count %= base    if count == 0:        try:            frame_queue.put_nowait(frame)        except:            try:                while True:                    frame_queue.get_nowait()            except:                pass     count += 1

条形码读取进程不断从队列中拿出数据进行解码:

def dbr_run(frame_queue, finish_queue):    dbr.initLicense(config.license)    while finish_queue.qsize() == 0:        try:            inputframe = frame_queue.get_nowait()            results = dbr.decodeBuffer(inputframe, config.barcodeTypes)            if (len(results) > 0):                print(get_time())                print("Total count: " + str(len(results)))                for result in results:                    print("Type: " + result[0])                    print("Value: " + result[1] + "\n")        except:            pass     dbr.destroy()

转载地址:http://yowux.baihongyu.com/

你可能感兴趣的文章