Я использую CV2 (OpenCV) для Python и библиотеки Pyglet Python для создания небольшого приложения, которое будет отображать живое видео с веб-камеры и накладывать текст или статические изображения. Я уже сделал приложение с CV2, которое просто отображает изображение с веб-камеры в кадре, но теперь я хотел бы получить этот кадр в окне pyglet.
Вот что я пока собрал:
import pyglet
from pyglet.window import key
import cv2
import numpy
window = pyglet.window.Window()
camera=cv2.VideoCapture(0)
def getCamFrame(color,camera):
retval,frame=camera.read()
if not color:
frame=cv2.cvtColor(frame,cv2.COLOR_BGR2RGB)
frame=numpy.rot90(frame)
return frame
frame=getCamFrame(True,camera)
video = pyglet.resource.media(frame, streaming=True)
@window.event
def on_key_press(symbol, modifiers):
if symbol == key.ESCAPE:
print 'Application Exited with Key Press'
window.close()
@window.event
def on_draw():
window.clear()
video.blit(10,10)
pyglet.app.run()
При запуске получаю следующую ошибку:
Traceback, line 20 in <module>
video = pyglet.resource.media(frame, streaming=True)
TypeError: unhashable type: 'numpy.ndarray'
Я также открыт для других вариантов, которые позволили бы мне отображать текст поверх моего живого видео. Первоначально я использовал pygame, но в конце концов мне понадобится поддержка нескольких мониторов, поэтому я использую pyglet.