【发布时间】:2020-02-15 05:41:11
【问题描述】:
我正在 google colab 上使用 Mask RCNN 进行与对象检测相关的项目。我有一个视频上传到我的 colab。我想在运行时使用openCV处理它时将它显示为视频。我想做cv2.VideoCapture('FILE_NAME') 在本地机器上做的事情。有什么办法吗?
【问题讨论】:
标签: python opencv computer-vision jupyter google-colaboratory
我正在 google colab 上使用 Mask RCNN 进行与对象检测相关的项目。我有一个视频上传到我的 colab。我想在运行时使用openCV处理它时将它显示为视频。我想做cv2.VideoCapture('FILE_NAME') 在本地机器上做的事情。有什么办法吗?
【问题讨论】:
标签: python opencv computer-vision jupyter google-colaboratory
我找到了方法。但是速度很慢。
from IPython.display import clear_output, Image
import base64
def arrayShow (imageArray):
ret, png = cv2.imencode('.png', imageArray)
encoded = base64.b64encode(png)
return Image(data=encoded.decode('ascii'))
video_capture = cv2.VideoCapture(VIDEO_SOURCE)
while video_capture.isOpened():
success, frame = video_capture.read()
clear_output(wait=True)
img = arrayShow(frame)
display(img)
if cv2.waitKey(1) & 0xFF == ord('q'):
break
代码无法准确播放视频。它只是显示新帧并从输出中删除旧帧。
【讨论】:
我最近遇到了同样的问题。虽然我不相信有一种方法可以像在本地一样显示“实时”视频,但您可以做的是一次渲染一帧并将其显示在笔记本的输出中。
与 OP 的 answer 不同,它不会对图像进行编码,也不会从控制台清除前一帧。
from google.colab.patches import cv2_imshow
import cv2
# Download sample video
!curl -o sample.mp4 https://www.sample-videos.com/video123/mp4/720/big_buck_bunny_720p_1mb.mp4
cap = cv2.VideoCapture('sample.mp4')
while cap.isOpened():
ret, image = cap.read()
if not ret:
break
cv2_imshow(image) # Note cv2_imshow, not cv2.imshow
cv2.waitKey(1) & 0xff
cv2.destroyAllWindows()
cap.release()
这个notebook 可能会有所帮助,或者the code above as a notebook。
【讨论】:
你可以试试:
from google.colab.patches import cv2_imshow
cv2_imshow(img)
【讨论】:
from IPython.display import HTML
from base64 import b64encode
video_path = '/content/drive/MyDrive/Data_proc/ball.mp4'
mp4 = open(video_path, "rb").read()
data_url = "data:video/mp4;base64," + b64encode(mp4).decode()
HTML(f"""
<video width=400 controls><source src="{data_url}" type="video/mp4">
</video>""")
【讨论】:
这是 google colab 上的命令:
ret, frame = input_video.read()
希望能帮到你
【讨论】: