Py学习  »  Python

从"前端"Processing 到"后端"Python

UDM的神仙们 • 4 年前 • 132 次点击  

最近的一些小项目,需要在一些processing上面接入一些额外的硬件,比如摄像头的识别定位,激光雷达,手势控制,当然这些processing也是有一些自带的库可以处理,不过如果再把大量CV的判断,硬件串口给一起集成,还是会有较大的延迟。特别是processing的串口库,个人感觉并不非常高效。同时processing的编程机制,导致在等待硬件串口,不能保持稳定的帧率。

 

leap motion-processing-LED灯带的case,可以感觉到有明显的延迟


为了避免这种情况,当然是专业的事情交给专业的工具,模块化处理功能,再通过接口进行拼接即可。

 

就以python到processing为例,因为processing是支持Client的,那么就可以直接通过socket进行通信了,这个就好像一个网页的前后端一样,前端的网页 - processing 和后端的服务器 - 本地server。关于什么是socket,这个可以自行查询资料,展开说那就是另外一个大坑。

不用担心,代码还是很简单的,注意就是保证端口的一致,具体操作起来甚至感觉比串口还要容易。

 

Processing端

myClient.write("Hi there");  发送

inString = myClient.readString();  读取回报

import processing.net.*; Client myClient; int clicks;String inString;void setup() {   // 连接到本地机器 5204端口 要保证端口一致  myClient = new Client(this, "127.0.  0.1", 5204);   // Say hello  , 向后端发送  myClient.write("Hi there");} void mouseReleased() {  // 记录点击次数  clicks++;  // 向后端发送按键次数  myClient.write("Mouse pressed " + clicks + " times.\n");  //读取后端回报消息  inString = myClient.readString();   println(inString); }void draw() {   // Change the background if the mouse is pressed  if (mousePressed) {    background(255);  } else {    background(0);  }}

 Python端

client_data = conn.recv(1024).decode() 接受消息

conn.sendall(recall.encode())   发送消息

import socketip_port = ('127.0.0.1', 5204)sk = socket.socket()            # 创建套接字sk.bind(ip_port)                # 绑定服务地址sk.listen(5)                    # 监听连接请求print('启动socket服务,等待客户端连接...')conn, address = sk.accept()     # 等待连接,此处自动阻塞while True:     # 一个死循环,直到客户端发送‘exit’的信号,才关闭连接


    
    client_data = conn.recv(1024).decode()      # 接收信息    if client_data == "exit":       # 判断是否退出连接        exit("通信结束")    print("来自%s的客户端向你发来信息:%s" % (address, client_data))    recall="Recall data = %s" % client_data    conn.sendall(recall.encode())    # 回馈信息给客户端conn.close()    # 关闭连接

具体实际效果,完成点击鼠标动作的回传


这只是一个例子,显然不至于python,其他各种语言也都是可以实现的,选择专业的环境,做专业的事!

 

这种的通信方式,不仅可以完成本地的数据的调取,其实也可以完成远程的数据传输。通过把“前端” “后端”的切分,让processing更加专注于视觉效果的展示,同时让代码模块化,不熟悉的processing的工程师们也是可以加入进来一起共同完成项目了。这样就不用买那些贵贵的商业软件了。

 


回复 py2ps ,获取完整案例,如果你对今天的内容感兴趣或者有疑问,欢迎在公众号后台回复“UDM Club”,加入群聊和我们交流




Python社区是高质量的Python/Django开发社区
本文地址:http://www.python88.com/topic/54913
 
132 次点击