最近发现群里有朋友在问如何实现Nao机器人视频监控,就写下这篇博客,希望能帮助到大家。
直入正题,法国Nao机器人如何实现视频监控,这里提供三种方式,第一种是基于socket传输的,第二种是使用opencv进行显示,第三种是使用pyqt显示的,推荐后两种方式
一、通过socket传输,这个实现比较麻烦,是在nao本体上实现一个socket服务端,每获取一张图片,并通过socket传输出来,PC上实现客户端接收服务端传输过来的图片数据并显示,不推荐使用,可以尝试实现一下,代码是以前的代码片段,写这篇博客时并未进行测试过,如有错误请指出,谢谢
Server:
#!/usr/bin/env python # -*- coding: utf-8 -*- import socket from naoqi import ALProxy import time HOST = '192.168.123.26' PORT = 8000 photoCapture = ALProxy("ALPhotoCapture",HOST,9559) path = '/home/nao/camera/' name = 'photo.jpg' # Configure socket sd = socket.socket(socket.AF_INET, socket.SOCK_STREAM) sd.bind((HOST, PORT)) sd.listen(3) print 'Wait for connecting:' try: conn, addr = sd.accept() except: sd.close() print 'connect successfully:'+str(addr) # receive message try: conn.sendall('ok') except: conn.close() sd.close() while True: photoCapture.takePicture(path, name) fd = open('/home/nao/camera/photo.jpg','rb') img = fd.read() fd.close() img_len = len(img) if img_len == 0: continue # sd.sendall(str(img_len)) count = (img_len//13000) + 1 # print count for i in range(count): if i < count - 1: conn.send(img[i*13000:(i+1)*13000]) elif i == count - 1: conn.send(img[i*13000:]+'end') # close connection conn.close() sd.close()