【发布时间】:2017-02-09 12:26:47
【问题描述】:
我想线程化两个函数,第一个函数流式传输视频并将帧传递给第二个函数,第二个函数通过光学字符识别读取帧并将帧转换为文本。如何将帧从第一个线程函数传递到第二个线程函数?
我已经做了什么,第一个函数将视频帧保存到本地文件“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()
【问题讨论】:
-
感谢您的回答,您发布的链接非常有用。但我的主要问题是当视频流功能与阅读功能出现很大延迟时,所以我决定使用多处理来同时分别运行这两个功能。但是我不知道如何将视频帧从一个函数传递到另一个函数以供在单独进程中读取。
标签: python multithreading