我使用htmlPy构建了一个python独立应用。我想要实现的目标是获得包含视频的iFrame。视频应该是网络摄像头正在录制的内容。我目前取得的成就是使用cv2获取视频,并尝试更新" div"使用JPG,并不断重复此过程。
我遇到的问题是当我尝试处理它时使用htmlPy,它在主线程中完成,阻止整个应用程序。当我尝试创建一个新线程时,新线程无法访问GUI(使用javascript,我甚至无法在新线程上执行console.log),无法正确更新GUI。
我必须收集信息并尝试更新HTML的代码如下:
class Camera(htmlPy.Object):
def __init__(self,app):
super(Camera,self).__init__()
self.app = app
return
@htmlPy.Slot()
def send_image_to_html(self,jpeg):
b64 = base64.encodestring(jpeg)
generatedImage = "<html><img src='data:image/png;base64,"+b64 +"'></html>"
#js_to_eval = "$('#camera-div').html("+generatedImage+");}";
js_to_eval = "console.log('Hello from new thread')"
print("Eval: "+js_to_eval)
self.app.evaluate_javascript(js_to_eval)
def setup_camera(self):
vc = cv2.VideoCapture(0)
if vc.isOpened(): # try to get the first frame
rval, frame = vc.read()
else:
rval = False
while rval:
time.sleep(2)
jpeg = cv2.imencode('.png', frame)[1]
self.send_image_to_html(jpeg)
rval, frame = vc.read()
#key = cv2.waitKey(20)
#if key == 27: # exit on ESC
# break
@htmlPy.Slot()
def start_camera(self):
self.setup_camera()
self.app.evaluate_javascript("console.log('Hello from back-end')")
正如您可能已经猜到的那样,我只能看到来自后端的&#34; Hello&#34; console.logs,但是我无法从新线程&#34;中看到&#34; Hello。
我想知道是否有使用Javascript,Jinja2(htmlPy使用jinja2)甚至flash更新GUI的任何解决方法。我的想法是这个小应用程序运行在覆盆子Pi上,所以我试图让事情变得尽可能简单。
此致