最近发现群里有朋友在问如何实现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 timeHOST = '192.168.123.26'
PORT = 8000photoCapture = 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 countfor 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()

Client:

#!/usr/bin/env python
# -*- coding: utf-8 -*-  def thread_func():data= ""temp = 0while True:buf = sd.recv(13010)buf_len = len(buf)if buf[buf_len-3:] == 'end':data += buf[:buf_len-3]image_bytes = data data_stream = io.BytesIO(image_bytes) pil_image = Image.open(data_stream) tk_image = ImageTk.PhotoImage(pil_image)label['image'] = tk_imagedata = ""else:data += buf
import socket
import os
import io
import threading
import time
from PIL import Image, ImageTk
try:   # Python2   import Tkinter as tk   from urllib2 import urlopen
except ImportError:   # Python3   import tkinter as tk   from urllib.request import urlopen # Address
HOST = '192.168.123.26'
PORT = 8000
# configure socket
sd = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
try:sd.connect((HOST, PORT))
except:sd.close()# send message
try:print 'connection state:'+sd.recv(10)
except:sd.close()
root = tk.Tk()
t = threading.Thread(target=thread_func, name='LoopThread')
t.start()
fd = open('tt.png','rb')
image_data = fd.read()
fd.close()
image_bytes = image_data
data_stream = io.BytesIO(image_bytes)
pil_image = Image.open(data_stream)
tk_image = ImageTk.PhotoImage(pil_image)
label = tk.Label(root, image=tk_image, bg='brown')
label.pack(padx=5, pady=5)
root.mainloop()
sd.close()
t.join()

二、通过OpenCV显示

#!/usr/bin/env python
# -*- coding: utf-8 -*-
# This is a tiny example that shows how to show live images from Nao using OpenCV.import sys
import cv2.cv as cv
from naoqi import ALProxy
import vision_definitionsclass OpenCVModule():def __init__(self, IP, PORT, CameraID):self._videoProxy = Noneself._cameraID = CameraIDself._resolution = vision_definitions.kQVGA  # 320 * 240self._colorSpace = vision_definitions.kBGRColorSpaceself._fps = 20self._imgClient = ""self._imgData = Noneself._img = cv.CreateImageHeader((320,240),cv.IPL_DEPTH_8U,3)cv.NamedWindow("Camera_OpenCV", 0)self._registerImageClient(IP, PORT)def _registerImageClient(self, IP, PORT):self._videoProxy = ALProxy("ALVideoDevice", IP, PORT)self._imgClient = self._videoProxy.subscribeCamera("OpenCV_Client", self._cameraID, self._resolution, self._colorSpace,self._fps)def _unregisterImageClient(self):if self._imgClient != "":self._videoProxy.unsubscribe(self._imgClient)def showImage(self):while True:try:self._imgData = self._videoProxy.getImageRemote(self._imgClient)cv.SetData(self._img, self._imgData[6])cv.ShowImage("Camera_OpenCV", self._img)except KeyboardInterrupt:breakexcept:passif cv.WaitKey(10) == 27:breakcv.DestroyAllWindows()self._unregisterImageClient()if __name__ == '__main__':IP = "192.168.123.26" PORT = 9559CameraID = 0if len(sys.argv) > 1:IP = sys.argv[1]if len(sys.argv) > 2:CameraID = int(sys.argv[2])myWidget = OpenCVModule(IP, PORT, CameraID)myWidget.showImage()

三、通过PyQt显示

#!/usr/bin/env python
# -*- coding: utf-8 -*-
# This is a tiny example that shows how to show live images from Nao using PyQt.import sys
from PyQt4.QtGui import QWidget, QImage, QApplication, QPainter
from naoqi import ALProxy
import vision_definitionsclass ImageWidget(QWidget):def __init__(self, IP, PORT, CameraID, parent=None):QWidget.__init__(self, parent)self._image = QImage()self.setWindowTitle('Nao')self._widWidth = 640self._widHeight = 480self.resize(self._widWidth, self._widHeight)self._videoProxy = Noneself._cameraID = CameraIDself._resolution = vision_definitions.kQVGA  # 320 * 240self._colorSpace = vision_definitions.kRGBColorSpaceself._fps = 10self._imgClient = ""self._alImage = Noneself._registerImageClient(IP, PORT)self.startTimer(50)def _registerImageClient(self, IP, PORT):self._videoProxy = ALProxy("ALVideoDevice", IP, PORT)self._imgClient = self._videoProxy.subscribeCamera("PyQt_Client", self._cameraID, self._resolution, self._colorSpace, self._fps)def _unregisterImageClient(self):if self._imgClient != "":self._videoProxy.unsubscribe(self._imgClient)def paintEvent(self, event):painter = QPainter(self)painter.drawImage(painter.viewport(), self._image)def _updateImage(self):self._alImage = self._videoProxy.getImageRemote(self._imgClient)self._image = QImage(self._alImage[6],           # Pixel array.self._alImage[0],           # Width.self._alImage[1],           # Height.QImage.Format_RGB888)def timerEvent(self, event):self._updateImage()self.update()def __del__(self):self._unregisterImageClient()if __name__ == '__main__':IP = "192.168.123.26" PORT = 9559CameraID = 0if len(sys.argv) > 1:IP = sys.argv[1]if len(sys.argv) > 2:CameraID = int(sys.argv[2])app = QApplication(sys.argv)myWidget = ImageWidget(IP, PORT, CameraID)myWidget.show()sys.exit(app.exec_())

这里推荐使用后面两种方式,不推荐使用第一种方式

最后重申一下,写这篇博客时候,代码是以前的的代码片段,如有错误,可以指出,见谅,谢谢

Nao机器人如何实现视频监控相关推荐

  1. nao机器人python库安装_NAO机器人学习笔记(1)

    1 NAO机器人硬件 1.1 红外线 红外线发射角度-60°~+60°,波长940nm. 1.2 超声波(声纳) NAO能够探测前方0.25~2.55m内是否有障碍物,探测角度60°,超声波频率为49 ...

  2. 2021综述:视频监控中的多目标跟踪

    点击上方"3D视觉工坊",选择"星标" 干货第一时间送达 来源丨CV技术指南 作者丨仿佛若有光 前言 本文来自一篇2021的论文,论文简要回顾了现有的SOTA模 ...

  3. 视频监控成AI芯片主战场,海康威视和大华股份占据半壁江山

    来源:MEMS 概要:图像和视频的人工智能处理,是目前AI芯片商业化前景最乐观的赛道,也是玩家们弯道超车的最佳机会.  图像和视频的人工智能处理,是目前AI芯片商业化前景最乐观的赛道,也是玩家们弯道超 ...

  4. Qt编写安防视频监控系统61-子模块5设备控制

    一.前言 设备控制模块,和云台控制模块都是用的onvif协议通信,可以对选中的通道的摄像机(ONVIF协议),进行获取参数.设置参数.手动校时.重启设备.抓拍图片.模拟报警等操作,可以对摄像机的明亮度 ...

  5. Qt编写安防视频监控系统65-子模块9数据调试

    一.前言 数据调试模块,用于显示通信串口的数据,自定义不同颜色显示,可以勾选过滤某个串口进行数据查看,也可以选择所有数据,还可以勾选暂停显示复选框用来暂停打印显示信息.数据调试可以很方便的查看串口收发 ...

  6. Qt编写安防视频监控系统53-串口配置

    一.前言 视频监控系统中,除了核心的显示实时视频以外,可能还需要配合串口网络通信之类的,用于通过指令数据收到和硬件交互,比如机器人监控系统中,除了实时显示机器人移动监控画面以外,还通过多个串口和下面的 ...

  7. Qt编写安防视频监控系统46-视频存储

    一.前言 在整个视频监控系统的开发迭代升级过程中,遇到过各种奇奇怪怪的需求,都是客户提出来的,有些需求很合理,有些就不那么的自然了,牢记这客户是上帝的原则,能满足的尽量满足.相信各位同行的研发人员都会 ...

  8. Qt编写安防视频监控系统68-兼容Qt4到Qt6

    一.前言 为了从Qt4.7兼容到Qt6.2及后续版本,着实花了不少精力,前提也是对自定义控件大全和各种跨平台的轮子组件全部做成了兼容Qt4到Qt6,这样只剩下UI这块需要兼容就好办多了,各个击破战略, ...

  9. Qt编写安防视频监控系统55-布局方案

    一.前言 这是近期对视频监控系统做得最大的改动,采用了QMainWindow停靠窗体悬停窗体,极大的增强了拓展性,主界面中的各种小模块全部采用了悬停模块,最后不同的工作模式.不同的运行状态(全屏状态. ...

最新文章

  1. 立体匹配中的方法论和弱纹理恢复
  2. error CS1061:
  3. java aop注解拦截_Spring AOP 拦截指定注解标识的类或方法
  4. 实验4 进程运行轨迹的跟踪与统计
  5. 用终端访问路由器设置端口开发_网络故障排查最全总结!ONU、机顶盒、路由器常见网络问题及处理方法...
  6. 计算机容量单位比T,容量单位.比G大是T.比T大是E.比E大是什么?
  7. java异常处理封装_Java统一异常处理(配置文件集中化定义)
  8. nasdocker推荐,附小技巧
  9. java创造新世界_创建新世界闪退求解决
  10. python 列表去空_在Python中使用filter去除列表中值为假及空字符串的例子
  11. maple 2022
  12. RSA算法生成2048位公私钥
  13. 网易云音乐直链提取及下载
  14. Java线程池工作原理
  15. 阿里云窄带高清的演进与思考
  16. 代码审计| HDWiki 漏洞(一)
  17. PCL学习笔记(3)——openni2_grabber从相机获取点云数据
  18. 【shell】scp 同时向多个主机拷贝数据
  19. Anaconda安装并配置
  20. 股票自动交易软件接口支持的语言是什么?

热门文章

  1. 六、线性方程组求解--Jacobi和Gauss-Seidel迭代求解
  2. html 透明的圆形,CSS3 花蝴蝶形状的3D透明圆球旋转变幻
  3. 公众号内文章懒得翻,巧用搜索神器轻松搞定
  4. 用户画像标签维度_用户画像详解:关于用户画像的What、Why、How
  5. java语言开发的万能简历解析,任何简历都可以 规范格式化数据保存入库! - CSDN博客
  6. “小智特惠” Android版已经登录各大电子市场,欢迎试用
  7. IDEA破解补丁激活方式
  8. Formality简单实用之1--RTLvsRTL
  9. html数据分析表格api_你不一定知道这个用 Python 快速设置 Excel 表格边框的技巧...
  10. bootstrap-table修改列名