Python 两个函数的线程

标签 python multithreading

我想线程化两个函数,第一个函数流式传输视频并将帧传递给第二个函数,第二个函数使用光学字符识别读取帧并将帧转换为文本。问题如何将帧从第一个线程函数传递到第二个线程函数?

我已经做了什么,第一个函数将视频帧保存到本地文件“frame.jpg”,同时使用第二个函数从“frame.jpg”读取。是否可以将视频帧定义为全局变量并传递给读取函数?

import cv2
import pytesseract
from multiprocessing import Process

def video_straming():       #Video streaming function, First Function
    vc = cv2.VideoCapture(0)
    cv2.namedWindow("preview")

    if vc.isOpened():
        rval, frame = vc.read()
    else:
        rval = False

    while rval:
        rval, frame = vc.read()
        cv2.imwrite('frame.jpg',frame)
        key = cv2.waitKey(20)
        if key == 27: # exit on ESC
            break
    cv2.destroyWindow("preview")

def reading():  #Reading from frame.jpg function, Second Function
    while:
        frame = cv2.imread('frame.jpg')
        read = Image.fromarray(frame)
        read = pytesseract.image_to_string(read)
        if len(read) > 80:
            break

if __name__ == '__main__':
    video_stream = Process(target=video_streaming)
    video_stream.start()
    frame_read = Process(target=reading)
    frame_read.start()
    video_stream.join()
    frame_read.join()

最佳答案

希望这个答案仍然有用。

我使用 multiprocessing.Pipe() 将视频帧从一个进程传递到另一个进程,并使用 cv2.VideoCapture() 捕获帧并将每个图像写入管道。

导入多重处理

multiprocessing.set_start_method('spawn')

video_outfrompipe, video_intopipe = multiprocessing.Pipe()

vs = multiprocessing.Process(target=VideoSource, args=(video_intopipe))

vs.start()

vc = multiprocessing.Process(target=VideoConsumer, args=(video_outfrompipe))

vc.start()

vs.join()

vc.join()

关于Python 两个函数的线程,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42136714/

相关文章:

python - 使用 .groupby() 后重命名列的问题

c# - 为什么 performanceCounter 的 NextValue 调用会改变线程关联掩码

c++ - 将手工系统移植到 libcaf

c - flock() 的范围是什么?

ios - CoreData 异步获取导致并发调试器错误

java - 创建一个类以从 Java 中的另一个类调用其 notify()

python - 使用 python 正则表达式的可变长度流记录?

python csv复制列

python - 更改 models.py 中属性的数据类型后,Django 迁移未应用于 Postgres

python - 像这样将上下文注入(inject) eventlet 线程安全吗?