代码拉取完成,页面将自动刷新
import cv2
import subprocess as sp
import darknet
rtmpUrl = 'rtmp://127.0.0.1:1935/live/'
# cap = cv2.VideoCapture('rtsp://192.168.11.70:554/12')
cap = cv2.VideoCapture('test.MTS')
# cap = cv2.VideoCapture('http://lib.xst.io/files/uav-video/10%E6%9C%88DJI_0059.mp4')
# 检测是否打开视频流
print(cap.isOpened())
# 视频属性
size = (int(cap.get(cv2.CAP_PROP_FRAME_WIDTH)), int(cap.get(cv2.CAP_PROP_FRAME_HEIGHT)))
sizeStr = str(size[0]) + 'x' + str(size[1])
fps = cap.get(cv2.CAP_PROP_FPS) # 30p/self
fps = 20 # 30p/self
fps = int(fps)
hz = int(1000.0 / fps)
print('size:'+ sizeStr + ' fps:' + str(fps) + ' hz:' + str(hz))
#定义编码格式mpge-4
fourcc = cv2.VideoWriter_fourcc('M', 'P', '4', '2')
#定义视频文件输入对象
outVideo = cv2.VideoWriter('saveDir.avi',fourcc,24,size)
frameNum = 1
# 管道输出 ffmpeg推送rtmp 重点 : 通过管道 共享数据的方式
command = ['ffmpeg.exe',
'-y',
'-f', 'rawvideo',
'-use_wallclock_as_timestamps', '1',
'-vcodec','rawvideo',
'-pix_fmt', 'bgr24',
'-s', sizeStr,
'-r', str(fps),
'-i', '-',
# '-c:v', 'libx264',
# '-pix_fmt', 'yuv420p',
# '-preset', 'ultrafast',
'-f', 'flv',
rtmpUrl]
# pipe = sp.Popen(command, stdout = sp.PIPE, bufsize=10**8)
pipe = sp.Popen(command, stdin=sp.PIPE) #,shell=False
# pipe.stdin.write(frame.tostring())
while(cap.isOpened()):
ret,frame = cap.read()
# print(frameNum)
frameNum = frameNum + 1
# cv2.imshow('frame',frame)
# 视频文件保存
# outVideo.write(frame)
cv2.imwrite("temp.jpg", frame)
if frameNum%20 == 0 :
pipe.stdin.write(darknet.performDetect2("temp.jpg",weightPath='yolov3-tiny-obj_6000.weights', metaPath="data/obj.data", configPath="cfg/yolov3-tiny-obj.cfg").tostring()) # 存入管道
else:
# 存入管道
pipe.stdin.write(frame.tostring())
cap.release()
outVideo.release()
cv2.destroyAllWindows()
此处可能存在不合适展示的内容,页面不予展示。您可通过相关编辑功能自查并修改。
如您确认内容无涉及 不当用语 / 纯广告导流 / 暴力 / 低俗色情 / 侵权 / 盗版 / 虚假 / 无价值内容或违法国家有关法律法规的内容,可点击提交进行申诉,我们将尽快为您处理。