无人车的摄像头的实时捕获图片以及widgets小部件的相关操作
创始人
2024-06-03 21:03:45
0

将无人车安装好之后,对于无人车最关键的组件,属于无人驾驶领域的眼睛:摄像头或相机,看下有哪些相关操作

首先初始化摄像头,宽高为224

from jetbotmini import Camera
camera = Camera.instance(width=224, height=224)

不出意外的情况,可能出现下面的运行时错误:

RuntimeError Traceback (most recent call last)
/usr/local/lib/python3.6/dist-packages/jetbotmini-0.4.0-py3.6.egg/jetbotmini/camera.py in __init__(self, *args, **kwargs)
29 if not re:
---> 30 raise RuntimeError('Could not read image from camera.')
31
RuntimeError: Could not read image from camera.
During handling of the above exception, another exception occurred:
RuntimeError Traceback (most recent call last)
in
1 from jetbotmini import Camera
----> 2 camera = Camera.instance(width=224, height=224)
/usr/local/lib/python3.6/dist-packages/traitlets/config/configurable.py in instance(cls, *args, **kwargs)
410 # Create and save the instance
411 if cls._instance is None:
--> 412 inst = cls(*args, **kwargs)
413 # Now make sure that the instance will also be returned by
414 # parent classes' _instance attribute.
/usr/local/lib/python3.6/dist-packages/jetbotmini-0.4.0-py3.6.egg/jetbotmini/camera.py in __init__(self, *args, **kwargs)
35 self.stop()
36 raise RuntimeError(
---> 37 'Could not initialize camera. Please see error trace.')
38
39 atexit.register(self.stop)
RuntimeError: Could not initialize camera. Please see error trace.

我们先来看下这个OpenCV库的版本。OpenCV是一个开源的计算机视觉库,使用很广泛,这里就不多做解释了

import cv2
print(cv2.__version__)#4.1.1

所以这里不是版本低的问题。

由于在安装好了之后,我使用iPad可以正常控制无人车的操作,摄像头也是正常打开拍摄状态,所以摄像头的安装是没有问题

那我们来到终端输入命令:ls /dev 列表里面也有video0设备,说明终端也是正确连接着摄像头的

如何连接到无人车系统?我们使用前面介绍的VNC-Viewer来远程操作:

远程连接VNC-Viewer与安全传输WinSCP软件

那就试着重启Kernel,点击JupyterLab菜单的"Kernel",点击"Shut Down All Kernels..."

点击"Restart Kernel and Clear All Outputs..."重启之后,重新运行代码即可,如果还是报错,那就将无人车重启下。

还有一种情况就是摄像头在使用中或者直接关闭.ipynb页面,重新执行另一个.ipynb来初始化摄像头也同样报上面的错误,所以说这个只需要重启即可

#打印看下
print(camera)

说明摄像头已经正常初始化了。

# 通过widgets小组件来显示图片
import ipywidgets.widgets as widgets
image = widgets.Image(format='jpeg', width=224, height=224)
display(image)

实时更新相机画面至组件显示

我们通过traitlets来绑定两个数据对象进行数据的实时刷新,由于我们组件显示的图像格式是JPEG格式,而我们从摄像头相机获取的数据是bgr8,所以我们需要利用jetbotmini里的bgr8_to_jpeg方法才能正确将我们从相机捕获到的数据进行实时显示。

from jetbotmini import bgr8_to_jpeg
import traitlets
camera_link = traitlets.dlink((camera, 'value'), (image, 'value'), transform=bgr8_to_jpeg)

不出意外的话,摄像头就会正常捕获画面并实时显示在上面的wiggets的Image部件里面了。

我们来看下widgets组件模块,里面有很多的控件可以使用

import ipywidgets.widgets as widgets
print(dir(widgets))
#['Accordion', 'AppLayout', 'Audio', 'BoundedFloatText', 'BoundedIntText', 'Box', 'Button', 'ButtonStyle', 'CallbackDispatcher', 'Checkbox', 'Color', 'ColorPicker', 'Combobox', 'Controller', 'CoreWidget', 'DOMWidget', 'DatePicker', 'Datetime', 'Dropdown', 'FileUpload', 'FloatLogSlider', 'FloatProgress', 'FloatRangeSlider', 'FloatSlider', 'FloatText', 'GridBox', 'GridspecLayout', 'HBox', 'HTML', 'HTMLMath', 'Image', 'IntProgress', 'IntRangeSlider', 'IntSlider', 'IntText', 'Label', 'Layout', 'NumberFormat', 'Output', 'Password', 'Play', 'RadioButtons', 'Select', 'SelectMultiple', 'SelectionRangeSlider', 'SelectionSlider', 'SliderStyle', 'Style', 'Tab', 'Text', 'Textarea', 'ToggleButton', 'ToggleButtons', 'ToggleButtonsStyle', 'TwoByTwoLayout', 'VBox', 'Valid', 'ValueWidget', 'Video', 'Widget', '__builtins__', '__cached__', '__doc__', '__file__', '__loader__', '__name__', '__package__', '__path__', '__spec__', 'docutils', 'domwidget', 'fixed', 'interact', 'interact_manual', 'interaction', 'interactive', 'interactive_output', 'jsdlink', 'jslink', 'register', 'trait_types', 'util', 'valuewidget', 'widget', 'widget_bool', 'widget_box', 'widget_button', 'widget_color', 'widget_controller', 'widget_core', 'widget_date', 'widget_description', 'widget_float', 'widget_int', 'widget_layout', 'widget_link', 'widget_media', 'widget_output', 'widget_selection', 'widget_selectioncontainer', 'widget_serialization', 'widget_string', 'widget_style', 'widget_templates', 'widget_upload']

这种交互式的小部件都是基于HTML,因为JupyterLab本身就是基于浏览器而开发的,所以跟Web前端是很相似的,我们来看几个小例子,显示一些常见的组件看下:

import ipywidgets as widgets
from IPython.display import displaybtn=widgets.Button(description="确认")
display(btn)left=widgets.FloatSlider(desciption="left",min=-10,max=10)
right=widgets.FloatSlider(desciption="left",min=-1,max=1)
container=widgets.HBox([widgets.Label(value="交互式小部件"), left,right])
display(container)

还可以进行交互式的操作,点击按钮看下效果:

def btn_click(sender):print('点击了按钮:%s' % sender.description)
btn.on_click(btn_click)
display(btn)#点击了按钮:确认

下拉框的选择:

drpbx = widgets.Dropdown(options=[("湖南省", 1), ("广东省", 2), ("江西省", 3)], index=0, value=1, label="广东省")def chosen(_):print("选择的索引:{}, 值:{}, 标签:{}".format(drpbx.index, drpbx.value, drpbx.label))drpbx.observe(chosen, names="value")
display(drpbx)

这里默认指定显示广东省

比如选择湖南省

#选择的索引:0, 值:1, 标签:湖南省

选择江西省

#选择的索引:2, 值:3, 标签:江西省

另外既然是基于WEB的,很明显HTML的样式也是可以直接拿过来用,比如设置按钮颜色:

btn.style.button_color = 'lightblue'

还有一些预定义的常见按钮

from ipywidgets import Button, HBox
display(HBox([Button(description='确认', button_style='primary'),Button(description='成功', button_style='success'),Button(description='信息', button_style='info'),Button(description='警告', button_style='warning'),Button(description='错误', button_style='danger')]))

这里是对一些常见的小部件做了介绍,更多信息可以查阅相关资料,有什么疑问与错误,欢迎指正交流,共同学习进步!

相关内容

热门资讯

育碧GDC2018程序化大世界... 1.传统手动绘制森林的问题 采用手动绘制的方法的话,每次迭代地形都要手动再绘制森林。这...
编译原理陈火旺版第三章课后题答... 下面答案仅供参考! 1.编写一个对于 Pascal 源程序的预处理程序。该程序的作用是...
MacBookPro M2芯片... MacBookPro M2芯片下如何搭建React-Native环境目录软件下载环境配置 目录 写在...
Android studio ... 解决 Android studio 出现“The emulator process for AVD ...
pyflink学习笔记(六):... 在pyflink学习笔记(一)中简单介绍了table-sql的窗口函数,下面简单介绍下...
创建deployment 创建deployment服务编排-DeploymentDeployment工作负载均衡器介绍Depl...
gma 1.1.4 (2023... 新增   1、地图工具    a. 增加【GetWorldDEMDataSet】。提供了一套 GEO...
AI专业教您保姆级在暗影精灵8... 目录 一、Stable Diffusion介绍    二、Stable Diffusion环境搭建 ...
vue笔记 第一个Vue应用 Document{{content}}{{...
Unity自带类 --- Ti... 1.在Unity中,自己写的类(脚本)的名字不能与Unit...
托福口语21天——day5 发... 目录 一、连读纠音 二、语料输入+造句输出 三、真题 一、连读纠音 英语中的连读方式有好几种...
五、排序与分页 一、排序 1、语法 ORDER BY 字段 ASC | DESC ASC(ascen...
Linux系统中如何安装软件 文章目录一、rpm包安装方式步骤:二、deb包安装方式步骤:三、tar....
开荒手册4——Related ... 0 写在前面 最早读文献的时候,每每看到related work部分都会选择性的忽略&...
实验01:吃鸡蛋问题 1.实验目的: 通过实验理解算法的概念、算法的表示、算法的时间复杂度和空间复杂度分析&...
8个免费图片/照片压缩工具帮您... 继续查看一些最好的图像压缩工具,以提升用户体验和存储空间以及网站使用支持。 无数图像压...
Spring Cloud Al... 前言 本文小新为大家带来 Sentinel控制台规则配置 相关知识,具体内容包括流控...
多项目同时进行,如何做好进度管... 多项目同时进行,如何做好进度管理? 大多数时候,面对项目进...
ATTCK红队评估实战靶场(二... 前言 第二个靶机来喽,地址:vulunstack 环境配置 大喊一声我...
【MySQL基础】3—多表查询 ⭐⭐⭐⭐⭐⭐ Github主页👉https://github.com/A-BigTr...