我想线程两个函数,第一个函数流式传输视频并将帧传递给第二个函数,第二个函数读取带有光学字符识别的帧并将帧转换为文本。如何将帧从第一个线程函数传递到第二个线程函数?
我已经做了什么,第一个函数将视频帧保存到本地文件'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()
发布于 2018-08-06 04:04:57
希望这个答案仍然有一定的用处。
我使用multiprocessing.Pipe()将视频帧从一个进程传递到另一个进程,使用cv2.VideoCapture()捕获帧并将每个图像写入管道。
导入多进程
Multiprocessing.set_start_method(‘产卵’)
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()
https://stackoverflow.com/questions/42136714
复制相似问题