×

用于灭活生物有机体的紫外线机器人

消耗积分:0 | 格式:zip | 大小:3.22 MB | 2022-11-24

李英

分享资料个

描述

描述

由于 2019 年新型冠状病毒(COVID-19)引起的长期流行病爆发,2020 年正在超越现代人类生活中最糟糕的一年。这种新颖的社区健康问题导致了世界各地卫生系统的崩溃和经济放缓,同样影响了我们彼此相处的方式、我们的生活方式和工作方式。据大流行科学家称,此类事件可能会一次又一次地发生,因此我们必须开发有助于解决或缓解这些问题的技术。

在大流行期间,机器人技术发挥了重要作用,因为许多人都知道,机器人具有的优势之一是能够在对人类有害的极端环境中工作,例如核灾难、自然灾害、深矿以及最终环境大量未知病原体,例如导致 covid-19 的 SARS-CoV-2 病毒。

幸运的是,我们正处于一个任何人都可以在家中构建机器人的时代,只需遵循一些简短的指令。此外,还有大量的专家程序员社区,例如制造商,可以通过他们找到构建程序所需的帮助。然而,在这个大流行更潜伏的时期,许多技术发展都集中在建造大型而坚固的机器人上,以便在购物中心或大型公共实体建筑中使用,而此时大多数人都希望拥有一个这些机器人用于自己家的消毒。不仅能够消除当前的 Covid-19 病毒,还能够消除其他病毒、细菌和真菌的设备。在这些情况下,考虑到其在市场上的尺寸和价格,如图 1 所示的大型机器人不是最合适的。

 

这就是为什么我的解决方案是基于家用消毒机器人,比如吸尘机器人或带有紫外线 (UV) 灯的吸尘机器人。对于想要保持家中清洁和消毒的人们来说,这些机器人体积小且价格合理。

这些机器人在消毒过程方面具有一定的特殊性,例如相互通信的能力。这种通信允许在消毒中进行协调并优化执行此任务的时间。为此,我依靠称为多智能体系统 (MAS) 的人工智能 (AI) 工具。MAS 允许创建能够在环境中相互通信、感知和行动的实体。MAS 的基本单元是控制每个机器人的代理。通过这种方式,我们赋予机器人自主、智能和社交的特征。

特征

MAS 的特点之一是它的行为类似于其他人工智能、机器视觉和低级控制工具的容器。利用这种能力,每个代理(机器人)都结合了人工视觉工具、物体和人识别系统。为此,所有使用 Raspberry Pi 4 构建的机器人都集成了 OpenVino 工具和英特尔神经计算机棒 2。然而,这种神经棒允许使用深度学习模型来检测人、物体、地点等. 这种视觉和分类工具被用作防止紫外线照射烧伤的一种措施,它通过检测试剂附近是否有人存在,从而使试剂能够关闭灯。同时,作为一种冗余保护措施,机器人有一个 PIR 传感器,可以检测人体发出的运动和红外辐射。因此,通过这两个保护系统中的每一个的输出,代理将有足够的信息来停用紫外线灯。

机器人建造

这些机器人是使用带有全向轮子的平台建造的,以方便在复杂环境中导航。他们还有一个用于映射和导航的 YDLIDAR X4、一个用于改进低级控制的 Arduino Mega 2560 和/或代理居住的 Raspberry Pi 4 或 Jetson Nano。图 2 显示了其中一种 3D 设计模型。

图 3 显示了厨房内机器人的 3D 表示。

pYYBAGN-vCeAJOvzAAA6NYEE89M288.png
图 3,厨房机器人的 3D 模型
 

该机器人是易于修改和/或更新的模块化机器人,可以改变灯的类型、高度等。在机器人的上部,紫外线灯是固定的,这将有助于消毒。由于家庭消毒的复杂性,灯可以45度角定向,360度旋转。这使我们能够对厕所底部或桌子底部等区域进行消毒(图 4)。

poYBAGN-vCmARS7zAAB6pWEBDdk523.png
图 4,家中的紫外线机器人。
 

如上所述,机器人有两个神经计算机棒 2,它们使机器人能够引入机器学习算法,使机器人能够识别物体和/或在未来确定哪些物体更容易被污染,因此花费更多时间在消毒过程中(图5)。

pYYBAGN-vCuAS6yXAAAwbYJwv5M624.png
图 5,神经计算机棒 2
 

图 6 显示了带有 Sense-Hat 的机器人,使用其磁力计、陀螺仪和加速度计,使机器人能够更好地导航和定位自己。所有这些在做地图和 SLAM 时都非常重要。

poYBAGN-vC2AZdobAAC3s1jeOO4401.png
图 6,机器人及其感应帽
 

为了实现这种导航,机器人必须有工具来检测障碍物并将位置映射到其工作环境中的位置。为此目的,已加入激光雷达,使其能够进行 SLAM 制图。图 7 显示了一个真实激光雷达获得 SLAM 批准的示例。

pYYBAGN-vDCAJhC3AAAMtw15LtI043.png
图 7,使用 Ydlidar X4 的 SLAM
 

图 8 显示了机器人的下半部分,其中包含机器人中的每个元素,例如激光雷达、英特尔神经计算机棒 2 以及使机器人工作的其他硬件。

poYBAGN-vDKAeMRBAADnyCe5kWM215.png
图 8,机器人底部。
 

软件

所有机器人都在两个级别进行编程:基于 Arduino mega 2560 的最低级别使用 Arduino IDE 进行编程,而顶级控制(即机器视觉、代理之间的消息传递或导航)使用 Python 3.7 进行编程。此外,机器人可以使用 ROS 进行控制,但是,这些原型是通过使用我目前正在开发的机器人控制和模拟工具来控制的,其中模拟和控制的核心是 Pybullet。这不仅可以控制机器人,还可以使用物理约束(重力、摩擦)或碰撞检测进行模拟。图 9 显示了厨房中的模拟,其中绿线代表机器人的虚拟激光雷达,蓝色线代表激光雷达光束的碰撞。

pYYBAGN-vDSAaE69AABAUU81A0k658.png
图 9,厨房模拟。
 

将模拟器集成到机器人控制系统中的优点之一是,它可以制定最大化消毒过程的策略并确定灯的功率,如下图 10 和 11 所示(激光雷达已停用)。

pYYBAGN-vDaAI7GMAABL7Tp9Fh8248.png
图 10,厨房消毒过程的模拟
 
pYYBAGN-vDiAVnbfAABEfUYKCNY482.png
图 11,厨房消毒过程的模拟。
 

如前所述,机器人有能力通过使用 OpenVino 系统及其两个神经棒 2 来识别物体。但是,它可以识别的物体数量将取决于不同的需求,即哪些物体最有可能具有高概率细菌、病毒或真菌污染。然后,消毒器可以通过评估哪些物体最容易受到影响来确定这些物体的紫外线照射时间是否增加。

这些可以是一些例子来说明这个项目:

poYBAGN-vDuAdQEOAAAwORMQ9bw316.png
图 12,机器人要分类的对象
 

必须为机器人创建数据集以识别这些对象。为了构建这个数据集,我们自动使用以下 Python 库:Bing Image Downloader。要安装这个库,我们从命令终端输入:pip install bing-image-downloader

一旦安装了库,我们要做的是从我们的数据集中下载图像,在我们的例子中是:

0 Bottle
1 Cup
2 Person
3 Sink_Bathroom
4 Toilet

要进行此下载,我们使用以下脚本:

from bing_image_downloader.bing_image_downloader.downloader import download

query_string = ["Person", "Unknow","Cup", "Toilet", "Sink_Bathroom", "Bottle"]

for i in query_string:
    download(i, limit=200, output_dir='dataset', adult_filter_off=True, force_replace=False)

这将创建一个名为 dataset 的文件夹,在该文件夹中,我们将找到一些带有要分类的类名称的子文件夹(图 13)。

poYBAGN-vD2AV7e0AAAK8_FC8ok398.png
Figura 13, Subcarpetas creadas
 

到目前为止,我们已经准备好训练数据集。这个过程可以通过 Keras 和 Tensorflow 使用 MobileNet 网络完成,或者我们可以使用工具可教机器在线执行此类训练(图 14)。

pYYBAGN-vD-ALnQwAAAdphgLzOs866.png
图 14、teachablemachine
 

我们简单地添加类的数量并上传每个类对应的图像并进行训练。

 

训练过程的结果如下图所示:

pYYBAGN-vEGAcV2KAAAf3nHC2Hs689.png
图 15,历元损失
 
poYBAGN-vEOAUV0EAAAXPmE3cuI048.png
图 16,不同时期的精度
 

另一方面,图16是应用教学机得到的混淆矩阵,图13是我的移动网络训练得到的混淆矩阵。

pYYBAGN-vEWAXt6_AAAs-JtQnnI249.png
图 17、teachablemachine 混淆矩阵
 
poYBAGN-vEeABD5ZAABJaRTqFgs476.png
图 18、mobilenet 混淆矩阵
 

我们可以观察到两个混淆矩阵之间存在一定的关系,但是,我的混淆矩阵在 0-1 之间进行了归一化。基于这些结果,我们可以得出结论,机器人将能够识别用户希望机器人投入更多时间进行消毒的物体。

训练完模型后,下一步就是将其转换为 Openvino 使用的格式。这个过程需要一些重要的步骤,第一个是安装Openvino,我们参考Intel给出的说明。安装步骤因我们的操作系统而异(在我的情况下,我的操作系统是 Windows 10)。

安装 Openvino 后,下一步就是创建通风环境:

We create the environment: python3 -m venv openvino

We activate the environment: .\openvino\Scripts\activate

安装后,下一步是查找 Openvino 已安装的文件:

C:\Program Files (x86)\IntelSWTools\openvino\deployment_tools\model_optimizer\install_prerequisites

在环境中,它不允许我们以--user身份安装必要的要求,因此我们修改文件。第一个是install_prerequisites我们查找单词--user并将其删除。一旦我们编辑了这个文件,我们就可以安装先决条件。

安装完所有内容并且我们的模型为.h5格式后,接下来就是将此模型转换为.pb模型。为此,我们使用以下代码:

import tensorflow as tf
 from tensorflow.python.keras.models import load_model
 # Tensorflow 2.x
 from tensorflow.python.framework.convert_to_constants import convert_variables_to_constants_v2
 
model = load_model("../KerasCode/Models/keras_model.h5")
 
 # Convert Keras model to ConcreteFunction
 full_model = tf.function(lambda x: model(x))
full_model = full_model.get_concrete_function(
  tf.TensorSpec(model.inputs[0].shape, model.inputs[0].dtype))
 
 # Get frozen ConcreteFunction
 frozen_func = convert_variables_to_constants_v2(full_model)
frozen_func.graph.as_graph_def()
 
 # Print out model inputs and outputs
 print("Frozen model inputs: ", frozen_func.inputs)
 print("Frozen model outputs: ", frozen_func.outputs)
 
 # Save frozen graph to disk
 tf.io.write_graph(graph_or_graph_def=frozen_func.graph,
  logdir="./frozen_models",
  name="keras_model.pb",
   as_text=False)

这将返回一个文件“XXXX.pb”,好吧,接下来就是在安装Openvino的文件夹中查找这个脚本mo_tf.py。一旦进入这个文件夹,重要的是创建一个名为模型的文件夹(如果需要),并从命令终端(cmd),我们这样写:

python mo_tf.py --input_model model\keras_model.pb --input_shape [1,224,224,3] --output_dir model\

如果一切顺利,我们将必须在此过程结束时拥有这些文件:

  • keras_model.bin
  • keras_model.mapping
  • keras_model (XML)
  • 标签.txt
 
 
 
pYYBAGN-vEyASvvRAAfAoeLR_SI704.png
 
1 / 9
 
 

 


声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉

评论(0)
发评论

下载排行榜

全部0条评论

快来发表一下你的评论吧 !

'+ '

'+ '

'+ ''+ '
'+ ''+ ''+ '
'+ ''+ '' ); $.get('/article/vipdownload/aid/'+webid,function(data){ if(data.code ==5){ $(pop_this).attr('href',"/login/index.html"); return false } if(data.code == 2){ //跳转到VIP升级页面 window.location.href="//m.lene-v.com/vip/index?aid=" + webid return false } //是会员 if (data.code > 0) { $('body').append(htmlSetNormalDownload); var getWidth=$("#poplayer").width(); $("#poplayer").css("margin-left","-"+getWidth/2+"px"); $('#tips').html(data.msg) $('.download_confirm').click(function(){ $('#dialog').remove(); }) } else { var down_url = $('#vipdownload').attr('data-url'); isBindAnalysisForm(pop_this, down_url, 1) } }); }); //是否开通VIP $.get('/article/vipdownload/aid/'+webid,function(data){ if(data.code == 2 || data.code ==5){ //跳转到VIP升级页面 $('#vipdownload>span').text("开通VIP 免费下载") return false }else{ // 待续费 if(data.code == 3) { vipExpiredInfo.ifVipExpired = true vipExpiredInfo.vipExpiredDate = data.data.endoftime } $('#vipdownload .icon-vip-tips').remove() $('#vipdownload>span').text("VIP免积分下载") } }); }).on("click",".download_cancel",function(){ $('#dialog').remove(); }) var setWeixinShare={};//定义默认的微信分享信息,页面如果要自定义分享,直接更改此变量即可 if(window.navigator.userAgent.toLowerCase().match(/MicroMessenger/i) == 'micromessenger'){ var d={ title:'用于灭活生物有机体的紫外线机器人',//标题 desc:$('[name=description]').attr("content"), //描述 imgUrl:'https://'+location.host+'/static/images/ele-logo.png',// 分享图标,默认是logo link:'',//链接 type:'',// 分享类型,music、video或link,不填默认为link dataUrl:'',//如果type是music或video,则要提供数据链接,默认为空 success:'', // 用户确认分享后执行的回调函数 cancel:''// 用户取消分享后执行的回调函数 } setWeixinShare=$.extend(d,setWeixinShare); $.ajax({ url:"//www.lene-v.com/app/wechat/index.php?s=Home/ShareConfig/index", data:"share_url="+encodeURIComponent(location.href)+"&format=jsonp&domain=m", type:'get', dataType:'jsonp', success:function(res){ if(res.status!="successed"){ return false; } $.getScript('https://res.wx.qq.com/open/js/jweixin-1.0.0.js',function(result,status){ if(status!="success"){ return false; } var getWxCfg=res.data; wx.config({ //debug: true, // 开启调试模式,调用的所有api的返回值会在客户端alert出来,若要查看传入的参数,可以在pc端打开,参数信息会通过log打出,仅在pc端时才会打印。 appId:getWxCfg.appId, // 必填,公众号的唯一标识 timestamp:getWxCfg.timestamp, // 必填,生成签名的时间戳 nonceStr:getWxCfg.nonceStr, // 必填,生成签名的随机串 signature:getWxCfg.signature,// 必填,签名,见附录1 jsApiList:['onMenuShareTimeline','onMenuShareAppMessage','onMenuShareQQ','onMenuShareWeibo','onMenuShareQZone'] // 必填,需要使用的JS接口列表,所有JS接口列表见附录2 }); wx.ready(function(){ //获取“分享到朋友圈”按钮点击状态及自定义分享内容接口 wx.onMenuShareTimeline({ title: setWeixinShare.title, // 分享标题 link: setWeixinShare.link, // 分享链接 imgUrl: setWeixinShare.imgUrl, // 分享图标 success: function () { setWeixinShare.success; // 用户确认分享后执行的回调函数 }, cancel: function () { setWeixinShare.cancel; // 用户取消分享后执行的回调函数 } }); //获取“分享给朋友”按钮点击状态及自定义分享内容接口 wx.onMenuShareAppMessage({ title: setWeixinShare.title, // 分享标题 desc: setWeixinShare.desc, // 分享描述 link: setWeixinShare.link, // 分享链接 imgUrl: setWeixinShare.imgUrl, // 分享图标 type: setWeixinShare.type, // 分享类型,music、video或link,不填默认为link dataUrl: setWeixinShare.dataUrl, // 如果type是music或video,则要提供数据链接,默认为空 success: function () { setWeixinShare.success; // 用户确认分享后执行的回调函数 }, cancel: function () { setWeixinShare.cancel; // 用户取消分享后执行的回调函数 } }); //获取“分享到QQ”按钮点击状态及自定义分享内容接口 wx.onMenuShareQQ({ title: setWeixinShare.title, // 分享标题 desc: setWeixinShare.desc, // 分享描述 link: setWeixinShare.link, // 分享链接 imgUrl: setWeixinShare.imgUrl, // 分享图标 success: function () { setWeixinShare.success; // 用户确认分享后执行的回调函数 }, cancel: function () { setWeixinShare.cancel; // 用户取消分享后执行的回调函数 } }); //获取“分享到腾讯微博”按钮点击状态及自定义分享内容接口 wx.onMenuShareWeibo({ title: setWeixinShare.title, // 分享标题 desc: setWeixinShare.desc, // 分享描述 link: setWeixinShare.link, // 分享链接 imgUrl: setWeixinShare.imgUrl, // 分享图标 success: function () { setWeixinShare.success; // 用户确认分享后执行的回调函数 }, cancel: function () { setWeixinShare.cancel; // 用户取消分享后执行的回调函数 } }); //获取“分享到QQ空间”按钮点击状态及自定义分享内容接口 wx.onMenuShareQZone({ title: setWeixinShare.title, // 分享标题 desc: setWeixinShare.desc, // 分享描述 link: setWeixinShare.link, // 分享链接 imgUrl: setWeixinShare.imgUrl, // 分享图标 success: function () { setWeixinShare.success; // 用户确认分享后执行的回调函数 }, cancel: function () { setWeixinShare.cancel; // 用户取消分享后执行的回调函数 } }); }); }); } }); } function openX_ad(posterid, htmlid, width, height) { if ($(htmlid).length > 0) { var randomnumber = Math.random(); var now_url = encodeURIComponent(window.location.href); var ga = document.createElement('iframe'); ga.src = 'https://www1.elecfans.com/www/delivery/myafr.php?target=_blank&cb=' + randomnumber + '&zoneid=' + posterid+'&prefer='+now_url; ga.width = width; ga.height = height; ga.frameBorder = 0; ga.scrolling = 'no'; var s = $(htmlid).append(ga); } } openX_ad(828, '#berry-300', 300, 250);