GStreamer 警告:无法查询视频位置:状态=0,值=-1,持续时间=-1

Posted

技术标签:

【中文标题】GStreamer 警告:无法查询视频位置:状态=0,值=-1,持续时间=-1【英文标题】:GStreamer warning: Cannot query video position: status=0, value=-1, duration=-1 【发布时间】:2020-11-15 09:08:23 【问题描述】:

我正在使用 OpenCV 包和 face_recognition 包来检测笔记本电脑网络摄像头上的人脸。

每当我运行它时,代码运行良好,但我遇到了相同的 GStreamer 错误。

from imutils.video import VideoStream
import face_recognition
import pickle
import argparse
import time
import cv2
import imutils

ap = argparse.ArgumentParser()
ap.add_argument("-o", "--output", type=str, help="path to output video")
ap.add_argument("-y", "--display", type=int, default=1,
                help="0 to prevent display of frames to screen")
ap.add_argument("-d", "--detection", default="hog",
                type=str, help="Detection method (hog/cnn")
args = vars(ap.parse_args())


print("[INFO] loading encodings...")

data = pickle.load(open("encodings.p", "rb"))

print("[INFO] starting video stream...")
vs = VideoStream().start()
writer = None
time.sleep(3)

while True:

    frame = vs.read()

    rgb = cv2.cvtColor(frame, cv2.COLOR_BGR2RGB)
    rgb = imutils.resize(frame, width=750)
    r = frame.shape[1] / float(rgb.shape[1])

    boxes = face_recognition.face_locations(rgb, model=args["detection"])
    encodings = face_recognition.face_encodings(rgb, boxes)

    for encoding, locations in zip(encodings, boxes):
        matches = face_recognition.compare_faces(data["encodings"], encoding)
        name = "Unknown"
        names = 

        if True in matches:
            ids = [i for (i, b) in enumerate(matches) if b]
            for i in ids:
                name = data["names"][i]
                names[name] = names.get(name, 0) + 1

            name = max(names, key=names.get)

        for (top, right, bottom, left) in boxes:

            top = int(top * r)
            right = int(right * r)
            bottom = int(bottom * r)
            left = int(left * r)

            cv2.rectangle(frame, (left, top), (right, bottom), (255, 0, 0), 3)
            y = top - 15 if top - 15 > 15 else top + 15
            cv2.putText(frame, name, (left, y),
                        cv2.FONT_HERSHEY_SIMPLEX, 0.75, (255, 0, 0), 2)

    if writer is None and args["output"] is not None:
        fourcc = cv2.VideoWriter_fourcc(*"MJPG")
        writer = cv2.VideoWriter(
            args["output"], fourcc, 20, (frame.shape[1], frame.shape[2]), True)

    if writer is not None:
        writer.write(frame)

    if args["display"] == 1:
        cv2.imshow("frame", frame)
        key = cv2.waitKey(1)

        if key == ord("q"):
            break

cv2.destroyAllWindows()
vs.stop()

if writer is not None:
    writer.release()

我找不到任何问题,但我总是收到此错误:

[ WARN:0] global /home/azazel/opencv/modules/videoio/src/cap_gstreamer.cpp (935) open OpenCV | GStreamer warning: Cannot query video position: status=0, value=-1, duration=-1

摄像头仍然显示,面部识别功能正常,但该错误表示什么?我该如何解决?

【问题讨论】:

有与此相关的更新吗? 【参考方案1】:

这是尝试将 Gstreamer 与 OpenCV 一起使用的错误。在https://github.com/opencv/opencv/issues/10324 和https://github.com/opencv/opencv/pull/14834 中提到(在第二个链接中修复)

本质上,这是由于 Gstreamer 读取帧的方式和 OpenCV 跟踪视频帧的方式而出现的问题。我认为值得尝试添加这行代码并重新构建 OpenCV 以查看它是否解决了问题。

【讨论】:

虽然此链接可以提供问题的答案,但有必要将所有需要的信息添加到答案中,如果链接的内容被时间删除,您的答案应该仍然提供信息。 正如@Ruli 所说,您应该将所有相关信息直接添加到您的帖子中,以防这些链接失效。

以上是关于GStreamer 警告:无法查询视频位置:状态=0,值=-1,持续时间=-1的主要内容,如果未能解决你的问题,请参考以下文章

将管道设置为播放状态后,Gstreamer 回调未命中

gstreamer视频对话需要经过网络吗

Gstreamer 无法通过 rtspsrc 播放音频

Raspberry Pi 上的 GStreamer 全高清视频 RTP 流

gstreamer 仅播放视频

React-Apollo - 查询 - renderProp:反应警告:无法对未安装的组件执行反应状态更新