一个面向webrtc机器人控制的异步库

rtcbot的Python项目详细描述


rtcbot

PyPInpmDocumentation StatusJoin the chat at https://gitter.im/rtcbot/communityTests

rtcbot的目的是提供一组简单的模块,帮助在python中开发远程控制机器人,重点是覆盆子pi。

本文档包括开发机器人的指南,从树莓pi和浏览器之间的基本连接开始,包括 创建一个完全由4G移动连接控制的视频流机器人,一直到一个强大的系统,该系统将复杂的计算实时卸载到桌面PC。

所有的交流都是通过WebRTC, 使用python 3的异步和美妙的aiortc库, 这意味着你的机器人可以通过浏览器和python以低延迟进行控制, 即使它没有连接到您的本地网络。

图书馆是在the documentation中逐件解释的。

See Documentation & Tutorials

安装

pip install rtcbot

示例

本例使用rtcbot将网络摄像头实时传输到浏览器。详情请看the tutorials

将视频流到浏览器的python代码:

fromaiohttpimportwebroutes=web.RouteTableDef()fromrtcbotimportRTCConnection,getRTCBotJS,CVCameracamera=CVCamera()# For this example, we use just one global connectionconn=RTCConnection()conn.video.putSubscription(camera)# Serve the RTCBot javascript library at /rtcbot.js@routes.get("/rtcbot.js")asyncdefrtcbotjs(request):returnweb.Response(content_type="application/javascript",text=getRTCBotJS())# This sets up the connection@routes.post("/connect")asyncdefconnect(request):clientOffer=awaitrequest.json()serverResponse=awaitconn.getLocalDescription(clientOffer)returnweb.json_response(serverResponse)@routes.get("/")asyncdefindex(request):withopen("index.html","r")asf:returnweb.Response(content_type="text/html",text=f.read())asyncdefcleanup(app):awaitconn.close()camera.close()app=web.Application()app.add_routes(routes)app.on_shutdown.append(cleanup)web.run_app(app)

显示视频流的浏览器代码(index.html):

<html><head><title>RTCBot: Video</title><scriptsrc="/rtcbot.js"></script></head><bodystyle="text-align: center;padding-top: 30px;"><videoautoplayplaysinline></video><audioautoplay></audio><p>
      Open the browser's developer tools to see console messages (CTRL+SHIFT+C)
    </p><script>varconn=newrtcbot.RTCConnection();conn.video.subscribe(function(stream){document.querySelector("video").srcObject=stream;});asyncfunctionconnect(){letoffer=awaitconn.getLocalDescription();// POST the information to /connectletresponse=awaitfetch("/connect",{method:"POST",cache:"no-cache",body:JSON.stringify(offer)});awaitconn.setRemoteDescription(awaitresponse.json());console.log("Ready!");}connect();</script></body></html>

开发

要直接使用rtcbot代码,请克隆存储库并安装需求:

pip install -r requirements.txt

然后,您需要执行javascript构建步骤,以准备浏览器代码。此步骤要求在计算机上同时安装makenpm。要构建javascript,请键入:

make js

这将创建由rtcbot.getRTCBotJS()返回的rtcbot/rtcbot.js

在这两个步骤之后,您应该能够成功地导入和使用库。

欢迎加入QQ群-->: 979659372 Python中文网_新手群

推荐PyPI第三方库


热门话题
检查java中两个链表之间的子集   java仅在findViewById()下显示一个ImageButton   在Java Graphics2D中,文本如何在矩形上居中对齐?   java需要一个用于电子表格计算器的正则表达式   ^java中的运算符   java通过一些属性配置文件根据环境动态更改wsdl端点URL   java Ebean/Play框架关系未更新   集合如何将POJO列表转换为Java流中的映射<String,List>?   java为什么JFrame不显示整个图像?   java如何将调用静态导入的泛型方法的结果传递给另一个方法?   迭代器或foreach中的java延迟   需要java socket logback日志接收器   在Java中初始化Map的静态数组   雅加达邮件Java MimeMail:解码后获得额外字符   java为什么这个xmldom解析器不能正确解析rtept、name和cmt标记?   java如何刷新Log4J2中的异步记录器(带中断器)   java使用构建插件pom生成的jar。xml作为同一pom中的依赖项   java基于位置的序列ADT如何在O(1)时间内插入元素?   java ORM实体与DDD实体   Java对象分配