|
本帖最后由 WhutWP 于 2022-5-19 10:04 编辑
# 从摄像头读流,送入队列
def image_put(q, user, pwd, ip, channel=1):
cap = cv2.VideoCapture("rtsp://%s:%s@%s/%s/%s:%s/main" % (user, pwd, ip, channel, user, pwd))
while True:
q.put(cap.read()[1])
q.get() if q.qsize() > 1 else time.sleep(0.01)
# 从队列取图片,处理,生成视频流
def image_get(q, window_name):
# cv2.namedWindow(window_name, flags=cv2.WINDOW_FREERATIO)
while True:
print(q)
img = q.get()
print(window_name)
frame = img
ret, jpeg = cv2.imencode('.jpg', frame)
frame = jpeg.tobytes()
# 创建生成器推流
yield (b'--frame\r\n'
b'Content-Type: image/jpeg\r\n\r\n' + frame + b'\r\n\r\n')
# cv2.imshow(window_name, img)
# cv2.waitKey(1)
# 设置和启动进程
def run_single_camera():
global queue, camera_ip
user_name, user_pwd, camera_ip = "admin", "adm12345", "192.168.25.64"
mp.set_start_method(method='spawn') # init
m = mp.Manager()
queue = m.Queue(maxsize=2)
processes = [mp.Process(target=image_put, args=(queue, user_name, user_pwd, camera_ip)),
mp.Process(target=image_get, args=(queue, camera_ip))]
for process in processes:
process.start()
for process in processes:
process.join() |
|