今天拿到了海康威视的摄像头,拿来做目标检测,因为是网线接口,所以必须要用交换机,然后查它的IP地址,然后才可以连接,不能把网线直接连接到主机上,下面是简单的读取摄像头的代码。
import cv2
import numpy as np
url = "rtsp://admin:lingtan666@192.168.0.176:554//Streaming/Channels/1"
cap = cv2.VideoCapture(url)
i = 0
while True:
(ret, frame) = cap.read()
print('ret = ', ret)
# cv2.imwrite('/data/drone_detect/keras-yolo3_original/8.13/biaozhu/' + str(i).zfill(6) + '.jpg' , frame)
i += 1
cv2.imshow("Video", frame)
cv2.waitKey(1)
首先是可以调用摄像头了,然后我直接接进yolo中,检测是没有问题,但是延迟十分严重,有10s左右,还有问题是人会出现闪现的情况,应该都是延迟的问题,应该就是这个问题《使用 RTSCapture 类可以防止帧处理速度小于接收速度而导致花屏或者断流(崩溃)》,然后下面附上代码,就是加入线程,之前也没怎么写过,所以不熟练。只是部分代码,yolo是参考keras版本的yolo。就先记录到这里。
import sys
import argparse
from yolo_xie import YOLO, detect_video
from PIL import Image
import cv2
import os
import time
import numpy as np
from datetime import datetime
timenow = time.strftime('%Y%m%d_%H%M%S')
import socket
os.environ["CUDA_VISIBLE_DEVICES"] = "2"
# python yolo_video_xie.py --input path
import threading
class RTSCapture(cv2.VideoCapture):
"""Real Time Streaming Capture.
"""
_cur_frame = None
_reading = False
@staticmethod
def create(url):
"""这个类必须使用 RTSCapture.create 方法创建,请不要直接实例化""