专栏首页Python数据科学你知道Jupyter notebook还可以用来做 “视频聊天室” 吗?

你知道Jupyter notebook还可以用来做 “视频聊天室” 吗?

作者:Martin Renou

编译:wLsq

Ipywidgets在Jupyter生态系统中扮演着重要角色,它带来了用户和数据之间的互动。小工具组件是多种的Python对象,通常在Jupyter Notebook或JupyterLab中具有可视化表示:按钮,滑块,文本输入,复选框等。

Ipywidgets链接: https://github.com/jupyter-widgets/ipywidgets

用户无需编写Python代码就可以使用鼠标操作并设置滑块完成交互

表示Python小组件的对象是在服务器端(后端)的Python内核(负责执行Jupyter Notebook中的代码的部分)中工作的。Python对象包含有所有小组件状态的信息。对于滑块小部件,Python对象包含最小值,最大值,以及当前值。这个Python对象(在后端,服务器端)可以与窗口小组件的Javascript模型(在前端,客户端)同步,这个前端模型也包含了有关小组件的相同信息。每次用户在笔记本中显示小组件时,它都会创建一个与Javascript模型保持同步的视图。在上面示例中,您可以看到两个视图是同步的。

ipywidgets不仅仅是一个交互式小组件库,它也是一个功能强大的框架,可以直接创建新的自定义小组件。开发人员可以通过使用widget-cookiecutter项目快速启动包含代码结构和封装的最佳实践的小组件库。

widget-cookiecutter链接: https://github.com/jupyter-widgets/widget-cookiecutter/

已经有许许多多不同的小组件库被创建好了,你可以直接使用mybinder在线试用它们,而无需安装任何东西,下面的一些功能均可以在线操作试用,链接如下:

https://mybinder.org/

bqplot:2-D交互式数据

ipyleaflet:交互式地图

pythreejs:交互式三维场景

ipyvolume:3-D交互式数据可视化和多卷渲染

nglview:三维交互式分子可视化

gmaps:Google地图上的数据可视化

itk-jupyter-widgets:交互式2-D和3-D数据可视化

从ipywidgets 7.4开始,我们有两个新的小组件:音频和视频,可以在Jupyter Notebook和Jupyterlab中轻松进行图像/音频处理。

与Image小组件一样,新的音频和视频小组件在后端和前端之间同步二进制数据。你可以使用自己喜欢的库(OpenCV,scikit-image 等)轻松操作此数据,并动态更新窗口小组件值。

在视频小组件上使用OpenCV进行边缘检测

这两个小组件都是用于创建ipywebrtc库不错的构建块。ipywebrtc由Maarten Breddels创建(Maarten是著名库vaex和ipyvolume的作者)。它利用WebRTC浏览器API的强大功能,允许在Jupyter笔记本内部进行媒体流传输

ipywebrtc的API非常简单:首先,用户将创建我们称之为媒体流的小组件API。媒体流小组件也可以是:

  • 一个WidgetStream小组件,给定任何输入小组件
  • 一个VideoStream小组件,给定一个视频小组件作为输入
  • 一个ImageStream小组件,给定一个图像小组件作为输入
  • 一个AudioStream小组件,给定一个音频小部件作为输入
  • 一个CameraStream小组件,它为用户的网络摄像头创建视频/音频流

使用媒体流小组件,你可以:

  • 使用VideoRecorder小组件录制电影
  • 使用ImageRecorder小部件拍摄快照
  • 使用AudioRecorder小部件录制音频
  • 使用简单的聊天功能将其流式传输到同级

至于其他小部件库,只需点击此链接即可立即试用。你将能够尝试所有这些工作流程。

https://mybinder.org/v2/gh/maartenbreddels/ipywebrtc/master?filepath=docs/source

假设你想使用计算机上的摄像头动态地执行图像处理,并运行人脸识别,边缘检测或任何其他奇特的算法。使用ipywebrtc实现起来非常简单。你需要做的就是创建一个CameraStream小组件的实例,在摄像头视频流作为输入的情况下创建一个ImageRecorder,并实现处理图像的回调(例如使用scikit-image)。

使用CameraStream的快照创建ImageRecorder,并使用scikit-image动态处理图像

ipywebrtc的另一个不错的功能是能够从任何小组件创建媒体小组件。这意味着你可以轻松地从您喜欢的小组件库中记录图像和视频,以进行二维或三维数据可视化(此处为ipyvolume)。

使用ipyvolume小组件作为输入创建WidgetStream,并使用VideoRecorder录制视频

一旦你使用了库的这些不错功能,你就可以下载你创建的视频/图像。或者,你可以使用聊天功能直接共享它们。此功能将聊天室名称和你要共享的流(默认为CameraStream)作为输入,并允许您将Jupyter Notebook转换为会议室!

在PyPairs演讲期间,使用ipywebrtc创建的聊天室

Github上制作这些图像的示例: https://github.com/QuantStack/quantstack-talks/tree/master/2018-11-14-PyParis-widgets/notebooks

关于作者

作者名字是Martin Renou,是QuantStack的科学软件工程师。加入QuantStack之前,在SUPAERO学习。曾在巴黎的Logilab和剑桥的Enthought工作过。作为QuantStack的开源开发人员,参与了各种项目,从xsimd和xtensor在C ++到ipyleaflet和ipywebrtc在Python和Javascript中。

本文分享自微信公众号 - Python数据科学(Python_Spiderman)

原文出处及转载信息见文内详细说明,如有侵权,请联系 yunjia_community@tencent.com 删除。

原始发表时间:2018-11-22

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • 向Excel说再见,神级编辑器统一表格与Python

    很多开发者说自从有了 Python/Pandas,Excel 都不怎么用了,用它来处理与可视化表格非常快速。但是这样还是有一大缺陷,操作不是可视化的表格,因此对...

    用户2769421
  • GitHub 宝藏项目,编程新手的福利

    特别惭愧的是,虽然我很早就知道 GitHub,但是学会逛 GitHub 的时间特别晚。当时一方面是因为菜,看着这种全是英文的东西难受,不知道该怎么去玩,另一方面...

    用户2769421
  • Python 3.8 即将到来,这是你需要关注的几大新特性

    从事计算机领域工作的读者朋友对 Python 编程语言应该非常熟悉了。这是一门广受好评的动态编程语言,其灵活和语法简易的特点使得这门语言在脚本工具、数据分析、W...

    用户2769421
  • GitHub上如何创建小组?

    比如:在谷歌工作,有开发小组、营销小组、运营小组,     在我所在的开发小组里面有三个人,我们需要访问相同的代码仓库,并且经常需要互相交流。     这个...

    黑泽君
  • 使用人工智能增强人类智能(上)

    来源:Distill 编译:weakish 编者按:本周一,Google Brain的Shan Carter和YC Research的Michael Niels...

    企鹅号小编
  • iOS - MitRegx

    Mitchell
  • 基于 Cesium 的Web三维地球客户端程序开发框架

    MarsGIS for Cesium三维地球框架 是火星科技研发的一个Web三维地图开发平台系统,是火星科技团队成员多年GIS开发和Cesium使用的技术沉淀。...

    用户2180468
  • BeautifulSoup使用find,find_all常见问题汇总

    1.soup.find(class='abc')报错,原因是find和find_all里面都不能直接把class作为参数,改写成如下任意一种就对了: 第一种,给...

    kalifa_lau
  • 用Python做投资-python仿真等价鞅下的收益曲线

    如果我们按照这样的次序下注:1,2,4,8,16,......,2^n.只要有一次获胜,那么我们就从头再来。这里我们可以看出,每次获胜都可以赢得1元钱。因为2^...

    钱塘小甲子
  • 基于ROADM的全光网结构以及什么是CDC-F ROADM?

    近两年来,5G成为全世界的聚焦点,它以高速率、广连接和低时延为特征。无线通信技术已经成就了5G的前两项特征,然而,5G通信的时延与支撑无线基站的光纤网络有关。终...

    hycsystembella

扫码关注云+社区

领取腾讯云代金券