{"id":6582,"date":"2023-05-05T23:26:00","date_gmt":"2023-05-05T21:26:00","guid":{"rendered":"https:\/\/blogs.etsii.urjc.es\/dseytr\/?p=6582"},"modified":"2023-05-09T08:36:01","modified_gmt":"2023-05-09T06:36:01","slug":"clasificador-maching-learning","status":"publish","type":"post","link":"https:\/\/blogs.etsii.urjc.es\/dseytr\/clasificador-maching-learning\/","title":{"rendered":"Clasificador-Maching Learning"},"content":{"rendered":"\n<p><strong>Autores<\/strong>: Jaime Rueda Carpintero, Cristian Fernando Calva Troya, Luis Ovejero Mart\u00edn y Valery Isabel Cortez Fern\u00e1ndez.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">1. Introducci\u00f3n<\/h3>\n\n\n\n<p>El proyecto consiste en un clasificador de herramientas, capaz de clasificar hasta 4 tipos de dichas herramientas:&nbsp; tuercas, tornillos, arandelas y mariposas. La clasificaci\u00f3n de los distintos tipos de herramientas ser\u00e1 llevada a cabo por una inteligencia artificial realizada por nosotros. El sistema consta de una cinta que ser\u00e1 la encargada de llevar la herramienta hasta la c\u00e1mara de la placa de la inteligencia artificial y hasta el brazo clasificador, que en funci\u00f3n del tipo que sea se clasificar\u00e1 en una caja u otra. El brazo har\u00e1 el mismo movimiento siempre, pero las cajas ser\u00e1n las que variar\u00e1n su posici\u00f3n en funci\u00f3n del tipo clasificado.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">2. Material utilizado<\/h3>\n\n\n\n<figure class=\"wp-block-gallery has-nested-images columns-default is-cropped wp-block-gallery-1 is-layout-flex wp-block-gallery-is-layout-flex\">\n<figure class=\"wp-block-image size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"184\" height=\"121\" data-id=\"6590\" src=\"https:\/\/blogs.etsii.urjc.es\/dseytr\/wp-content\/uploads\/sites\/8\/2023\/05\/imagen-4.png\" alt=\"Arduino Uno\" class=\"wp-image-6590\"\/><figcaption class=\"wp-element-caption\">Arduino Uno<\/figcaption><\/figure>\n\n\n\n<figure class=\"wp-block-image size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"116\" height=\"116\" data-id=\"6591\" src=\"https:\/\/blogs.etsii.urjc.es\/dseytr\/wp-content\/uploads\/sites\/8\/2023\/05\/imagen-5.png\" alt=\"2x Servomotor\" class=\"wp-image-6591\" srcset=\"https:\/\/blogs.etsii.urjc.es\/dseytr\/wp-content\/uploads\/sites\/8\/2023\/05\/imagen-5.png 116w, https:\/\/blogs.etsii.urjc.es\/dseytr\/wp-content\/uploads\/sites\/8\/2023\/05\/imagen-5-80x80.png 80w\" sizes=\"auto, (max-width: 116px) 100vw, 116px\" \/><figcaption class=\"wp-element-caption\">2x Servomotor<\/figcaption><\/figure>\n\n\n\n<figure class=\"wp-block-image size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"135\" height=\"101\" data-id=\"6592\" src=\"https:\/\/blogs.etsii.urjc.es\/dseytr\/wp-content\/uploads\/sites\/8\/2023\/05\/imagen-6.png\" alt=\"Electroim\u00e1n\" class=\"wp-image-6592\"\/><figcaption class=\"wp-element-caption\">Electroim\u00e1n<\/figcaption><\/figure>\n\n\n\n<figure class=\"wp-block-image size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"118\" height=\"126\" data-id=\"6593\" src=\"https:\/\/blogs.etsii.urjc.es\/dseytr\/wp-content\/uploads\/sites\/8\/2023\/05\/imagen-7.png\" alt=\"Servomotor Hitec HS-422\" class=\"wp-image-6593\"\/><figcaption class=\"wp-element-caption\">Servomotor Hitec HS-422<\/figcaption><\/figure>\n\n\n\n<figure class=\"wp-block-image size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"114\" height=\"114\" data-id=\"6594\" src=\"https:\/\/blogs.etsii.urjc.es\/dseytr\/wp-content\/uploads\/sites\/8\/2023\/05\/imagen-8.png\" alt=\"Cinta\" class=\"wp-image-6594\" srcset=\"https:\/\/blogs.etsii.urjc.es\/dseytr\/wp-content\/uploads\/sites\/8\/2023\/05\/imagen-8.png 114w, https:\/\/blogs.etsii.urjc.es\/dseytr\/wp-content\/uploads\/sites\/8\/2023\/05\/imagen-8-80x80.png 80w\" sizes=\"auto, (max-width: 114px) 100vw, 114px\" \/><figcaption class=\"wp-element-caption\">Cinta<\/figcaption><\/figure>\n\n\n\n<figure class=\"wp-block-image size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"124\" height=\"124\" data-id=\"6595\" src=\"https:\/\/blogs.etsii.urjc.es\/dseytr\/wp-content\/uploads\/sites\/8\/2023\/05\/imagen-9.png\" alt=\"Motor paso a paso\" class=\"wp-image-6595\" srcset=\"https:\/\/blogs.etsii.urjc.es\/dseytr\/wp-content\/uploads\/sites\/8\/2023\/05\/imagen-9.png 124w, https:\/\/blogs.etsii.urjc.es\/dseytr\/wp-content\/uploads\/sites\/8\/2023\/05\/imagen-9-80x80.png 80w\" sizes=\"auto, (max-width: 124px) 100vw, 124px\" \/><figcaption class=\"wp-element-caption\">Motor paso a paso<\/figcaption><\/figure>\n\n\n\n<figure class=\"wp-block-image size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"135\" height=\"102\" data-id=\"6596\" src=\"https:\/\/blogs.etsii.urjc.es\/dseytr\/wp-content\/uploads\/sites\/8\/2023\/05\/imagen-10.png\" alt=\"Sensor ultras\u00f3nico\" class=\"wp-image-6596\"\/><figcaption class=\"wp-element-caption\">Sensor ultras\u00f3nico<\/figcaption><\/figure>\n\n\n\n<figure class=\"wp-block-image size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"114\" height=\"114\" data-id=\"6597\" src=\"https:\/\/blogs.etsii.urjc.es\/dseytr\/wp-content\/uploads\/sites\/8\/2023\/05\/imagen-11.png\" alt=\"Cables\" class=\"wp-image-6597\" srcset=\"https:\/\/blogs.etsii.urjc.es\/dseytr\/wp-content\/uploads\/sites\/8\/2023\/05\/imagen-11.png 114w, https:\/\/blogs.etsii.urjc.es\/dseytr\/wp-content\/uploads\/sites\/8\/2023\/05\/imagen-11-80x80.png 80w\" sizes=\"auto, (max-width: 114px) 100vw, 114px\" \/><figcaption class=\"wp-element-caption\">Cables<\/figcaption><\/figure>\n\n\n\n<figure class=\"wp-block-image size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"108\" height=\"108\" data-id=\"6598\" src=\"https:\/\/blogs.etsii.urjc.es\/dseytr\/wp-content\/uploads\/sites\/8\/2023\/05\/imagen-12.png\" alt=\"Resistencias 10K\" class=\"wp-image-6598\" srcset=\"https:\/\/blogs.etsii.urjc.es\/dseytr\/wp-content\/uploads\/sites\/8\/2023\/05\/imagen-12.png 108w, https:\/\/blogs.etsii.urjc.es\/dseytr\/wp-content\/uploads\/sites\/8\/2023\/05\/imagen-12-80x80.png 80w\" sizes=\"auto, (max-width: 108px) 100vw, 108px\" \/><figcaption class=\"wp-element-caption\">Resistencias 10K<\/figcaption><\/figure>\n\n\n\n<figure class=\"wp-block-image size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"440\" height=\"308\" data-id=\"6661\" src=\"https:\/\/blogs.etsii.urjc.es\/dseytr\/wp-content\/uploads\/sites\/8\/2023\/05\/machin.png\" alt=\"\" class=\"wp-image-6661\" srcset=\"https:\/\/blogs.etsii.urjc.es\/dseytr\/wp-content\/uploads\/sites\/8\/2023\/05\/machin.png 440w, https:\/\/blogs.etsii.urjc.es\/dseytr\/wp-content\/uploads\/sites\/8\/2023\/05\/machin-300x210.png 300w\" sizes=\"auto, (max-width: 440px) 100vw, 440px\" \/><figcaption class=\"wp-element-caption\">Kit Maching Learning<\/figcaption><\/figure>\n<\/figure>\n\n\n\n<p class=\"has-text-align-left\"><\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>Arduino Uno<\/strong>: placa principal encargada de mover la cinta, comunicarse con la placa del Arduino Nano 33, mover el brazo y las cajas.<\/li>\n\n\n\n<li><strong>Servomotores<\/strong>: encargados de mover el brazo. Un servomotor se encarga de mover la base y otro de girar la caja del brazo.<\/li>\n\n\n\n<li><strong>Joystick<\/strong>: en funci\u00f3n del movimiento de izquierda, derecha, arriba o abajo ser\u00e1 clasificado como una tuerca, tornillo, arandela o mariposa.<\/li>\n\n\n\n<li><strong>Servomotor Hitec HS-433<\/strong>: servo con una mayor fuerza que los servomotores del brazo. Encargado de mover la cinta.<\/li>\n\n\n\n<li><strong>Motor paso a paso<\/strong>: mueve la bandeja de las cajas de las herramientas clasificadas.<\/li>\n\n\n\n<li><strong>Kit Maching Learning<\/strong>: consta de la placa Arduino Nano 33 y su c\u00e1mara OV7675. La c\u00e1mara captar\u00e1 una imagen de la herramienta por clasificar y le enviar\u00e1 la foto a la placa, que ser\u00e1 capaz de clasificarla y mandar la informaci\u00f3n gracias a un modelo de inteligencia artificial ya entrenado.<\/li>\n<\/ul>\n\n\n\n<p><em>Nota*<\/em>: Pese a que hayamos utilizado el sensor ultras\u00f3nico y el electroim\u00e1n en nuestros prototipos, finalmente no hemos llegado a incluirlos en la versi\u00f3n final debido a problemas que se especificar\u00e1n m\u00e1s adelante.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">3. Montaje del proyecto en Tinkercad<\/h3>\n\n\n<div class=\"wp-block-image\">\n<figure class=\"aligncenter size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"567\" height=\"386\" src=\"https:\/\/blogs.etsii.urjc.es\/dseytr\/wp-content\/uploads\/sites\/8\/2023\/05\/imagen-14.png\" alt=\"\" class=\"wp-image-6601\" srcset=\"https:\/\/blogs.etsii.urjc.es\/dseytr\/wp-content\/uploads\/sites\/8\/2023\/05\/imagen-14.png 567w, https:\/\/blogs.etsii.urjc.es\/dseytr\/wp-content\/uploads\/sites\/8\/2023\/05\/imagen-14-300x204.png 300w\" sizes=\"auto, (max-width: 567px) 100vw, 567px\" \/><\/figure>\n<\/div>\n\n\n<p>Para el desarrollo del circuito en la plataforma de tinkercad vamos a encontrar algunas peque\u00f1as limitaciones, estas van a hacer que el circuito sea levemente distinto respecto al que finalmente realizamos en el proyecto. En primer lugar, no est\u00e1 la placa del controlador del motor paso a paso as\u00ed que hemos tenido que crear un peque\u00f1o circuito para suplirla. El otro cambio es que al no tener el joystick como componente dentro de la plataforma no hemos podido a\u00f1adirlo.<\/p>\n\n\n\n<p>En el circuito del proyecto final el joystick servir\u00e1 para indicar que objeto ha reconocido el Arduino nano 33 y poder comunic\u00e1rselo al Arduino uno para que lo clasifique.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">4. Inteligencia Artificial<\/h2>\n\n\n\n<p>Para el desarrollo de la IA de nuestro proyecto, hemos intentado implementarla de dos formas diferentes: a partir de la librer\u00eda de TensorFlow, codificando toda la IA, y a partir de la plataforma web de EdgeImpulse. La implementaci\u00f3n de la IA ha resultado muy dif\u00edcil debido a la falta de documentaci\u00f3n que existe, problemas con versiones, problemas con la memoria de la placa\u2026<\/p>\n\n\n\n<p>El primer modelo de IA que creamos fue a partir de la librer\u00eda de TensorFlow. Se utiliza Python y antes de desarrollar nuestro modelo tuvimos que desarrollar una dataset (conjunto de datos que el modelo va a tomar para entrenar y reconocer patrones entre esos datos). Dicha dataset la realizamos a trav\u00e9s de la p\u00e1gina de EdgeImpulse con la c\u00e1mara del Arduino Nano 33.<\/p>\n\n\n\n<p class=\"has-text-align-center\"><img decoding=\"async\" src=\"image\/png;base64,iVBORw0KGgoAAAANSUhEUgAAAjcAAABtCAYAAABdokAWAAAgAElEQVR4Xu1dB3xUxfb+0nuBhN57L9JBmiiIXew+ewefTwR7e0+fPsvz2QHB7t\/eQAVsKB3pvfeW0Envm\/L\/zuxuskk22Xu3JAvMKL8ku3OnfDNz7jfnnDkTcPPEpBJUkwKq+9Lxu2pLMVqI83yG2+BZNdU+rdrgwz66anqtYWDrc23VXyP1uhjXGmlDFRPAa3W7OXe9Vr+rCe6N\/rvZR6\/IPzf7Z7puH\/SxqjbU2tjXssyx4+Hz\/lczlj6v28V89Vr9bs5Xb9QfoMmNMamkyY0xnHyVyxuTvcq2+TG5kTZ7pe+1KGQ8nROG++9mH00TDE87ZPL5cv33QR81uamlTbUmN1WuBMNrvjrFjCY3xiSNJjfGcPJVLm9Mdk1uzI+OT3E32BzDbfDBi99w3Qb74k42TW7cQc3zZ3w+9prcaHLj80lmYB1ocmMAJB9m8ekc0JobnwoZT6eFqbH3MsExVbenHa3ieU1ufASsi2J9PvZ+LHe81ncP1qOnbdBmKYPrRpMbg0D5KJunE73aZvmxkJF2e6XvbgoZr9Tt4Zww1QY3++l3phmHBmly4+EEcvNxU\/POnTr8WO54re8erEdP2+CS3BgWrh50wtW88LSTrso38r0mN0ZQ8l0en84BPxYyhtefK+jdXJ8+xd1Vm23fm2qDm\/3U5KYyAqZwNziWhrJph2IFU63h7826PViPnvZfkxtDq8020TwYKIPVVJnN04F2u\/4zQdBocuN\/864qzYWriezlNVpr605rbmr15V4j5MKP5Y7X5r0H69HTNpgmNyVsbF5+CQoL+Ytj7R50wpW8CrRlkLoD+Ud4WACCgjztuqtay3+vNTfm8PJ2bp+Oth8LGa8JWTfXp09xNzhJTLXBzX5qzY3W3FREwNS8MziXy2XzY7njtb57sB49bYMpclNcbB2as7qFoXH9YNj\/dmdc3XkmkL3NySvBqnV5SM8oQkiIp9033gpNboxj5YucPh1pPxYymtyYVM97IEydzVufzjuDC0X73BgEysvZfD72fix3vNZ3D9ajp20wTG6K2cgSkptLRkXjytHRCBIVSq2kEqzfnof3PktHRkYxNTg10whNbmoG51rZQfuxkPEauZGC3BA0ngoYb8waU21wo4\/VtdFU3d7orJMyNLnxEbAuivX52Pux3PFa3z1Yj562wTC5yS8oQatmIXjqgQSEhQbAYqmdCSecKpQmqS9nZmDG7ExERdYMySoF2oPB8gQxTwfa7bq1z83pY\/t3Y+7W2rxzmLCm2uBGHzW5cY6AKdzdFjBOHjwTZI6BzUat4c+2ea1uD9ajp20wTG7Ez6Zzu1A8PT4RBfS3Ef+X2krhIYGYPTcTH3+djuiomiE3pTvoWuq3pwPt9lj5oaCRuRfgTUAMjKk3qzM7Fl6r20A\/K7bNa3Wb7bQmN6UIaM2NB5PHg0d9Pve15qba0fEUf1PkplPbUDxFclNYVEZuAqlKEU2KPeUXFpP4uCFFTUxCITcz\/8jE\/33rmtyIX1CBxdreIPIg8dNx98Vo1DQlvbdQ0xUcHKAcoL2RjA609FP6K\/2Wfoayvx61wQ\/JjTt4FnHO2rWNIdQ8FtPOWlhonROSBKMQjlcBx01wk3kiOAruQfzcQnIfqp4DisRGyxTMeW8WWxkfC8s1Mw+Njr1LXNxcll6r32UDnWcwVb+bfayuaabqd7OPhuv3Qf9cNbm2+h9QC311xMLn\/dbkxn\/JTSDfAnn5+di0aTNOnjyJNm3aoGOHtrCQ4AjpkVRUVMwXbCDkLyE+1hdJoCJAxXxTyO8BLKfi30VFRSQHQeB7RT3nSJiMkht5kUSEB6BZkxBE03x17GQhDibzjSaz1jaxpJnysmEzlblNkp2bOb641Gf2Z5hN3m\/2YtRP23fyIyQYaFAvGClpRcjJtb4g7S9QyeeoebD\/Li9Ux+8qEjAjC00ROPogNW4YgoQ6QcjOLcbeAxYU5AvOgrGV8MhPMTPKy1pe7nbHcPnOXq+9LdJnwUH8rSTZ80j\/xcHbkcdW7Jd0XPI4ll8VvkYErJQTEx2I3j0jMG9RluETc0LG5bmWzUNVf\/fut6i+N2kUjMzsYuJTgqysYqSlF6FeIgePbT5+vAgN6gcpQiTO65L3yNFCdVIvNjZIkcZjJwqRzedl\/pbi4oCTY1\/leyFUoaGBqJ8YhOMnirhOrETKVTKQxVUR1u\/dfFl4rX5jrayUy1T9bvaxuqaZqt\/NPhqu3wf9c9Xk2up\/bZMbJe9cgePJ935Mbuzd8rj\/HsxXT+v2SHMTFhKEdRs241\/PPINzhg3Flq3bce1112D40MF8UWTy5ROEuNhobN6yncL8OPr26aNeBNnZ2YiKikJYWBjJTxEyMzO5kw1BTEwUcnPzkZeXh8Q6cXwxJ2Prli0YOuRsBIeGlU4jo+RGduF9zwpXTtCr1+ejW+cwLPgrB3+tzFHmLCE0WXw5dWgdirokA+s35yv5LyQnn4TAUlT2ApfPoyL4OU9ryYudvIvtLEE4yZOdCMhzOSQUUZFBuPf2eEyflYktOwpQNz5QaQGEUMhuXzQEUp60LzJS6iK5krr44hVtj7zw7BoEM5NMjucn1A3G2FvrYMeufDRsGIwTKUX4\/icZC2ubpb914oPQpWMYtmzLR3pmsSKAUr+YHu2ETvokL3JpS04ONQ1851v7Z30h20mSIxmStkuS\/kSxX9LHXOaXZ0Vbkp1tZYRSrsKP+Ywq+aRkITfxcYEYdnY0fpidbojciMYmimP9t6vjFNFKJYHZs8+CAX0icIIE4zAJS9OmwchlH7\/8Lh3j762LzVvz8evv2bjh2jgEcEwWLMrGs0\/Ww+uTUhRRbtcmFGs35GLfgUJiY2UzQlykL0Ka5Kf0W7C0a8+kr5Ja0m\/tystj8OGn6ThOsi1zwVVyncNVCbbv3RQ0XqvfYDMrZjNVv5t9NEwu3OyDJ4+V678P+ueqbabwd1WYie81uTEBlo+yejz2HsxXT+v2mNysWLUG302fjldeeB4zf\/4Nv82Zg8cefhizZs3Eps1bcMUVY7B27XrMmj0L\/\/zn02jUsBG+\/OorRWDG3nM3Pv7k\/5CenoaLL7oInTt3xtRp7\/LFno\/zR47Evv0H8f777+OxRx7CqNGj1fCJBscMuRnUN0K9yF944wSuvDgW\/XtF4Ksf0tHvrAilXdnEF1mbliHo3ikcH32dpl7yfXqGK\/Lz8x9ZSvMhL6zRI6LQhBoR2akvXZmLIQMjcZQvxjokRUKWLjwvms\/yBcc2\/jY3G5ddEMOfWdQWhKBT2zDkkcj8uTBb1d+0cTDmLckhEQlC00YhihD9Ni8LwwZGoT1Nfwv\/ysbCpbkkf2XDa2SghdwkJgTjZr6U33o3RfVh\/N118eWMDDRqEIS2LUMV2RFNxJiLYjFnfhZWrs3D4AHEgkf7123Mw5IVuShiOZey\/R34El+\/KR+79lpwPvsfSRK0L8mCFatycT77+9V3Gbj0whi+5AtYfjBaE8c1JJHkqejWKQw79hSQQBVg2OBIRWa2bi9QL\/y+xGDv\/gIsXpaLE3zB20mRqxeMkJu42EBiH4WZv2YYIjdCQIcMisSg\/hF4fXKKIq0yZveQAG7fWYA\/F2ShSeMQjGZ\/Zv+ahcsujmG\/0rH\/oIVjEYYLz49G0iELBvWLwEr2OzYuCLvZr3gSxJ27CtRY9iKB3s95MofjLvU04ZgKcUxJLcLokdGqrKPHCtGV5FrIjJCt9z5KVWOhyY1rqWxk7peW4oEwraolpup33R3TOTS5MQ2Z1x7w6dhrzU214+Qp9t4hN9+T3Lz4PP6cvwjTZ8zAXXfeiRUrlmPxkqXo07sXWrdurTQ3t910A36dM5eanC1YsGAhxt9\/H\/bs2YODScm4asxlWLZyNX6e\/TPO6tWLO98cRXhWrFiBiePvQ56oUWzJLLnp2jEcL7x1HBeeG4Nzzo7ErDlZSlvTplUITQ1FOHjYgoYkOp99n45Rw6JQn7\/37BKOH37NxMJlOdS8BKlTYjv38iXO72b8nKU0PXfeEI\/JH6Zi55583H9XXbz\/WRoJVAzWkhB07hBK7UkBBpJcTfskDecMYbk0R4h5TMjR+s15eHJiArYzT0MSCyFE8gI9kGzBz3OyS7Uj9j4bGWg7ubnpmjhMYbsCSSgeujcBs37LVESuPutpTJIz87csDO4XiQ+\/SFPkq1uXMLRtFYrDfAF\/\/EW6MkGdf24UOtGBXMhPbHQQmlG78d2PGbj71ngsX5WnNGJvTEnFXfx7O7VEHUkEDrLtazfk8bM6+ODTNJLTAlx5WazKu41EQojJxi356EqyKf0UHIQAiDbLVbJrbsySm1ySm3OHRaJn9wj8762TyjQTGgplfjpnSKT6+fX0DFx+cTS1QkHYT5PVl99nKDIWGxOEm2+IU+1etz4PHdqHqXH5lvkvvSiGZCiTRLEEV4+J4bzOUhqrARzDRtSYWQqEzOXhbJLgKe+m4tqr4nDkiAXrNuXhpuvi8QHnhNbcuBp16\/euZ4dDOZrcGAPVRC5T+Jso11VWrblxhZDvv\/d47D1Yj57W7RG5CadZauWa9XjhxZdw4\/XXYu78Bbjs0kuwd99+LF22nDv4YHTv3h1dqJH57PPPMWH8\/Xh70hRER0cpQnPPPXchhE4Qn3\/5NV8IDTH8nOGYMuUd9OzRHWcPHsyXTRxeeeVVPDRxPDp37eaW5mYgzQ\/nnxOFeYtzFNFYsSaXZCIEzZsEKy1LMonN3oOFOI8vOjl9dT1fxuKrIpoIIUHzl+YgLiYQ999RV32+jy+\/XfsKMGRAJBKpeZGX9EKaum7\/Wzw2kLB06hCmiMpwkqhFJEaipTh8uBDNaI4QbYWQgM+pGThKf41H7kug1qoY+5MLsJEapKsuiVVms2UkD2LWcUxGBtpObu69vQ6Wkzg0J3HJZZt30wwjmifRQIi26IfZWbjy0hjM+j0LrVuEss2hyu\/o6HEruZG3iZjwRMskhGghsevXOxx7SO5akwTNoLnt2jGx2EHC0q1rOBZR09SxXZgibCvX5OG+e+riAPu6fXcBEkgMzyX+W6nJSD5SiBRqKzpTq9O7BzVln6djy\/Z8ZaZyldwlN4JJA47lLdfHYzfbf5x9FBORaOPC6P8ysF84pn6QSq1KuDJDvTklhdqqPOVTI5q4m\/hc965hePyfx\/AwCa4QmPc+SsPtt8Rh\/sIcDCdpFZ+emT9n4qweEejcMVT572TTXLWL\/RdtzVvvpGIM8W7OOZDE+XIW+z55WgrJjdbcuBp3TW4qkDsPXhZGsHaWx\/XqdLfk6p\/T5MY3uJop1eOx92C+elq3R+QmiE4M6RlZmENT1Ak6FHfr2pXCfhBNOUlYvHgJHS9j0alzJ5pKEjD755\/Rtk1bRXi2bt2GJk2aoH37dlizdh1SU1LQv38\/tG\/XBn\/8OY8E4gA1Pr3RtWtnTJ\/+AxLrJWIIyY4kM2YpMWPUoY+GmEiiIgJxiJoJ0aqI9qJDG6up6BBfuBmZRejVLVwRFTGbNG4Qgky+oPbzb9ldi+N0UzqUtqe2R0xI8pJOpOZmJ80TYooRn5Sb6NOxfkue+mw3zThtaALaS3ON7P67s\/4U+npsoE+PaEj207STQV+XFnzZtaX2SAjIZr7kxZwhpgpxNq0YnNDIQEt\/5aUtmpF6JDFZLHcNNQ4yv85i\/0TrkEpNifRTTC7iXJtM4iU+JHl5xSQ3RcqEIqeBOlNLIWa4w8csJDUWvrTDUD+BfSZBEI2U1CHtF6dpMcmIH4\/0Sfomn0ufT\/I78V8RU5uVCBYqfxTRAgmp28o+O\/r5VLfo3CU3UqY47oqvjJC4IvqT72N7RbsiWrQ9\/H3HznyliVO+NMTLftJMCF9Tmqzq07FYNDedqQEsKChWPjsd2oeqIJLS1xBqguR30QK2aR2i6jjCuSaYijZIzF\/R0QHoQSIoJ69kDARDIUpGTlsZGXtDAstNQeO1+g01snImU\/W72UdXc8\/NpnvlMaf990E\/q2qsKfy90mNrIZrceBFMN4vyeOw9mKee1u0RuZF2B\/MNGSKemrYk5qMQanTsgYPF3VJ2to7Hxe155Xoquz+llJXPZ0Ub5FiW\/W93zFJSjtVRVk5byUmiAOU8Ky87ce6VZou\/h5C0XL6I7M6gsttXjqAkCsr5l8+KQ7Ac75Zn5BivHCMOpW+JmD3ErDSCmp\/ZNCfJiRsJLCgOwfK87P5VXepOLKtjsWgFhLzIy03+dvwuWJxvbXU6zkejAy1tlZeqOEtLuWGsU56V\/kkSDKR+qVv6GMT65LSQOM4KFvKdfC6kQ17uYjKSfkge6Yv0PZx\/59ruF1NBFZWWw3pSSx2hZn\/tztPyrPxuf1baIuWqPofLSTljq85ObsSh+Jwh0Zg+05hDsb10qVPaJWBIe2WMBSPBWpzCC3kqSvxxIkiC7W2yO3bLWEfSmVwwkc\/EsVp+F9OVCjPActQ8kjGVo+SyLmxhAAQX8Z2Sn1K+zHM5uWZ31jbSe4MQuS7KTUHjtfpdt9BpDlP1u9nH6ppmqn43+2i6fh\/0s6o21Fb\/NbnxwWQyWaTHY+\/BPPW0blPkRoL4SZwbIQdGT7mYxNJQdhXE708G8fvGdZwbQwUazKTAdjJYdvJjJwYGizOVzdOBNlWZY2Zbf2utfltbpH51GonEpB79h5JpYjNKjAz13Y+d+7yGvZuCxmv1GxqIyplM1e9mH02TCzf74s5jWnPjDmreecbU3DNbpR\/LHHtXPO6\/B+vR07pNkZv2NKk8NSFB7UxlJ1obSe2cuSueTmfOr3gKSE6e1FSqitzURP2eDrSnbaztXZS9\/yoIHsm1kByvJj8WNF7rqZuCxmv1uzlgpup3s4+a3FSNgCn83RxjZ4\/VtsyRNvm0734sc7xGbuwFubEuPcXeMLkRPwRRu99wRRzO49FaHw97NUukBAd46mQSTwMdOiwmMC+uJhdF1Sa58fpkMwmbFjQmAfNBdk8X+6kaxM\/US8YNIepqqDzG3VUFRuROxTw+6GdVzait\/muZ4+HE8cLjXht7N+arp3UbJjeCUyG1NeIrMIIngZoxvkdxDWtvxE8jm86783miSI4diz9HTSZNbmoS7cp1+XS0z4RdlBsCxhSx8OH0MDz2bvZRa278T3NjJ+OGx94H88+ndZ8JMudU0NzY2ygaHHGalIislZIPBEtF4WqP+Gok8Ju357omN95G1Fx5WtCYw8tb69OnuBvskqk2eFkOmarbYH\/MZHNav5f76Jfkzg\/8\/Xw69gbG0Kf1G5iEXqvfQF+dNceT+k1pblxi4WYHXJXrSQddlW3me01uzKDl\/bw+nQdnwi7KzfXpU9wNThNTbXCzn1U1xVTdBvtjJpsmN2bQ8m5en469gXnq0\/oNQOW1+g30VZMbAwPiqyya3PgKWWPlem2hOatOk5sqB8GnuBsbenOOnW4KUk1unCNQa+OvNTfm5r3BtWQmm9fG3s016Un9hjQ3AoahStzsgCuwDdXtqhAvfK\/JjRdA9KAIn84DTW40uakCAZ\/OOwPrQWtuDIDkoyw+H3s\/lzte67+b3MD9+hlv7OaJSYaqNVSJoZLMz0JDdZsv1vQTmtyYhsyrD\/h0Hvi5kDG8wagOcTfXp09xNzhDTLXBzX5qzY3W3FREwNS8MziXy2Xzc7njtf67uSbdq99amSY3JiakJjcmwPJBVvcmusGG+LmQ0eTG4DhKNjcFqSY3mtxoclMeAa\/JXDfXpPn67RUx0r7W3BgXmprcGMfKFznNT3QTrTgTyI2bL36f4m5wiEy1wU1BqsmNJjea3Jwm5IbHqjW5MShcS3fOXhacJqq3qtrMPuCl\/DqglpeA9KAYr4y9G\/PXK\/V60G\/T896NPlbXvNruv\/a58XDyePC4z8fezzdVXuu\/m2vSfP1SkfV+RE1uTE782tbemB9skx2sKvsZfnKh1nB3GA+vtMENIeOVej2chqba4EYfNbmpGgFT2Hs4zuUeP91ljgFNaq1hbxsIr9Xv5po0V7+V2Nj+1+TG7FrU5MYsYt7Lb26im6zXwOLzaf0GmuuV+g30s6qmeKV+A\/10lsVU3R708ZTpuw\/66HcET5ObWtPU2+eCqXVX3QRyc74ar98+Wai1YTtKeAmhac2NXFyYl1\/i\/OJMNzvgSt4Z76Crkjz\/XpMbzzF0twSfzgMDc9en9RsAxSv1G+inpy94aafc+ebJ9SgqErrIGf6UZKrvHvSxqr7X3PW8lVtQ22Yp0\/gbmMuGsvgBufF5388Us5RtHRsad4dM1a17MT2FhIqsUXTGKifkQ3fIjQgcud+pd7dQNG8cSHZUoak+ECpmwfB1flNC1teNqcny\/UTQ1GSXK9Z1Woy9B2vUSP9FtsgddFu2FWLXnkIE87Jdm7wxPHRFcoddeAB69QxF\/XoBKHFTMBqu0M8z+gO5qU2IjMy72myfR3X7ObnxqG9eeLiqsReZUpAPbNpgQXIS5UywldjI56K1UUTH6GkplZ\/\/Lh8VictGRiIoWK7jPq2nnReGRhehETgTEShGWloBPvkiExs2Fth2VsZwkA2U3Bt37ZVRGDYkgg9Ramk5Yww8nUsjcEYhUIQjhwrw6UcZ2L+3kFqcMpOUcio2Sm4KeFlm8ybBePLvcYiNCdcC54yaRLqzGgGzCBRh85YcvPVOhtLwisbXSMrNK0GPrqG4\/944khzqnDWxMQKbzqMROEMRKMRfizLx+UfZCKW2t9ScxF8Nkxuxf3dsHYRnJiTwKRE6OmkENAIagaoRSE7OwnMvp6G4OMAwucnJKcGgASEYe2ciC6ZNSyeNgEZAI1ANAps2pmPKG5kICysjN6aOggu56dDKSm4CAjW50bNNI6ARqB6Bg0lZ+M9\/zZObgf1DMO4uTW70\/NIIaARcI7BxfRqmvpVlO8Bgdyw2qbnR5MY10DqHRkAjYEVAkxs9EzQCGgFfI1CZ3IhjsYmj4Fpz4+sh0uVrBE4vBDS5Ob3GU\/dGI+CPCGxcn07NTaaD5kYOOhWb87nRmht\/HFrdJo2AfyKgyY1\/jotulUbgdEKgErmxRvHT5OZ0GmTdF42AEQSOW7KRU1wAOcDUMIVHKItop06MZ3AZ7\/rSaXJjZDR0Ho3A6YeAeL4c5gnr7OIShNBEFIRMBJF01AuJ4d\/ePShQSm5UdBo5JsXa+b+p01Jac3P6TULdozMDgayifKzIOoBVWQexPGM\/jhRnYUx8V4x\/fR2K1mwDOrdEUL9u\/NcVgR1begUUTW68AqMuRCNwyiCQUliCORkWLMwoxPLsQpwsDMC4eiXYnPUD9ueno1tUYwyMaYlBMa3QMryuV\/pVa+QmL78A2Tl5tIeFICZKgnJJBNMiHg8tQWhIMNIzs9XRdPlMvg9jPnkmPKz8LrKQYU9TM7K4uWQ50ZEqT0ZWLurERjFIWDAKLBZGQw3ikdNAXg1RzLDtxap8Sdm5ecjNK0BkeBgiI8KQmZ2LggILj46FwlJYiECyPWlPBHeuBZZCSF1xMVHquyy2PYLPRfE5nTQCpyICa7OT8P7hpViStQ9CcrhKYAkswR2J\/fHof5bDMm8lSji\/S7hmApvUR\/BFQxB81UgENGTYBw9STZEbWctZXOOBAaKLKqHsCENufj6CKQtEVkjKZ55ghksO4meyxoOCiAHXeSg\/E5kh34u8sIdvFxkgkU5FtqRR7siOUD4TGSXyJScvnzIhnHWFICU90yp7mEfkTjGfEzkm30vKzM6hvClkfLAoVYY8K+VI2Ra2ReqVuuQ7eT47l2PENpXwvzqx0R6MgH5UI1BzCPyUZsHko9xEkdTk8H0q6yGQ\/z3RCFiV\/hXWZR+h1sb6Tm4dnoCrErrj6no9ERdk5QXupo0b6HPzJn1ubJobcSYWTuFzzc1vC1crYSKxuLq2a4lWzRpg6dptSDpyHFdfMAQrN+7E5h37uNgjMah3JxKQcEz\/fQlGD+mNRvWtzE4Ez\/zlG\/izEC0pfJs2TMSKDdsVIRHBNIy7zZUbdqBjm2aonxCPfUlHkXz0JM7u3VmRmJlzVyCOJKhti0ZKAK7auEP93aheAo4cP4m9Scd4zL0JQhjDOfnoCTRIrIPO7Zpj6ZqtFC8S\/r0Yvbu2LW2Pu4Ogn9MI1CQCBSVF+Or4arx3dBmOFvAFTHVwMOe\/vDQLKABuTeyLh19cCcuCVSiRjYdIBFmrsq4GdkfoxJsQ2L65202uKXJz7GQ6lq\/bhuMp6WrdCkk4mZapNNQ9O7XhVTH18PXshWjXsjF6dWmLxas2o2XTBli9cRfiKQcGnNUBi1ZtQf8e7ZUckrSM5TWgLGnVrCGWUV5t3X0QiXVi0b1jK6zdshuxJE1S3iHKmROpGWhYry7lRxC\/26M2ST07t0b7lk2QdPiEkjd14mLQoXVTVVYgiZVsllqwXUdPpOHsPl24+cpnH7ajdfNGLGMXUtOzVP6BZ3VyG3\/9oEagJhAQIvPfw3mYeqwAqST+4Vx4YoKSW1OE3jzSEFiT8Q02ZB9FWGCIVf4UF\/GbAIyu2xEPNhmBpqFxppuqLsdkXbVGbn5ftEYt0Jy8PC7yXRjSt4sSKpk5uRjUq5MSGAtWbFTEJ6FODDbt2I89B4+QwCQoQSRp0\/Z9OHTsJEaR8EiS\/EKC+nZvp36Po0ASrU4nCraGJCa7DxxWQmVY\/27I5S5ozpK1bENHRFMg\/bForRI8zShYJIlWacmaLRg1uBe27DyAYyfT0ItERnZ2IgTPGdADBw4dx679hzB6qLV+nTQC\/o6A2Lw\/OrYWryf\/jnySnDDumOyXpVRJbuydUrdWWhDIdRL673EkOC3c6m5NkRtpnBCbjdv2YsSgnmqjExgYQO2uRWlImjVKxJLVW6k5iVQbnsUrN6MFyc12EhYhRv17dsCBw8fQr3sHRVqEaCzi2he5Zdc2z\/1rHfrzb9EG\/bZotSpHtEIiW2Sz1YOkR5LIkgYJddRGStLWXQcpO5IpO\/oomTLj96VqE7ab8o3fojAAACAASURBVKRZo3pKqzOU5kCpc+7SDbhoeF+cSEtXskg+10kj4M8I5JLY\/Ds5D5OP5YNXwlHOlLW2KnJjz1HES+Ms\/DeIZqoXWl6ExiYJjlNyQ+WtzZ\/YuOZGbgIXn5tnTQbxm7N4DXdEHZQK9o8l69TCFuEjLWjbojEFSnvMW7YBnds2p8YkHj\/OWQYLTVSiLbl85ED1nAimIFLBAT07Klx+I2FqTsHQqW0zrONOSQSDaHe6UcAkxMcociQ7qsHcEYnad\/rvf3FnVYc7pfrYuH0vRpLI2M1eaRnZWL5+myI32yjsNpBIteHuSYTTKmqVhvTpivQs5uGu6pJz+\/vzPNNt0wiUIlCcuwKfpSTjrZNHkWFJ5Y4pyDi5kVJEi0NTbuCQsxD2zFgEcP2YTTVJbg4fS8Hmnftx3tlnYfWmndhCUhFBs\/NVFwxWa3f\/oWNKFsja37kvGY0b1MWhIyeVSSj5aAo1uZHo062d0tzsOXBEaX5lI2ZPf5DE9OnWXmllZlCeiFa5Q6umigwtWb2FciqIGuRu6vfEunGM5t5UPSokU0jX3oNH0ZeaIfleyujWnj5OJEq7Dx5Wz4n8mrt0vZJDx1LSSLySMHxAd7OQ6\/wagRpFYApJzRNJuZAzCepybofkitxI1mKlxSnEGJqonm42CtFBxt0\/qiU3LNuwWcpdcjNz7nK0adYIaZlZaqEHlNB2TfIiuygxH10yoj\/mk9x0oxOj2OgWrNyErtwpbqNwak\/hIQTmAAXTms27qclpo4RJMoWSCB9RQa\/ZtAs9OrVWxETIUdOG9ZQWZ8uuA+hDDYz41SximQOouYmPiVbqa7G9i\/pXiFAufXfk+4uG96PWaJ\/S3PTu2k6Rqj\/\/Wqs0SiIYoyMj0I\/CSSeNgN8jUHSMEfQuRVFgLOZGPIg3TqZgR\/ZehCuCQzNrVWapih2zaXBCxl2FkHHXmO52TZIbkQnrt+3BhdR8iOknJjqCvjBWH72jXNOtmjTAcZqPRMYI5WhMzfCe\/UdIWNpyc7MTh4+n4NqLhipzkZAM0aqI2cmefp6\/UmlyxJfmV5rxzu7TWfnQCClJ5wZJNmyXjxpEbe8m1Ksbjy6UTZJyqDkWrfXKDTupmY6FkLBzBnSjHIvCfsq\/NTRx9ZPNH2WSkDBp\/5ETqdhCDfbIIb1MY64f0AjUFAJrcopw7a4sJPFUVISTu+OMkBtpKz1wlZ\/as81H45rEsww3v9bJjeymDh9L5WKOUPZvMRm1bt5QCYlN\/K5diyalfi4ZdC7Oo7BoRZXxkeOpyimwVVMa7Ji27TmozEOisRHtj2hgJE9zamPENi3qXyEh9erGogUFmZi3LHQy7ty2BQlLKlIzc9Ca5TZpkEB7+nY6BRYpQqV2atT0iM+NqLaFFInvjdjW9\/Jz+axOXDQJVBvutPQt6IZnns5YSwhwC3HyZeDI41b9bMxQrIq4H6+lBmBlxk6EyjFJfp5DkXJ7Yj88\/hwdisXnhkTfaaJpJ6BZfYS9\/jACudEwk2qS3GRk5Sh50J7rWOREBB19QyhjxPQk\/nUdWzdT\/ne7qZUJDQ1Wa\/pkaqbyx5HDBtv3JikzuDgGi6wRGeR4qGHH3mRFeML47Ir1O9SmSLS7cuAg6cgJtOYGrg3l2t6kI8qRWHz\/JMlmSWRVHDdWslGTDZ34+0ieTLZ59eZdykG5BX0JZfcnm64smuzlOdFs66QR8EcELJyrjxzMwRQ6EEeJg42TJHnEs+ZxvsJXZ3yJjdnHmNe5Zia32IKzoppgUpsrUZ\/HxY2kWic3Rhqp82gENAJeQqAoHdg\/FMjdwKu4bWWGtcWu6PGYkt0Kv6WT2BfnoTGPYd5arw+u\/2Qrin6ch2KeICSrr9wIMU+RFITcdx1C7hxjqpE1SW5MNUxn1ghoBDxCYFNuES7dkYXDZDDhNj8XxwLFTCVK0i4RIbivfiDWZ\/6O31J3IK+EcbWcxLkpUs7BwHPNL6SJypivmSY3Hg2hflgjcIohQF8bHBjJLVOGVXMjSezBIQlIixuP9\/J7IaMkhAKkizqOGZdRgGKaai1TvkUxnVipmqjcYZpWAs\/uQe3NQwhgWASjSZMbo0jpfBqBUwuBOelFGH8gDycKi5FHp2L5zyporKek6lKbM65+GK6sG4YmPKKdy7haSzP2YfKRJdiXZ\/UBrJiyGVj06oSeeJHOxWI+d5U0uXGFkP5eI3A6IXDyNeDog2XExt43kTs8hpnTYBoK425BLJ1ZHVMRY90UvPQRSujvQae08ojQBBNAc0n4O08gQMwnBpMmNwaB0tk0AqcUAiWYmbIfy7KLqG2JR1pRMA7mB+FIYRCD9hXzXxHurR+CZ5owllMFjjLj5Eb85+DvJDsWHhcvL4Mkanrf6OZ4t+21iDHgWKzJzSk1aXRjNQIeInDkAeDEm2CkPieJHzb5Aoh14hxMtXDB01NQ+MM80CGk\/LM8ZRRAn5zQNx5GEMMvGE2a3BhFSufTCJxaCDyxfyY1MXtRn8e364XEITGkPkIC66KwJBwMwIAbebinY3hlISSkZuzub7E4fQ\/9b8prifP5XavwRLxHctMszOqzVl0qT24yeAiI+h76xVqPTNTAaSlXDfTW92lpWTjJmBWtWjFQX4Vdqbfq0OVoBPwegaPjGfTlrcrkRlZ7MCMOt\/iTpqceTrtheW86Cl77FAEVo+JyJ0YPXYS9OhFBjB1lNGlyYxQpnU8jcGohcPeur\/Fz6hZEB4aq2E+RgcEqSGgU\/x4Y2xoPMTBfbJA1QnfF9OT+2fiMwUXjKnwvQUcb0Jn4fZKbdhHWOHR+T26EeHz\/\/Tz0798ZXbu2KW2vMK\/1PIY5b95qFX780kuHoC1PFCQxYvCPPy5AHk8xFPIKhGuuGUnS0hg7dx5Un0dxZ3n99aMQ73DC488\/V+Kbb\/7A1KmP4QiPhR5mEL9evaxxcXTSCJwxCByl5uZ4Bc2N1RTOizF5+qbZ9\/S\/GeAUDssr\/4eCj35EAMM0lEsStTghDmFvPoIgBvYzmmqK3GTx1NGXX\/4OkTMSwqGYR9i78Yj3yJH9MGPGfOzYcQAtWzbCFVeco8JAfP31HGTy9OTf\/na+kiVz5qxAo0YJ5WSTvY8il777bi569+6I1q2bqI9TUjIwa9YiJCcfRxeGpxC5JXXOnbsKa3hPVxyjEV999bmoy5ObUvZmhrEQGda4caL6PovXxgwdWv2R1+PHT2DBwkUMGG3B4EED0ayZuZNqRsdI59MIuIPAfbu\/w+zUrcp8JHoSOcotYqaADsMSbfj9dtehbXhlgiL5Htg7g2atzZVMTxJstDk1NqK5aRnm+t6pWtfc7GYwqjff\/Fot\/Kefvh3XXktnR1sSAfPyy\/9HAcNjkZm52MvjmB9\/\/C8sXLgOr732Oa68coQiPRdeeLbK88ADr1MIJVKIZSIxMQ7\/\/OedSphJOiRRhHclk9C0J8GZToF2EHfddZkiOBIZdNWqrcin70BvXvEQziBax3g8XYjTyZMZ6ohoz57tsX37fmQwRo4IRhF6OTzmuXHjbvV969aN0cSEv4E7E0Y\/oxHwGIFjT5PcPG89KaV0s\/wXyvuJwvqjJK83SjJ6IbDL5fy7vGNwCcMe5E\/4H4q5Xq2XtDgkbjICeMQ67N2nEVjfeDC\/miI3sk5\/\/HEhZUg2yUswPvlkFm666ULUYcTzb7\/9kxuh8zF9+jzKkUFqk\/TJJz+z+8EYwCB5gwd3x7PPvo+nnrqdBKJBJfg3bdqNZ555D6++Oh4tbFGHhTAtWLAGbdo0UeRl3Lgr0YMxsF588WO0a9cMGzbsQkPG0bn77svxv\/99RlkSyY1YNCZMuB4PPfQWrrtuJAYNqjpA3+49e\/HFV18hOiqKPg2BPDKehfNHjkS\/vjpCusfrQxfgFQQe2zcL355cR41NaDnXXzvRebTpubi5ft9Kda3NSsL4vT\/guCWz0qmpHNtxcPG5qRPs+r4p5+TGFqFYRN\/NE5Ps+7pqO+1uEL9163aSQKTh889\/xfnnDyhHbuyXxQlBkV3Qrbc+y13SS5g9+y8sX74Rr78+UYVRlzRnznJMmfIdd2KvMO8J3H77v\/n3o0rASPrjD0Zk\/exXPPfcPUrICHm56qoRuPzy4RRms0l8Dqpdm9T1r3\/dhU8\/\/YXapLncebXG1q17lWCTgH9bGPF42LBeuO++a1j\/F6ocEZIdGRNHdno6aQT8GoGs2UASyQujfkJu3Q3thZLcs1GyOw4lq3agJOU4Akdfw9NPo+lbE0sCxGjgvN+oYNK3PBI+n6RHNgsVvADltBSvShGHYjFPGU01RW4c27NnTzIee2wy3n\/\/ScycuQhLl25UxOXtt79GHwbeExkgGyEhKqsZ+TyC8WZEoyIbKftGybG8N9\/8Cunp2dxI3VH6sUQ6tuedOPEN9fxDD92otDdiEv\/116VKFt1\/\/7VKw3P11ecp+devX2fKoSRFcpzVZa\/g9TffxtAhg7Fy1WosW7Yco0aNpAw9iZtuuJ4kybUvgtHx0fk0Au4i8OHR5Xglea5yCpY7ohyThfdGNQ6Lw\/2Nh+DcuPYq6rCFcmZb7jG8kbwAizP28LRU5bAT2UUFuIinON9odXmlMp21s9bJjb1Rt976b0VuxJzkLL3xxlckLceoyfkHyc1ifPDBT1TvRivC8Z\/\/jMXKlVvU7mzatMeRykijd931AndUd1OVbFWTC7n56KNZ+PDDp\/hvpro87x\/\/uAb7GYX0zjufx403XoB69eLxyiufUZP0INau3cFnlqvyfvhhPt599wcKw1dJbvbihRc+xqRJD+PJJ99RO7177rlCCTCdNAJ+j0DRUSCZ8WgColCSPxwl2yJQsnYPSvbv5H1Rcrs1exAdg8DuvEqkIe+MyuWR8eiGyP9yI0p43QgiK5AXe5ybO8Yg5B\/Xmep+bZAb0bIIcXjyyduohc3G+PGvU4u7X5mU3nnnUYgmWTZJ4TzSHs3AoqKVrU9t1Nat+6hRGUUiUXbFimiWJ0x4jfLjMmp5KvsabWDU4Zde+j+SqVvQvbv1HjwxpT\/66CSl\/RVz1fPPf6g0x5GR4ayrgHUlYNu2\/RgypIfSLsl3FdMLL\/4XTzz+CE32GzF56lQ8+vCDmL9gIQafPQgd2uso6aYmoc7sEwS25BzF7Tu\/RHpRHjUwleewXKmQEBKFIbFtlHNwWmEulmbuw+68k\/TNEaff8oRIrmGQu6YeaXIubmvQz1CbTwlyI2rkJUs2kNjcRy1JrIrYeZTXK8ill5Mnf6eEUN++nZXfzscf\/1PtpG666V\/U0PydmhfrhXVCbj7+eDZ3bE\/gvfd+4CcBitzIzk0E3gUXDFQXZ4p5a9SoAUpdLVoZ2ZF9++0f3GEtoYbnX0rIPfTQm\/jii+eUg\/Lbb3+DAweOKtXzeedVVrMZGgWdSSNQYwjQ+ff4HyheTD+29QdQcmA3QMFCrz+aqmynF7izIvtni+QWcJqceg9GcURfWD781eqIrK4osCVG+ea9AQh\/4yGas8r85Yx0p6bJzQFGH\/7HP\/7HzdA45T8jGyQxK19xxXBlPhLT0IMP3qB+z83llQjcMDVgxHLZVA0Z0lNpXGTjIzcNS1rES3ZlozR16uPcZJU31Yn\/nxAXMTFdcMEglV80Os8994HSDj311B1K6yx17N9\/WG2y5HPxJxw6tBd+\/30ZJk78m9o8VUyvvfEWLrrwAiQfSkZ6WgZGnDMMU999H\/fcdYfW3BiZeDqPzxEQ8jJh3wz8lrIdkRVOPdkrLyRZkX9iqpIVJVqeYP5zFsMmn+W1CKuDae2uQaswHnwwkPyG3AgZGT16IG64gerwUrlZSEIyiz42a5UwaNIkUe1wxBlYdl+iMn711c+V0BCT0BNPTFGEZt++w9S0zCCReUr53kgSs9UHH8xkeU+T3PyIg7yo7umn7yARysLYsS8pQTJiRB86A6bT0S8Ob731tXJAFHLzxRe\/ktws5s\/nlb1cdl7vvvsEyVC40h4999yHyqz16afPGoBcZ9EI1C4CJcnJKHptIjU4u2h6YihzR7JSrmkkNzSlBITSbj7qVhR8swXF2\/eU+dzw6xKSgGA6w4Y9drvzCMbVdLWmyY34t8i6F4IiacIE8dFLwCOP3Ewz0S\/47bfl3MD8U5mO1q3boQ4niMlo2rQZigDJgQTR2NrJzcMPv6XM0XfccWm5XoofzosvfqI00ZdfPkzJKtEAvfLKp\/TT40WCT9zKKx5C1KZM6krlNQ8vvPAhzVTX0Qfnc1xyyWD89NNCErHr6KNjvWDTMW3dth3ffvc9iRd9gKg5S0lLw8AB\/TB8KCNP66QR8BMEFmXsxgN7fkAOzUkhToLy2Ztpd\/2rqtn2yzPHNTwbE5oMN9w7vyE399zzktJ8yCkCOSElDr7Dh\/fCvff+VxEIccATh98HH7yRJqNt6pSDCAhxEBRHZNnhfPTRTGWaEuFz552X4qKLBpcCISeuRIBNmfII1b77qJaeqlTFDz98E7U3G\/jdb1QJxyszl2iI3n\/\/R3Xq4ZFHbqKfz58UfMtIip7kyYa9akf2wgvj1KkKySMOzLI7GzPGOPCGR0hn1Ah4GwFqPot\/\/gzF09+zEptqBI+quiAPgb3PRlFQTxS8P5tkh+obeU58bagBCf33vabvlZJia5LcHOe9Ug888JrylRs40GpCEq3JlCnfIyEhVq3j2267mBqas5RGWPzyRJvbr19XyoNP6H+zTfkDXnPNeepZOXH59NPTlHwQJ+FSQS0X\/NEB+Y8\/VvJwQge1QRo5si83Zg1Iaiar01OioYnlLeMTJ96g5Nok+jMl8LSZmORF7vz66zI6FHdTmuWqfG8OHTqMRYuXqDvw+vTphfbtjMcX8vZ00uVpBJwhIH40LyfNxafHVipyU9H3xghqQnyEHPWJaYZXWl6mTksZTX5DbsT+LWRFTirJDkeEzbPP3q2ORQqpER8ZIS2JDP4j6twTdHIU81S9elSJ8xl7EqEjwkPyOSbZOYnQiuUleVKOlC9\/i3ARu7aYmKQN8r0IGlFLFzNstJyKEju5tEFIlrRD2iT5ROsj\/j0xPBor7dBJI3DKIJCbjaIvJ6FkwY\/UB5OsOHHgK+0LX6CgxjRg5G0o+GID\/XRoymIK4BoLfeYeBA1175ROTZIbWf+yvivKBVnDsvbF3C0HAySJXJG89r9FToi8aNKk7OiqlCdyQeRAxSRl5vNCUckjTsRi7o6kr5LIDfmskFFaRUaJL4\/8lPwiQ0SLI\/lFMy3yROShThqBUxmBE5ZsSNyauek7ERYQjMAqtcSVeynmqpwiXm4d2QBPNRuF\/jH0ATSR\/IbcOLZZ1LoihIR46KQR0Aj4CIGcLBR9PRkli38WhxCalbhJqEr45OcisP8wFBV2hkW0Nwx9EHrH5Qi6ZBiJket7Xpz1oCbJjY8Q1MVqBDQCLhA4VJCuNDi\/MO6NiBchOa6S+OJITJx2jIXzRNPzMCTOnD+flO+X5MZVx\/X3GgGNgJcQoMmp+PdvUDLvJ5QcP2QlN3K6QREWG2mRE1EMFhcQzoiiI25B4dZ8hPDkUGBnq7O+u0mTG3eR089pBE4tBFILc\/ABj4fPYnC+JJIdcRy2uw6LJUVEjIqBYzsVJcH\/hsW1xZ31+6NLVCO3Oltr5EYq1kkjoBGoZQTsmpoDO1GyegGK1i1BQMoxOgrzBJWcmpIkAf3CIqit6YLAEVcgoE03BDCejVrBbq5jEWgHDtKR9pU0mmICaJIxhkNOTgkG9AvBvXdL6IVgtTvTSSOgEfBvBOxO+OuzkxXBWZF5AIcLMpBP7YxoacQjJ5TXM8SHRKB7ZGNcUKejOiYeHmQ1zTpb5\/Yyq+p5jZEbLYT8e\/Lp1p3BCDiYokrSU4DU4zxJtY8EJ5ug8GBmfe6c6vNIct0GdCa2xbmxMhu3QdPkxm3o9IMagVMSAXXE26YMPpKfQQ1OGo4wEnGaJVddkpkYEq2Oe9cPjUG4zQfQDG+oSHa8TG4C8cwDCTx8wV1dpR1VBbu8e2b6U3JQdaM1AhqB8gjI8j+QlOW+5uYu0dwEeUCv9IhoBDQCNY2Amde+oa1TpUxlHwgHkcNHG9anY9qbvM4hVG4Fd+v6hWJ0aBXkQG4cYHPokZnO1TTwuj6NgEag5hAQnxt3zVLjbOSm5lqra9IIaAT8EYGq+E0JzV1l5CaD5IZePubIjbXovHxYyc0Eam54WVZVyYyayR+B1G3SCGgEPEdAm6U8x1CXoBHQCFgRcOZ\/YzdLWTU3Qm4ko80yJlc8VH9xpp0zBSCvoAQdbZqbABu5MU5ktD5HT1KNwJmEgLj5HDjopuamPx2K7WYpQ7rrMwlZ3VeNQM0jIMvQzYgQPm\/szh0FmPQqyU0I76fizeJyGbCcCq2C3JSRGitrEs1NCTq0puZmfF2qfhx9bqzERY55OSZNZ3w+proCjYDfIiA7rYNJ5k9LZfO01CCSm7F3JlKiMF6GPi3lt2OsG3ZmIGAlNtY3+uHDh5Gdk2P1GzYRsM8sUnb+4MgqKnIKu8\/Ntq2Z+OLjTEQwlEV0TBN1d1UxT2k5ITdlxTmqgvILitG0EW\/bvTce8XFyTNQabNl+b4RVi1Opeid90rTH7EDr\/BqBUwsBXpQXUIQNm3IweVqGkhFGd32yieraORT\/GBunrkopKTF4hvzUAki3ViNwCiHA+DR8v0\/lDfVT33mHEb9Pqmjb\/pCEX+XnFyMruwjhodHo1OFq9O05Th16qkBubMRGXUleloS48KYCtYm65NxIjBkVaQsdXi6XjdxoPbI\/DLpug0ag9hAoxomTBfj0yyxs3spL9YKNb2h4O4G6LeLKy6MwfEgEf5dop8afr70+65o1AqcrAkG8e3EWbrrpdgY6L+CmwxYuooa6W1W8G+ElcnNMXi7v0isJUCapkqJCDB\/8b\/TsfpsjuSkzRdm1TWU+NSQ7lC9FZDhB\/NmjUyi1OPzF9kipzkbYT+nD1p5XNFc50+\/UEEZer+aMFLl2\/ut1NE+dAk+LcfdgD1Jd\/2X5FxYFYPvOQuzbXwhereTUGbC60S4qKuHmKQA9uoXwmhZGNyXh8Yfkl+PuwTiaxdQv+2+2E27mr5G+1+BYmoEhJjoe7773OL6f\/jZiYumWYuZhX+S1cQzhJ4UWKl4YJNTeqPz8NHRsdzkuOn+andxU1tg4EhsEUM2smIqobwKQT+di3i\/pkKyURYhMqc6nmvPpnvS31oF1aDxhqZXkDxj4h1LSR\/C7GNfaxt8r2Hswd6vrv31\/E8LAo6EhZULH7EiJBiefJirZmTma9k1h7wNSZKp+s502kL9S\/R6Mo4HqKmWptf7LvtmdBnvpmRqpu5qxrJH6q8AqPDwei\/56Ahs3v8dLrOuocSgoKIClMEu99wMQxotjoyopMlxCr6xB1k47amfk9\/z8fHIMCyIj5OLaMi2KXOBgzVuGiKN8yGfwwPZtL8ElF7wn5OZg6V7cucbGZo+SKpihVLBWUsGUaX5UYxwGynq3hK0T5iEoh5FXBLtL1I1lOCPJzZmgufFzcuMVQefBS9Er9RtbYp69XD3oY1XNq82+q5dAxYb5oI\/VDU2t9b+WyY1T7N2cw1U+5sfkZt6Cp7Bm3bskN\/E0TVnQvn17XH311SQ1wVi8eAV++PFbREXGK1IiqZDmISEBIcGhfCYc2dnZNB0Vqb+Dg4NVvmK5liGQql2mYO6GQvivsLAQeXmpaN+uO7p06YKff\/mFecWBOZhHvUN4sa9VqyLxbSyF+fTlC6YjcYSD5iYDHdpdhotHv2snN9Ydlkzcyhobq7aG\/6vv1Qu93Ay3fiB6G0klkkH96sCs1Bc1vAq9PfGclKfJTQ2A7KQKnxNcTW6qHdhae8E5e7lX19LTT+RoclM7IkfV6vN5f4qQmxyelrruuuswevRo\/O\/VlxXxCCXxWLlqFXp076GcjevUqYOEhHhs2LAZO3bsQL9+\/dCiRROsXbsRKSkpihxFR0ejdevWiIuLw+eff05H5aOIiopDr169MHToUMTGxmLy5Mno3KUDDuxPVqTo2muvxuzZvyIpOQldOrfH\/v2HsH37dtILq0ZHNDcd2l1KcmPX3NgciMv72JRpbKx6YUV9Sge5lMzYRj1A6aNtM8+HQsXnE8zE4tHkxgRYXszq8zmgyY0mN1Ug4PO552KdnLH1+\/CdYlQ0+Rx7fyY386m5WWvV3OTk5uCySy\/D2LFj8ddfc0lgdqBly1aIiAhXBENIyKBBg6jRWYCYmHj89NNP+Pvf\/46du7agTnx97Nq1CyNHjsQv1Mqce+65SE9Px0svvYCDB\/fiwQcfR6OGjRDOso4fP44vv\/wSt99+I5o2bY358+djzJhL8d57H2LPnj245da\/oWGD5pgwcQKSk5JIsMLoMkNyQ7NUqebGbu8qJTdKS2PV2NgOtJcSm1IGGyAGbWpsHEmN4yxRA1VGhkqZD4v0VInj80lmcLZrcmMQKC9nq+3xPy3q9+BlUZv9N1W3B32sasqaqt\/L896p9sAHfayu2bXWf22W8sFsMlakEJq585\/Eahu5yc3NxZVXXIkR547A22+\/iUOHjqBRo0b4+uuvFYmpX68+OnXqhOf\/8zT+97+3kZWVjfy8PLz40lOYNOkjZaY6cOAA\/v3vR\/HYo89h0cJFWLL0d5KadtTUTMK4ceOURue2227DyhUr0b5DS\/TpMwgfffQR62mM119\/DXfddRdatW6KgQOGYey4sdiyZYsqV2lu2ormZqrVoVgUM860NvJF2WQuIyoWeigX8uRU+Ykus8+BuZQSI+E4rlaguSXjc7OEsTH3vZrSYDtqNJvNSdPciHm3hT6vW2tutObmVNHcuBKt3l16tSfzNLnx8kgaL045FC95Eus3vsdj4PHIpebm4osvwb33jsOKFcsVuWnVqhU1OBvQpEljanAiqZEZgaSk\/Th2LIWalncxYcJEEo9M+t5YlOamQYMGeP75p3HHHeNw2WUX4cknlc5TTwAADhBJREFUn6Z5aTPuvvsfJDJ9lGkrh346QdQCSWiIxo2aMc7OO9TcXKHi7CQkJPCwQT5NXa0xfvx4bNu2TZGbPEVu7JqbB0luFP+wOdPIyajS323Kl9K3CUlNYQka1w9GQh0HT2fbSSm1s7ATHJvfjfjguH4ZmVuhrsszPnAe5TTXbI+qcnzYH\/rvD23wGqAVC\/JzcuOVfnswd2tz7E3V7UEf\/VVz45Wx96AQU\/h7UE+lR\/2A3HizO07L8lOzVFRUHXz19WPU3rxLP5k6PHpdTAITgWbNmtHsFK00M5mZmdi5cydDN9SlGelOko4W1LR8iOTkQyQ4x2i2akni04jEZg\/JUS59a6KQmnqSpqRwdOjQjkToEH1xTpDIhNKRuLNyLE6iqUli6jRu3AhZmVmqrMR6icqBOCsriwSpPp\/JYL5kEh1GJCb3UOSmzcW4+AI6FN9CcuPMHKUUL8qRmI46Nn8bC4lN\/x7huP7SONRLkOBaPpAePp9BugKNgEZAI6AR0AhoBIwhEIxnnv0nXnrxv9SYMM4NSUQRYzTIcXBJomWRz+S0kzgbyyknISWrV68heQlVzsb5+QXqmZCQYJVfCFIIb7oUUiLfSTRyCdgpf1vLFd+dIKV0kees5YeS9DBQnxBdnpaSk1OFhRIHi3EnbCk\/Px0d24\/BRaOmlCc31qPgNg1OhV5bCotRv24QHhtXFw3q8eiVThoBjYBGQCOgEdAInPYIiDPvjTfeqDQ01UUoVtoT+tfYtTvOgLE7HTt+JwRGnjGfSlQ8LAtj78l9UoEBgRgx9D\/o0ukaR3IjUYjFiViRptKfKjQfP5cCOrQmgxvfgN+L1kYnjYBGQCOgEdAIaATOBATk5NKkSZOUmcmurXGn32KWkrg3dpIkmhrxlxFTldkkCpm8vCKkphQiPCxWkZoe3W5Wmp7yQfwY\/a804I2tFiu5sUYLbd8qUJGbgMAyNZDZxuj8GgGNgEZAI6AR0AicegiIr4s9UF9Vdz7Ze1V2SKmsn\/KMOP9OmDBB\/ZS\/GzeWE1Cvo2\/fvg4Hm8pj46wuKV8+37I5HR+\/l06yFMKIxnVVcMDiYpqyrBGKlYNNWYC+UsuU3Rm4BHlU+7RvJZqb+prcnHpzUrdYI6AR0AhoBDQCfoHA6tWreVLqDmXmmjp1GuPenOd2u7ZtzcE7b6bzuhe5nKGIPjhU0pRpbsrITdkJbivDUfFuSHzyxCxFcvMvTW7cHgT9oEZAI6AR0AhoBE5nBOwaG3UVpdKu2KPB2MLJyDVOdCpesWKFMk+dc845yt+mvKan7FyeMjHZ\/nTU4Ng1Nxs3pOPdt9N4PYNQFqlM0C01S5X521hj28i3Nq2NzcnYapYKIrnRZqnTeWLqvmkENAIaAY2ARsAdBByJjRAWISNBQe5FppOyihlPT\/5JGRUJThm5SSO5SSe5sTMgRV9sZilR3Dg5JWXV2kgX6VAsZqmWmty4M+D6GY2ARkAjoBHQCJzOCFQkNsIb5CoGT5KUWcgj33JRZgBPQjnT4GzcQHIzieQmRBEZaypPbhwOgduvVCglPfRItp2W+tf92ufGk8HSz2oENAIaAY2ARuB0QsCR2AiTsFh4LJumJ4lr42mS01RWDVCwU3KzieRmGslNMM852WPylZmlbISnfIQbq6+NnQhps5SnQ6Sf1whoBDQCGgGNwOmHQEWtjcViIRkJUgH8PE15efmK1ASTvdj9bxx9b0RzM21SGusSf5uyODbqtJRd1WN3IbbqcGyHqGxRiK0Oxdos5elA6ec1AhoBjYBGQCNwOiFgJzdWH5liam4sSnMTHh7mcTdzcnJVWRKxODAwqJL2ppTchIhvj82Vxm6WUuRGmaLkFzvzcSQ34nMD+ty4f1rK7vzjcU91ARoBjYBGQCOgEdAI+A0C8n633o9tvS4hP99CMiLkJrxSG8VktW7rHmRm5yEuNhLNGiaifkJ8lX3Jzs5R\/jZi4hJtkCShKnbtTTmfG0VuSHIY66ZMc2MnN462KWWWsmpxFLkRzc395k5LzZ79F375ZTFiY6MYgTCSl2pdwmvLE\/1mUHRDNAIaAY2ARkAjcCYgsGXXAUUKOrVp5lZ3RStzIjVDHdtukMjbs23JTm5KVAC94mrJTUpaJp6f\/CWSjp5Ejw6tWE48OrdtgYG9OpVqZRwbZyU31rur7JGRy5Gb9al4d7I4FJPUyC0LoOOxHEEvNUs5ITfqOgZ1JNwa56Y9r18wS27eeutrBurJwT33jMFnn\/2KvXuT8d\/\/3k\/7mFySVVTqTX38eCp27DiAXr068sbRMAWeeEk7OiRZL9EqVuzNbkqz\/h2o8i5bthHt27dAvXrxpazOrRHUD2kENAIaAY2ARuA0QUBe7xt37MMvC1ZCLiK48Jy+6Nq+pVMyUVWXi0ha5i3dgL\/WbkU039HdO7ZCYp04tG3RCFGR4Upz40hu5L0cEVFZc3OS5Oa\/077FsZR0NK6fgIQ6MYih4uPmMSMQ5sRHx0puoC7OdE5u6HMzmT43clrKlkqvXyhnlioXndhumrKelmrf2rzmZsqU7xXRGDfuCnX759ixL+HBB29ERkYWFi5cy3shCnD99aOwYMEafPzxLP5+vtLuyHdr125XJOeuuy7Hpk17MG\/eakWKJI+QrhkzFqgyhwzpqRyXHnroTYZw7szQztfzyvVGp8m01N3QCGgENAIaAY2A+wikpmdh1rwVSDp8QhXSjNaTi0f0Q3xstOFCD1HT8ukPc1X+IX27QspctXEHhvfvjmH9u6l4NEJuROEgVzTIMfCqyM3LJDcZWTlo07wR9h48qgjS3deNRnRU5Uu5s7KyFYeQG8atMXPKB\/Urcyi2xdOxnfZ2rrkRbY39hnDbSSpPyI0QlL\/\/\/SoFyp13\/gd33z0GKSkZ2LBhJ\/76awNvGx2NTp1aYdq0GXj55fuU5ubTT3\/BoUMnSHLW4JFHbsL69btIcHYxZPNl6NGjLR57bLIiRjExkSrfG29MwDPPvK\/q6dixpToXr5NGQCOgEdAIaAQ0AlTYkHxM\/WK20n6M\/duFpiARIvLjH8uw5+BhJMTH4uJz+iGdFpk5i9eo9\/Vl5w1AU\/rOiDXGSm4KlAOwM3IjZq1X3\/8edeJiMGbkIPzfjD+UheaB2y5HbHRkpXZZyY3V50bKrExuUjGNEYpDQ\/mdzX9Y3bTg1CzllNwUu2WWmjTpOzYqSJmlZs1ajJkzF+Pmmy9QWpqxY6\/Ehx\/+hGHDeqF797Z4++1vMHnyI0pr8\/nnv5KoXE0T1qe45ZaLMHBgVyxduhHTp8\/nPRT98Ntvy3DWWR0wfHgvxeaaNm2A8eNfxaOP3oI2bZqYGjidWSOgEdAIaAQ0AqcjAvkFFhKRbASSIEz\/fYkiN2NGDoSYmeJiopyagirisGbzLsyau4KmH3EnKUZdmpLEMTiLTsEFLL8F37830awUxLLlc1fk5sWp32DQWZ1wwfA++PzH+Uqj9OCdY1yQmxDlpGyP1Meq1O8bN5SRG+tVD7Zz34bIjbpW3D1y88EHP+HPP1egc+fW2LfvMAnNFSQi9fDEE++gd++O2Lx5D++W6IPzzuvL717G2Wd3R9eubRS5GTiwGzU7G3HDDecrc9Tq1duUX86VV55LH5tC\/PDDArRt25RkpikuvXQoHn74TbbTggceuA7t2rnnMHU6Tm7dJ42ARkAjoBE4MxHYuH0ffpizFFH0f6kbH6OUGynpmcjOzceYUQPRpV0Ll8AcJPn4ZvZCZOXmKQKjrlYQamEjM53aNsM1Fw5VFh9X5EZ8bl4iuSkoKOQhpSbYsH0vmjZIVJqbmOiqzFKiuXFObiSI39S3U3n9QqAiborcWE9LJTHOjfIEKrt0qjR4n83nRpEb93xuMjKyaTY6rkxIzZo1QEJCnALyyJGTOHYsldedJ\/K4WCiiqY6SfOm047Vr11x9L783bJiASDorZWXl4sCBI6hbNxatWjVWZQhZSqFTUkOqw6ScNIJ28OAx1lMf8RxEnTQCGgGNgEZAI3AmI7Bz3yEsWrmRmpoShNNvJZiWjkgSHdHo9O7WVvm9GEniG7ODB4LUISPbiR4hOWFhoejZsTXqxEcrrY71KHjVZinRGImmJo\/1q0NDNDVF0rQlzsXO3EnKzFIGyA21U+L3Q+8fJ+RG9dIemdh+txTYWPfIjRHQdB6NgEZAI6AR0AhoBHyDgJAOScXWYDQ0UVmdaUUL461U3qG4anJjtj5XPjebNormhj43wTzXbbv4WxmmKmluNLkxi73OrxHQCGgENAIagTMSAcerF8pOS9UWuZEhsJ6mciA36jNbqkpzE8g4Nw1pZ\/P8vogzchboTmsENAIaAY2ARuA0QsAZuZHLLoVQiLuJJ0nKzqQztDgSS5wbZ0fBrT431rulrHqpAGqmNLnxBHf9rEZAI6AR0AhoBM5oBCqSGzFPyd1SQnBCQ8PUUXHHiy6NgiX+PNnZucqHR\/x6xKHYenFm+Tg3zsiN1twYRVnn0whoBDQCGgGNgEbAKQLl75ayBvITciPHxMVJWAiJNY\/1n7NkJUBW4iLPCLmRrFZiY9XayGkopZtxuFuq9LSUXL8gdUkdkqfM50aVa0vaLKXnsEZAI6AR0AhoBDQCrhFwJDf2a5LkSLiEbBEtjj24n5RkvaahMsGxExYhOUJk5Jol0dZYg\/cFl5KkUp8a24mtTYxz844yS5H82ElU+dNSmty4HkKdQyOgEdAIaAQ0AhoBRwQcTVNy2lpMU6K9KS4uIsGx\/rTfGm7\/WRHBMtMVfWaogREtjZ3kyE9HzY5Ve2PVxkgQP\/G5CWOEYnsQP9Hd\/D8zktcW8IzlbQAAAABJRU5ErkJggg==\" alt=\"\"><\/p>\n\n\n\n<figure class=\"wp-block-image size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"567\" height=\"109\" src=\"https:\/\/blogs.etsii.urjc.es\/dseytr\/wp-content\/uploads\/sites\/8\/2023\/05\/imagen-43.png\" alt=\"\" class=\"wp-image-6665\" srcset=\"https:\/\/blogs.etsii.urjc.es\/dseytr\/wp-content\/uploads\/sites\/8\/2023\/05\/imagen-43.png 567w, https:\/\/blogs.etsii.urjc.es\/dseytr\/wp-content\/uploads\/sites\/8\/2023\/05\/imagen-43-300x58.png 300w\" sizes=\"auto, (max-width: 567px) 100vw, 567px\" \/><\/figure>\n\n\n\n<p>La dataset consta de alrededor de 1200 fotos donde se van a dividir entre fotos de entrenamiento y fotos de testeo. Las fotos de entrenamiento ser\u00e1n utilizadas por el modelo para reconocer patrones del tipo de clases que les hemos especificado a las im\u00e1genes. Una vez entrenado el modelo, les pasaremos unas im\u00e1genes donde nosotros sabremos a que clase pertenece dicha imagen y el modelo, gracias al entrenamiento anterior, har\u00e1 una predicci\u00f3n de la clase.<\/p>\n\n\n\n<p>Una vez realizada la dataset, es la hora de realizar nuestro modelo en Python. Aqu\u00ed se nos muestra un ejemplo de clasificaci\u00f3n de im\u00e1genes que nos ha resultado muy \u00fatil:<\/p>\n\n\n\n<p class=\"has-text-align-center\"><a href=\"https:\/\/www.tensorflow.org\/tutorials\/images\/classification?hl=es-419\">https:\/\/www.tensorflow.org\/tutorials\/images\/classification?hl=es-419<\/a><\/p>\n\n\n\n<p>El primer problema que nos surgi\u00f3 fue a la hora descargar todas las librer\u00edas de TensorFlow. La librer\u00eda que m\u00e1s nos dieron problemas fue Keras. En versiones m\u00e1s recientes de Python daba problemas a la hora de instalar la librer\u00eda. La versi\u00f3n que mejor nos funcion\u00f3 fue la 3.7 de Python.<\/p>\n\n\n<div class=\"wp-block-image\">\n<figure class=\"aligncenter size-full is-resized\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/blogs.etsii.urjc.es\/dseytr\/wp-content\/uploads\/sites\/8\/2023\/05\/imagen-15.png\" alt=\"\" class=\"wp-image-6602\" width=\"564\" height=\"278\" srcset=\"https:\/\/blogs.etsii.urjc.es\/dseytr\/wp-content\/uploads\/sites\/8\/2023\/05\/imagen-15.png 720w, https:\/\/blogs.etsii.urjc.es\/dseytr\/wp-content\/uploads\/sites\/8\/2023\/05\/imagen-15-300x148.png 300w\" sizes=\"auto, (max-width: 564px) 100vw, 564px\" \/><\/figure>\n<\/div>\n\n\n<p>Esta es la configuraci\u00f3n para los directorios donde est\u00e1 el dataset con las im\u00e1genes. El nombre de las clases lo recogeremos en funci\u00f3n del nombre de las carpetas de la dataset ya que la dataset est\u00e1 organizada as\u00ed:<\/p>\n\n\n<div class=\"wp-block-image\">\n<figure class=\"aligncenter size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"89\" height=\"75\" src=\"https:\/\/blogs.etsii.urjc.es\/dseytr\/wp-content\/uploads\/sites\/8\/2023\/05\/imagen-16.png\" alt=\"\" class=\"wp-image-6603\"\/><\/figure>\n<\/div>\n\n<div class=\"wp-block-image\">\n<figure class=\"aligncenter size-full is-resized\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/blogs.etsii.urjc.es\/dseytr\/wp-content\/uploads\/sites\/8\/2023\/05\/imagen-17.png\" alt=\"\" class=\"wp-image-6611\" width=\"547\" height=\"168\" srcset=\"https:\/\/blogs.etsii.urjc.es\/dseytr\/wp-content\/uploads\/sites\/8\/2023\/05\/imagen-17.png 547w, https:\/\/blogs.etsii.urjc.es\/dseytr\/wp-content\/uploads\/sites\/8\/2023\/05\/imagen-17-300x92.png 300w\" sizes=\"auto, (max-width: 547px) 100vw, 547px\" \/><\/figure>\n<\/div>\n\n\n<p>Hemos definido el conjunto de datos que vamos a usar para entrenar y validar. Lo \u00f3ptimo es tener un 20% de validaci\u00f3n y 80% de entrenamiento. El train_ds coger\u00e1 las \u00faltimas im\u00e1genes de su correspondiente porcentaje y el val_ds las primeras del 20%. Mapeamos las variables para tener un par imagen-etiqueta. Una vez que hemos divido las im\u00e1genes en lotes, d\u00e1ndoles un tama\u00f1o y diversas operaciones, ahora pasamos a entrenar al modelo.<\/p>\n\n\n<div class=\"wp-block-image\">\n<figure class=\"aligncenter size-full is-resized\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/blogs.etsii.urjc.es\/dseytr\/wp-content\/uploads\/sites\/8\/2023\/05\/imagen-18.png\" alt=\"\" class=\"wp-image-6613\" width=\"248\" height=\"116\" srcset=\"https:\/\/blogs.etsii.urjc.es\/dseytr\/wp-content\/uploads\/sites\/8\/2023\/05\/imagen-18.png 342w, https:\/\/blogs.etsii.urjc.es\/dseytr\/wp-content\/uploads\/sites\/8\/2023\/05\/imagen-18-300x140.png 300w\" sizes=\"auto, (max-width: 248px) 100vw, 248px\" \/><\/figure>\n<\/div>\n\n\n<p>Esta variable al final es una capa m\u00e1s en nuestra red neuronal que se encargar\u00e1 de transformar las im\u00e1genes de entrada. Esta funci\u00f3n en concreto rota las im\u00e1genes para tener m\u00e1s variedad.<\/p>\n\n\n<div class=\"wp-block-image\">\n<figure class=\"aligncenter size-full is-resized\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/blogs.etsii.urjc.es\/dseytr\/wp-content\/uploads\/sites\/8\/2023\/05\/imagen-19.png\" alt=\"\" class=\"wp-image-6614\" width=\"349\" height=\"229\" srcset=\"https:\/\/blogs.etsii.urjc.es\/dseytr\/wp-content\/uploads\/sites\/8\/2023\/05\/imagen-19.png 564w, https:\/\/blogs.etsii.urjc.es\/dseytr\/wp-content\/uploads\/sites\/8\/2023\/05\/imagen-19-300x197.png 300w\" sizes=\"auto, (max-width: 349px) 100vw, 349px\" \/><\/figure>\n<\/div>\n\n\n<p>Tuvimos varias redes neuronales diferentes, pero esta es la red neuronal m\u00e1s eficiente que pudimos hacer. Lo primero que hacemos en nuestra red neuronal es reescalar las fotos de entrenamiento a un tama\u00f1o de 64 x 64 para que el modelo sea m\u00e1s liviano y pasarlo a una escala de grises. Aplicamos la funci\u00f3n del procesamiento de datos que he comentado antes y ya comenzamos a aplicar las neuronas:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>Conv2D<\/strong>: capa de convoluci\u00f3n. Aplica diversas operaciones en las im\u00e1genes de entrada para una mayor eficiencia.<\/li>\n\n\n\n<li><strong>MaxPooling2D<\/strong>: reduce la resoluci\u00f3n de la salida de las capas convolucionales.<\/li>\n\n\n\n<li><strong>Dropout<\/strong>: capa que evita los sobreajustes.<\/li>\n\n\n\n<li><strong>Flatten<\/strong>: transforma la imagen de la salida anterior en un array.<\/li>\n\n\n\n<li><strong>Dense<\/strong>: obtiene la probabilidad de cada clase mediante su funci\u00f3n de activaci\u00f3n softmax a partir del array obtenido.<\/li>\n<\/ul>\n\n\n<div class=\"wp-block-image\">\n<figure class=\"alignleft size-full is-resized\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/blogs.etsii.urjc.es\/dseytr\/wp-content\/uploads\/sites\/8\/2023\/05\/imagen-20.png\" alt=\"\" class=\"wp-image-6615\" width=\"196\" height=\"147\"\/><\/figure>\n<\/div>\n\n<div class=\"wp-block-image\">\n<figure class=\"alignleft size-full is-resized\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/blogs.etsii.urjc.es\/dseytr\/wp-content\/uploads\/sites\/8\/2023\/05\/imagen-21.png\" alt=\"\" class=\"wp-image-6616\" width=\"135\" height=\"110\"\/><\/figure>\n<\/div>\n\n\n<p><\/p>\n\n\n\n<p><\/p>\n\n\n\n<p><\/p>\n\n\n\n<p><\/p>\n\n\n\n<p><\/p>\n\n\n\n<p>Una vez hemos entrenado el modelo con un total de 100 \u00e9pocas y un ratio de aprendizaje \u03b1 de 0.00, guardamos el modelo en nuestro directorio con una extensi\u00f3n de .h.<\/p>\n\n\n\n<p>Otro de los problemas que nos hemos encontrado es que el modelo.h no es capaz de ser soportado por el Arduino Nano 33 debido a su escasa capacidad, por lo que tendremos que transformar el modelo a un modelo de TensorFlow Lite y luego a un modelo de TensorFlow Lite Micro.<\/p>\n\n\n\n<p>Para la primera transformaci\u00f3n a micro, hemos creado el siguiente m\u00e9todo donde se utiliza el conversor de TensorFlow Lite y vamos a guardar el modelo con el nombre que aparece a continuaci\u00f3n:<\/p>\n\n\n<div class=\"wp-block-image\">\n<figure class=\"aligncenter size-full is-resized\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/blogs.etsii.urjc.es\/dseytr\/wp-content\/uploads\/sites\/8\/2023\/05\/imagen-22.png\" alt=\"\" class=\"wp-image-6617\" width=\"320\" height=\"174\" srcset=\"https:\/\/blogs.etsii.urjc.es\/dseytr\/wp-content\/uploads\/sites\/8\/2023\/05\/imagen-22.png 418w, https:\/\/blogs.etsii.urjc.es\/dseytr\/wp-content\/uploads\/sites\/8\/2023\/05\/imagen-22-300x163.png 300w\" sizes=\"auto, (max-width: 320px) 100vw, 320px\" \/><\/figure>\n<\/div>\n\n\n<p>Una vez transformado, ahora pasaremos a transformar el modelo en un archivo de C que contenga un array unidimensional del modelo mediante dos comandos en Linux:<\/p>\n\n\n<div class=\"wp-block-image\">\n<figure class=\"aligncenter size-full is-resized\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/blogs.etsii.urjc.es\/dseytr\/wp-content\/uploads\/sites\/8\/2023\/05\/imagen-23.png\" alt=\"\" class=\"wp-image-6618\" width=\"206\" height=\"47\"\/><\/figure>\n<\/div>\n\n\n<p>Una vez hemos creado ya el modelo, pasamos al Arduino IDE. Uno de los nuevos problemas con los que nos hemos encontrado ha sido el hecho de no poder encontrar las librer\u00edas de TensorFlow Lite Micro para Arduino. Las librer\u00edas hasta hace poco tiempo se encontraban aqu\u00ed: <a href=\"https:\/\/www.tensorflow.org\/resources\/libraries-extensions?hl=es-419\">https:\/\/www.tensorflow.org\/resources\/libraries-extensions?hl=es-419<\/a>. Despu\u00e9s de indagar descubrimos que los creadores de dichas librer\u00edas tuvieron problemas con los creadores de Arduino y tuvieron que borrar las librer\u00edas. En la actualidad, las librer\u00edas se pueden obtener en el GitHub de algunos usuarios que ten\u00edan dichas librer\u00edas, como es el caso de este repositorio:<\/p>\n\n\n\n<p><a href=\"https:\/\/github.com\/mbernico\/tflite-micro\">https:\/\/github.com\/mbernico\/tflite-micro<\/a><\/p>\n\n\n\n<p>La librer\u00eda se importa como cualquier otra en el IDE y ahora pasamos a configurar la c\u00e1mara y el modelo. Para que la placa no tenga problemas de memoria, tenemos que preparar el modelo. Primero, tenemos que especificar qu\u00e9 operaciones se han llevado a cabo en la red neuronal:<\/p>\n\n\n<div class=\"wp-block-image\">\n<figure class=\"aligncenter size-full is-resized\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/blogs.etsii.urjc.es\/dseytr\/wp-content\/uploads\/sites\/8\/2023\/05\/imagen-24.png\" alt=\"\" class=\"wp-image-6619\" width=\"297\" height=\"148\" srcset=\"https:\/\/blogs.etsii.urjc.es\/dseytr\/wp-content\/uploads\/sites\/8\/2023\/05\/imagen-24.png 427w, https:\/\/blogs.etsii.urjc.es\/dseytr\/wp-content\/uploads\/sites\/8\/2023\/05\/imagen-24-300x150.png 300w\" sizes=\"auto, (max-width: 297px) 100vw, 297px\" \/><\/figure>\n<\/div>\n\n\n<p>Sin embargo, debido a problemas entre versiones del keras y TensorFlow, no se pueden compilar las capas AddConv2d, AddMaxPool2D y el layers.Rescaling. Por tanto, hemos tenido que crear una nueva red neuronal con capas que se encuentran en la versi\u00f3n adecuada, como puede ser Conv2D y AvgPool2D, adem\u00e1s de eliminar el Rescaling. Este modelo ha perdido es menos fiable que el anterior pero es soportado por una versi\u00f3n m\u00e1s antigua:<\/p>\n\n\n<div class=\"wp-block-image\">\n<figure class=\"aligncenter size-full is-resized\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/blogs.etsii.urjc.es\/dseytr\/wp-content\/uploads\/sites\/8\/2023\/05\/imagen-25.png\" alt=\"\" class=\"wp-image-6629\" width=\"180\" height=\"181\" srcset=\"https:\/\/blogs.etsii.urjc.es\/dseytr\/wp-content\/uploads\/sites\/8\/2023\/05\/imagen-25.png 343w, https:\/\/blogs.etsii.urjc.es\/dseytr\/wp-content\/uploads\/sites\/8\/2023\/05\/imagen-25-298x300.png 298w, https:\/\/blogs.etsii.urjc.es\/dseytr\/wp-content\/uploads\/sites\/8\/2023\/05\/imagen-25-150x150.png 150w, https:\/\/blogs.etsii.urjc.es\/dseytr\/wp-content\/uploads\/sites\/8\/2023\/05\/imagen-25-80x80.png 80w, https:\/\/blogs.etsii.urjc.es\/dseytr\/wp-content\/uploads\/sites\/8\/2023\/05\/imagen-25-320x320.png 320w\" sizes=\"auto, (max-width: 180px) 100vw, 180px\" \/><\/figure>\n<\/div>\n\n\n<p>Ahora pasaremos a predefinir el \u00e1rea de memoria que vamos a usar para la entrada, salida u otros arrays de TensorFlow (se debe de ir ajustando a ojo):<\/p>\n\n\n\n<figure class=\"wp-block-image size-full is-resized\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/blogs.etsii.urjc.es\/dseytr\/wp-content\/uploads\/sites\/8\/2023\/05\/imagen-26.png\" alt=\"\" class=\"wp-image-6630\" width=\"255\" height=\"63\" srcset=\"https:\/\/blogs.etsii.urjc.es\/dseytr\/wp-content\/uploads\/sites\/8\/2023\/05\/imagen-26.png 518w, https:\/\/blogs.etsii.urjc.es\/dseytr\/wp-content\/uploads\/sites\/8\/2023\/05\/imagen-26-300x74.png 300w\" sizes=\"auto, (max-width: 255px) 100vw, 255px\" \/><\/figure>\n\n\n\n<p>Una vez hecho lo anterior y configurado la c\u00e1mara, ejecutamos el archivo y vuelve a fallar. El error que nos sucede ahora al ejecutarlo es que una de las versiones con las que compilamos el modelo a TensorFlow Lite Micro no es compatible con la versi\u00f3n que hemos descargado del GitHub. No pudimos solucionar este error ya que no encontramos una librer\u00eda que fuera compatible con nuestro modelo.<\/p>\n\n\n\n<p>En el siguiente enlace se encuentra un hilo de discusi\u00f3n del foro de Arduino donde se explica lo sucedido. Adem\u00e1s, hay enlaces a librer\u00edas de TensorFlowLite anteriores. &nbsp;<\/p>\n\n\n\n<p><a href=\"https:\/\/forum.arduino.cc\/t\/compilation-issue-with-tensorflow-lite-for-microcontrollers-in-arduino-web-editor\/1085157\/3\">https:\/\/forum.arduino.cc\/t\/compilation-issue-with-tensorflow-lite-for-microcontrollers-in-arduino-web-editor\/1085157\/3<\/a><\/p>\n\n\n\n<p>Aunque nuestro equipo no pudo completar esta fase por falta de tiempo, invitamos a futuros grupos a intentarlo, partiendo ya desde el punto donde lo dejamos.<\/p>\n\n\n<div class=\"wp-block-image\">\n<figure class=\"aligncenter size-full is-resized\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/blogs.etsii.urjc.es\/dseytr\/wp-content\/uploads\/sites\/8\/2023\/05\/imagen-42.png\" alt=\"\" class=\"wp-image-6659\" width=\"422\" height=\"363\" srcset=\"https:\/\/blogs.etsii.urjc.es\/dseytr\/wp-content\/uploads\/sites\/8\/2023\/05\/imagen-42.png 576w, https:\/\/blogs.etsii.urjc.es\/dseytr\/wp-content\/uploads\/sites\/8\/2023\/05\/imagen-42-300x258.png 300w\" sizes=\"auto, (max-width: 422px) 100vw, 422px\" \/><\/figure>\n<\/div>\n\n\n<p>Finalmente, para evitar problemas con la librer\u00eda hemos hecho uso de la plataforma web de EdgeImpulse, que es una p\u00e1gina donde seremos capaces de elaborar una dataset, entrenar un modelo, editar el modelo, exportar el modelo y diversas funciones m\u00e1s. Tan solo hemos tenido que especificarle a la p\u00e1gina c\u00f3mo ser\u00eda nuestra dataset, qu\u00e9 queremos clasificar y la red neuronal. La red neuronal que hemos usado en EdgeImpulse es muy parecida a la red del modelo anterior ya que genera un modelo muy liviano y eficiente. Aqu\u00ed se muestra una configuraci\u00f3n de las im\u00e1genes de entrada parecida a la del modelo anterior:<\/p>\n\n\n\n<figure class=\"wp-block-image size-full is-resized\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/blogs.etsii.urjc.es\/dseytr\/wp-content\/uploads\/sites\/8\/2023\/05\/imagen-28.png\" alt=\"\" class=\"wp-image-6634\" width=\"616\" height=\"121\" srcset=\"https:\/\/blogs.etsii.urjc.es\/dseytr\/wp-content\/uploads\/sites\/8\/2023\/05\/imagen-28.png 616w, https:\/\/blogs.etsii.urjc.es\/dseytr\/wp-content\/uploads\/sites\/8\/2023\/05\/imagen-28-300x59.png 300w\" sizes=\"auto, (max-width: 616px) 100vw, 616px\" \/><\/figure>\n\n\n\n<p>Entrenamiento del modelo:<\/p>\n\n\n<div class=\"wp-block-image\">\n<figure class=\"aligncenter size-full is-resized\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/blogs.etsii.urjc.es\/dseytr\/wp-content\/uploads\/sites\/8\/2023\/05\/imagen-29.png\" alt=\"\" class=\"wp-image-6635\" width=\"433\" height=\"358\" srcset=\"https:\/\/blogs.etsii.urjc.es\/dseytr\/wp-content\/uploads\/sites\/8\/2023\/05\/imagen-29.png 433w, https:\/\/blogs.etsii.urjc.es\/dseytr\/wp-content\/uploads\/sites\/8\/2023\/05\/imagen-29-300x248.png 300w\" sizes=\"auto, (max-width: 433px) 100vw, 433px\" \/><\/figure>\n<\/div>\n\n\n<p>Aqu\u00ed se nos muestra una gr\u00e1fica de la tasa de acierto que ha tenido el modelo en la etapa de aprendizaje y la p\u00e9rdida:<\/p>\n\n\n<div class=\"wp-block-image\">\n<figure class=\"aligncenter size-full is-resized\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/blogs.etsii.urjc.es\/dseytr\/wp-content\/uploads\/sites\/8\/2023\/05\/imagen-30.png\" alt=\"\" class=\"wp-image-6637\" width=\"404\" height=\"282\" srcset=\"https:\/\/blogs.etsii.urjc.es\/dseytr\/wp-content\/uploads\/sites\/8\/2023\/05\/imagen-30.png 538w, https:\/\/blogs.etsii.urjc.es\/dseytr\/wp-content\/uploads\/sites\/8\/2023\/05\/imagen-30-300x210.png 300w\" sizes=\"auto, (max-width: 404px) 100vw, 404px\" \/><\/figure>\n<\/div>\n\n\n<p>Podemos observar tambi\u00e9n c\u00f3mo se han ido dispersando los datos a la hora de clasificarlos. El tama\u00f1o del modelo es de 149K, donde el tama\u00f1o m\u00e1ximo de la placa es de 256K. Hemos notado c\u00f3mo si el modelo pesa m\u00e1s de 160K, la placa se queda sin memoria y no se le puede meter el modelo.<\/p>\n\n\n\n<p>El modelo que tenemos lo podemos reentrenar (puede darse el caso de que al ajustar pesos mejore el modelo o empeore) y testear con datos de la dataset para que prediga la clase a la que pertenece la imagen. Al fin y al cabo, la parte de testing la har\u00edamos nosotros en nuestro sistema empotrado a la hora de identificar un objeto u otro.<\/p>\n\n\n\n<p>Por \u00faltimo, el modelo ya implementado en el Arduino IDE no nos ha dado ning\u00fan problema y es capaz de tomar fotos e identificarlas. El problema nos ha surgido a la hora de establecer una conexi\u00f3n entre la placa del Arduino Uno y la del Arduino Nano 33. La conexi\u00f3n se ha realizado mediante un protocolo de comunicaci\u00f3n I2C, donde seremos capaces de comunicar las dos placas mediante el Serial. Hemos sido capaces de mandar un serial del Uno al Nano y que el Nano lo recibe. Sin embargo, a la hora de que el Nano avise al Uno y le mande un Serial daba problemas y no se pod\u00eda enviar correctamente. La placa del Arduino Nano 33 al estar tan limitada en cuanto a pines se refiere no pudimos encontrar una soluci\u00f3n mejor para establecer una comunicaci\u00f3n.<\/p>\n\n\n\n<p>Todo el c\u00f3digo que se ha explicado anteriormente se encuentra en el siguiente GitHub, tanto la parte de TensorFlow como el modelo de EdgeImpulse:<\/p>\n\n\n\n<p><a href=\"https:\/\/github.com\/jaimachu\/Maching-Learning-TensorFlow\">https:\/\/github.com\/jaimachu\/Maching-Learning-TensorFlow<\/a><\/p>\n\n\n\n<h2 class=\"wp-block-heading\">5. Hardware<\/h2>\n\n\n\n<p><span style=\"font-size:10.0pt;line-height:107%;,sans-serif\">En este apartado vamos a hablar de los materiales utilizados para el desarrollo de la parte f\u00edsica del proyecto, el coste de estos, del montaje, de los problemas que surgieron durante este y de las soluciones tomadas.<\/span><\/p>\n\n\n\n<p>A parte de los componentes que hemos visto anteriormente, para la realizaci\u00f3n de la estructura donde ir\u00e1n todas las partes del proyecto hemos utilizado contrachapado ya que es f\u00e1cil de manejar. Con este material tambi\u00e9n hemos creado las diferentes piezas del brazo mec\u00e1nico, y para la cesta de este hemos utilizado un vaso de cart\u00f3n recortado. Para unir estas piezas hemos utilizado tornillos y cinta de doble cara.<\/p>\n\n\n\n<p>Para la estructura de la cinta podemos ver que hemos utilizado palitos de madera que hemos cortado para hacer el camino de la cinta. Tambi\u00e9n hemos creado unos ejes sobre los que puede pivotar para poder avanzar y unas cajitas de cartulina donde poder poner las herramientas para que la c\u00e1mara no tenga problemas al reconocer los objetos y para que estos no se caigan de la cinta.<\/p>\n\n\n\n<p>Por \u00faltimo, para la caja de clasificaci\u00f3n de herramientas hemos utilizado unos peque\u00f1os botes de pl\u00e1stico que hemos recortado y un trozo de cart\u00f3n pluma.<\/p>\n\n\n\n<figure class=\"wp-block-table\"><table><tbody><tr><td class=\"has-text-align-left\" data-align=\"left\">&nbsp; <strong>Costes de los materiales<\/strong><\/td><td><\/td><\/tr><tr><td class=\"has-text-align-left\" data-align=\"left\">Palos de madera<\/td><td>6.55\u20ac<\/td><\/tr><tr><td class=\"has-text-align-left\" data-align=\"left\">Tabla de aglomerado<\/td><td>0.75\u20ac<\/td><\/tr><tr><td class=\"has-text-align-left\" data-align=\"left\">Tornillos<\/td><td>1.20\u20ac<\/td><\/tr><tr><td class=\"has-text-align-left\" data-align=\"left\">Cartulina<\/td><td>0.50\u20ac<\/td><\/tr><tr><td class=\"has-text-align-left\" data-align=\"left\">Cinta de doble cara<\/td><td>1.15\u20ac<\/td><\/tr><tr><td class=\"has-text-align-left\" data-align=\"left\">Tableros de contrachapado<\/td><td>12.98\u20ac<\/td><\/tr><tr><td class=\"has-text-align-left\" data-align=\"left\">Electroim\u00e1n<\/td><td>5.00\u20ac<\/td><\/tr><tr><td class=\"has-text-align-left\" data-align=\"left\">Servomotores 180<\/td><td>12.00\u20ac<\/td><\/tr><tr><td class=\"has-text-align-left\" data-align=\"left\">Servomotor continuo<\/td><td>12.50\u20ac<\/td><\/tr><tr><td class=\"has-text-align-left\" data-align=\"left\"><strong>Total: 52.63\u20ac<\/strong><\/td><td><\/td><\/tr><\/tbody><\/table><\/figure>\n\n\n\n<h4 class=\"wp-block-heading\">Implementaci\u00f3n fallos y soluciones<\/h4>\n\n\n<div class=\"wp-block-image\">\n<figure class=\"aligncenter size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"367\" height=\"205\" src=\"https:\/\/blogs.etsii.urjc.es\/dseytr\/wp-content\/uploads\/sites\/8\/2023\/05\/imagen-31.png\" alt=\"\" class=\"wp-image-6645\" srcset=\"https:\/\/blogs.etsii.urjc.es\/dseytr\/wp-content\/uploads\/sites\/8\/2023\/05\/imagen-31.png 367w, https:\/\/blogs.etsii.urjc.es\/dseytr\/wp-content\/uploads\/sites\/8\/2023\/05\/imagen-31-300x168.png 300w\" sizes=\"auto, (max-width: 367px) 100vw, 367px\" \/><\/figure>\n<\/div>\n\n\n<p>Para la implementaci\u00f3n del proyecto lo dividimos por partes. Una parte que corresponde a la cinta, otra al brazo mec\u00e1nico y otra a las cajitas de clasificaci\u00f3n.<\/p>\n\n\n\n<p>Para la parte de la cinta usamos el servomotor continuo, palos de madera para crear el camino que seguir\u00e1 la cinta, palitos para crear los ejes donde pivota la cinta y una cinta de ejercicios.<\/p>\n\n\n\n<p>El servo se empezar\u00e1 a mover cuando pulsemos el bot\u00f3n que indica que se mueva la cinta hacia adelante. Luego usaremos otro bot\u00f3n para indicar que el Arduino nano 33 puede procesar la imagen del objeto. El joystick se usar\u00e1 en esta parte para indicar el objeto que ha identificado la IA.<\/p>\n\n\n\n<p>En primer lugar, para crear la cinta pensamos en el sensor de ultrasonidos del kit, para saber cuando la caja con el objeto llegaba a la localizaci\u00f3n donde poder procesar el objeto, esto daba bastantes fallos as\u00ed que decidimos cambiar el sensor por un bot\u00f3n para mover la cinta hasta el punto exacto. Tambi\u00e9n probamos con el motor paso a paso del kit para hacer que se mueva la cinta, pero este era bastante lento as\u00ed que decidimos comprar otro servomotor.<\/p>\n\n\n\n<p>En el caso del brazo, creamos las piezas con contrachapado y las juntamos con cinta de doble cara y tornillos. El primer brazo que construimos ten\u00eda un electroim\u00e1n en lugar de una cesta, pero el im\u00e1n comprado no ten\u00eda fuerza suficiente para poder levantar los tornillos m\u00e1s grandes y decidimos cambiar el dise\u00f1o, sustituyendo el im\u00e1n por la cesta. La \u00faltima parte son las cajas de clasificaci\u00f3n. Usamos el motor paso a paso del kit para poder girar las cajas en funci\u00f3n de la herramienta reconocida. Al pulsar el bot\u00f3n que indica a la IA que puede pasar a identificar, tras haber identificado el objeto el motor gira para posicionar las cajas correctamente, el brazo recoge la herramienta y la suelta en la caja, despu\u00e9s las cajas vuelven a la posici\u00f3n por defecto.<\/p>\n\n\n<div class=\"wp-block-image\">\n<figure class=\"aligncenter size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"218\" height=\"241\" src=\"https:\/\/blogs.etsii.urjc.es\/dseytr\/wp-content\/uploads\/sites\/8\/2023\/05\/imagen-32.png\" alt=\"\" class=\"wp-image-6646\"\/><\/figure>\n<\/div>\n\n\n<p>En esta parte no hubo muchos problemas, simplemente cambiar la velocidad del motor, pero nos dimos cuenta de que tampoco era tan relevante y decidimos dejarlo con la que ten\u00eda. Finalmente juntamos todas estas partes en un tabl\u00f3n de aglomerado al que pusimos unas patas para poder levantarlo de la mesa, esto lo hicimos para poder hacer un agujero y meter el motor paso a paso, de esta manera las cajas de clasificaci\u00f3n quedan m\u00e1s bajar para que al rotar la cesta del brazo a la hora de soltar el objeto no haya colisiones.<\/p>\n\n\n<div class=\"wp-block-image\">\n<figure class=\"aligncenter size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"269\" height=\"134\" src=\"https:\/\/blogs.etsii.urjc.es\/dseytr\/wp-content\/uploads\/sites\/8\/2023\/05\/imagen-33.png\" alt=\"\" class=\"wp-image-6647\"\/><\/figure>\n<\/div>\n\n\n<h2 class=\"wp-block-heading\">6. Software<\/h2>\n\n\n\n<p>En esta parte explicaremos el funcionamiento del software y sus casos de uso.<\/p>\n\n\n\n<h4 class=\"wp-block-heading\">Casos de uso<\/h4>\n\n\n\n<p>En primer lugar, pulsaremos el bot\u00f3n amarillo para poder mover la cinta hasta su posici\u00f3n, una vez en el lugar correspondiente pulsaremos el rojo para indicar que ya puede pasar a identificar el objeto. Cuando ha identificado el objeto tenemos cuatro casos de uso:<\/p>\n\n\n\n<p>&#8211; <em><strong>Tornillo<\/strong><\/em>: El primer caso es que haya identificado un tornillo. Para este no vamos a mover las cajas, solo se mover\u00eda el brazo para recoger la herramienta y para soltarla en la caja de la posici\u00f3n por defecto, ya que esta ser\u00e1 la que guarde los tornillos.<\/p>\n\n\n\n<p>&#8211; <em><strong>Tuerca<\/strong><\/em>: En este segundo caso cuando se identifique que el objeto es una tuerca vamos a mover las cajas solo un cuarto de vuelta para guardarla en la siguiente caja, se mover\u00eda el brazo y finalmente las cajas giraran tres cuartos de vuelta para ponerse en la misma posici\u00f3n en la que estaban al principio.<\/p>\n\n\n\n<p>&#8211; <em><strong>Arandela<\/strong><\/em>: En el tercer caso, tras reconocer la arandela, movemos las cajas, media vuelta para posicionar la tercera caja en el punto donde el brazo suelta la herramienta, el brazo se mueve y volvemos a dar media vuelta.<\/p>\n\n\n\n<p>&#8211; <em><strong>Mariposa<\/strong><\/em>: En este \u00faltimo caso giraremos las cajas tres cuartos de vuelta, movemos el brazo y volvemos a girar las cajas solo un cuarto de vuelta para dejarlas como al principio.<\/p>\n\n\n\n<p>Ahora que sabemos c\u00f3mo funcionan los distintos casos de uso vamos a pasar a ver el c\u00f3digo.<\/p>\n\n\n\n<h4 class=\"wp-block-heading\">C\u00f3digo<\/h4>\n\n\n\n<p>Como ya vamos a explicar el c\u00f3digo en profundidad en el video del proyecto, aqu\u00ed vamos a ver algunas de las partes m\u00e1s importantes.<\/p>\n\n\n\n<p>Lo primero que podemos ver es la declaraci\u00f3n de algunas contantes que usaremos para indicar los pines del motor paso a paso, la declaraci\u00f3n de los servomotores que vamos a usar, contadores para medir los grados de la posici\u00f3n de los servos de 180 grados, una matriz para guardar las posiciones del motor paso a paso y los pines de entrada de datos para los botones junto con la asignaci\u00f3n de los pines del joystick y de los grados para usar este \u00faltimo.<\/p>\n\n\n<div class=\"wp-block-image\">\n<figure class=\"alignleft size-full is-resized\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/blogs.etsii.urjc.es\/dseytr\/wp-content\/uploads\/sites\/8\/2023\/05\/imagen-34.png\" alt=\"\" class=\"wp-image-6648\" width=\"182\" height=\"246\" srcset=\"https:\/\/blogs.etsii.urjc.es\/dseytr\/wp-content\/uploads\/sites\/8\/2023\/05\/imagen-34.png 288w, https:\/\/blogs.etsii.urjc.es\/dseytr\/wp-content\/uploads\/sites\/8\/2023\/05\/imagen-34-222x300.png 222w\" sizes=\"auto, (max-width: 182px) 100vw, 182px\" \/><\/figure>\n<\/div>\n\n\n<figure class=\"wp-block-image size-full is-resized\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/blogs.etsii.urjc.es\/dseytr\/wp-content\/uploads\/sites\/8\/2023\/05\/imagen-35.png\" alt=\"\" class=\"wp-image-6649\" width=\"211\" height=\"131\" srcset=\"https:\/\/blogs.etsii.urjc.es\/dseytr\/wp-content\/uploads\/sites\/8\/2023\/05\/imagen-35.png 436w, https:\/\/blogs.etsii.urjc.es\/dseytr\/wp-content\/uploads\/sites\/8\/2023\/05\/imagen-35-300x186.png 300w\" sizes=\"auto, (max-width: 211px) 100vw, 211px\" \/><\/figure>\n\n\n\n<p><\/p>\n\n\n\n<p><\/p>\n\n\n\n<p><\/p>\n\n\n\n<p>Despu\u00e9s de esto pasamos con la parte del setup. Esta parte se ejecuta solo una vez as\u00ed que aqu\u00ed vamos a asignar de que tipo van a ser los pines, si de entrada o salida. Tambi\u00e9n vamos a asignar el pin correspondiente a cada servo, decir cual es la posici\u00f3n inicial de los de 180 e iniciamos el serial y el bus de I2C.<\/p>\n\n\n<div class=\"wp-block-image\">\n<figure class=\"aligncenter size-full is-resized\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/blogs.etsii.urjc.es\/dseytr\/wp-content\/uploads\/sites\/8\/2023\/05\/imagen-36.png\" alt=\"\" class=\"wp-image-6650\" width=\"202\" height=\"224\" srcset=\"https:\/\/blogs.etsii.urjc.es\/dseytr\/wp-content\/uploads\/sites\/8\/2023\/05\/imagen-36.png 427w, https:\/\/blogs.etsii.urjc.es\/dseytr\/wp-content\/uploads\/sites\/8\/2023\/05\/imagen-36-271x300.png 271w\" sizes=\"auto, (max-width: 202px) 100vw, 202px\" \/><\/figure>\n<\/div>\n\n\n<p>Tras el setup pasamos a ver el loop. El loop se va a ejecutar en bucle despu\u00e9s del setup. Aqu\u00ed vamos a comprobar el estado del bot\u00f3n amarillo, si est\u00e1 o no pulsado. En caso de estar pulsado vamos a hacer que la cinta se mueva hacia adelante y si no lo est\u00e1 haremos que est\u00e9 parada.<\/p>\n\n\n\n<p>En caso de estar parada, no estar el bot\u00f3n amarillo pulsado, vamos a comprobar el estado del bot\u00f3n rojo. Si el amarillo no est\u00e1 pulsado y pulsamos el bot\u00f3n rojo se ejecutar\u00e1 la parte del c\u00f3digo que llama a la placa de Arduino nano 33 para que esta identifique el objeto. Finalmente, como no pudimos hacer que se comunicasen de forma bidireccional las dos placas esta parte llamara a la funci\u00f3n identificar. Esta funci\u00f3n leer\u00e1 el dato introducido gracias al joystick y en funci\u00f3n de la posici\u00f3n de este mandar\u00e1 un n\u00famero u otro, este numero corresponder\u00e1 con el objeto reconocido.<\/p>\n\n\n\n<p>Tras recibir el n\u00famero de la salida de la funci\u00f3n identificar vamos a mover el brazo hasta la cinta para recoger el objeto. Una vez est\u00e9 colocado se mover\u00e1 la cinta para dejar caer el objeto en la cesta del brazo y volver\u00e1 atr\u00e1s para no interferir en el movimiento del brazo.<\/p>\n\n\n\n<p>Por \u00faltimo, llamaremos al m\u00e9todo organizar para que se coloquen las cajas de clasificaci\u00f3n de la forma correcta y el brazo pueda soltar el objeto. Tras esto volver\u00edamos al principio para poder volver a leer el estado del bot\u00f3n y seguir moviendo la cinta.<\/p>\n\n\n<div class=\"wp-block-image\">\n<figure class=\"alignleft size-full is-resized\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/blogs.etsii.urjc.es\/dseytr\/wp-content\/uploads\/sites\/8\/2023\/05\/imagen-37.png\" alt=\"\" class=\"wp-image-6651\" width=\"252\" height=\"257\" srcset=\"https:\/\/blogs.etsii.urjc.es\/dseytr\/wp-content\/uploads\/sites\/8\/2023\/05\/imagen-37.png 536w, https:\/\/blogs.etsii.urjc.es\/dseytr\/wp-content\/uploads\/sites\/8\/2023\/05\/imagen-37-295x300.png 295w\" sizes=\"auto, (max-width: 252px) 100vw, 252px\" \/><\/figure>\n<\/div>\n\n<div class=\"wp-block-image\">\n<figure class=\"aligncenter size-full is-resized\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/blogs.etsii.urjc.es\/dseytr\/wp-content\/uploads\/sites\/8\/2023\/05\/imagen-38.png\" alt=\"\" class=\"wp-image-6652\" width=\"254\" height=\"163\" srcset=\"https:\/\/blogs.etsii.urjc.es\/dseytr\/wp-content\/uploads\/sites\/8\/2023\/05\/imagen-38.png 537w, https:\/\/blogs.etsii.urjc.es\/dseytr\/wp-content\/uploads\/sites\/8\/2023\/05\/imagen-38-300x193.png 300w\" sizes=\"auto, (max-width: 254px) 100vw, 254px\" \/><\/figure>\n<\/div>\n\n\n<p><\/p>\n\n\n\n<p><\/p>\n\n\n\n<p><\/p>\n\n\n\n<p>Algunas de los m\u00e9todos m\u00e1s importantes del programa son identificar() que se encarga de leer el estado del joystick para devolver el n\u00famero correspondiente al objeto clasificado o la de mover_brazo() y mover_cajas() que se encargan de mover los servomotores del brazo y de mover el motor paso a paso para colocar las cajas, respectivamente. \u00ad<\/p>\n\n\n<div class=\"wp-block-image\">\n<figure class=\"alignleft size-full is-resized\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/blogs.etsii.urjc.es\/dseytr\/wp-content\/uploads\/sites\/8\/2023\/05\/imagen-39.png\" alt=\"\" class=\"wp-image-6653\" width=\"292\" height=\"258\" srcset=\"https:\/\/blogs.etsii.urjc.es\/dseytr\/wp-content\/uploads\/sites\/8\/2023\/05\/imagen-39.png 459w, https:\/\/blogs.etsii.urjc.es\/dseytr\/wp-content\/uploads\/sites\/8\/2023\/05\/imagen-39-300x265.png 300w\" sizes=\"auto, (max-width: 292px) 100vw, 292px\" \/><\/figure>\n<\/div>\n\n<div class=\"wp-block-image\">\n<figure class=\"aligncenter size-full is-resized\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/blogs.etsii.urjc.es\/dseytr\/wp-content\/uploads\/sites\/8\/2023\/05\/imagen-40.png\" alt=\"\" class=\"wp-image-6654\" width=\"168\" height=\"195\" srcset=\"https:\/\/blogs.etsii.urjc.es\/dseytr\/wp-content\/uploads\/sites\/8\/2023\/05\/imagen-40.png 262w, https:\/\/blogs.etsii.urjc.es\/dseytr\/wp-content\/uploads\/sites\/8\/2023\/05\/imagen-40-259x300.png 259w\" sizes=\"auto, (max-width: 168px) 100vw, 168px\" \/><\/figure>\n<\/div>\n\n<div class=\"wp-block-image\">\n<figure class=\"aligncenter size-full is-resized\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/blogs.etsii.urjc.es\/dseytr\/wp-content\/uploads\/sites\/8\/2023\/05\/imagen-41.png\" alt=\"\" class=\"wp-image-6655\" width=\"235\" height=\"113\" srcset=\"https:\/\/blogs.etsii.urjc.es\/dseytr\/wp-content\/uploads\/sites\/8\/2023\/05\/imagen-41.png 480w, https:\/\/blogs.etsii.urjc.es\/dseytr\/wp-content\/uploads\/sites\/8\/2023\/05\/imagen-41-300x144.png 300w\" sizes=\"auto, (max-width: 235px) 100vw, 235px\" \/><\/figure>\n<\/div>\n\n\n<p>En el siguiente enlace de GitHub se puede encontrar todo el c\u00f3digo del proyecto:<\/p>\n\n\n\n<p class=\"has-text-align-center\"><a href=\"https:\/\/github.com\/jaimachu\/Maching-Learning-TensorFlow\">https:\/\/github.com\/jaimachu\/Maching-Learning-TensorFlow<\/a><\/p>\n","protected":false},"excerpt":{"rendered":"<p>Autores: Jaime Rueda Carpintero, Cristian Fernando Calva Troya, Luis Ovejero Mart\u00edn y Valery Isabel Cortez Fern\u00e1ndez. 1. Introducci\u00f3n El proyecto consiste en un clasificador de herramientas, capaz de clasificar hasta 4 tipos de dichas&#46;&#46;&#46;<\/p>\n","protected":false},"author":8,"featured_media":7038,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[1],"tags":[8],"class_list":["post-6582","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-proyectos","tag-arduino"],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v27.4 - https:\/\/yoast.com\/product\/yoast-seo-wordpress\/ -->\n<title>Clasificador-Maching Learning - Proyectos con Arduino.<\/title>\n<meta name=\"description\" content=\"Clasificador de piezas met\u00e1licas mediante Maching Learning con Arduino Uno y Arduino Nano 33 BLE.\" \/>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/blogs.etsii.urjc.es\/dseytr\/clasificador-maching-learning\/\" \/>\n<meta property=\"og:locale\" content=\"es_ES\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Clasificador-Maching Learning - Proyectos con Arduino.\" \/>\n<meta property=\"og:description\" content=\"Clasificador de piezas met\u00e1licas mediante Maching Learning con Arduino Uno y Arduino Nano 33 BLE.\" \/>\n<meta property=\"og:url\" content=\"https:\/\/blogs.etsii.urjc.es\/dseytr\/clasificador-maching-learning\/\" \/>\n<meta property=\"og:site_name\" content=\"Proyectos con Arduino.\" \/>\n<meta property=\"article:published_time\" content=\"2023-05-05T21:26:00+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2023-05-09T06:36:01+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/blogs.etsii.urjc.es\/dseytr\/wp-content\/uploads\/sites\/8\/2023\/05\/Maching-Learning.png\" \/>\n\t<meta property=\"og:image:width\" content=\"367\" \/>\n\t<meta property=\"og:image:height\" content=\"205\" \/>\n\t<meta property=\"og:image:type\" content=\"image\/png\" \/>\n<meta name=\"author\" content=\"gdhwsw2\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:label1\" content=\"Escrito por\" \/>\n\t<meta name=\"twitter:data1\" content=\"gdhwsw2\" \/>\n\t<meta name=\"twitter:label2\" content=\"Tiempo de lectura\" \/>\n\t<meta name=\"twitter:data2\" content=\"18 minutos\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\\\/\\\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\\\/\\\/blogs.etsii.urjc.es\\\/dseytr\\\/clasificador-maching-learning\\\/#article\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/blogs.etsii.urjc.es\\\/dseytr\\\/clasificador-maching-learning\\\/\"},\"author\":{\"name\":\"gdhwsw2\",\"@id\":\"https:\\\/\\\/blogs.etsii.urjc.es\\\/dseytr\\\/#\\\/schema\\\/person\\\/7491e54afbe5e7fd53467fccb9c7ce44\"},\"headline\":\"Clasificador-Maching Learning\",\"datePublished\":\"2023-05-05T21:26:00+00:00\",\"dateModified\":\"2023-05-09T06:36:01+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\\\/\\\/blogs.etsii.urjc.es\\\/dseytr\\\/clasificador-maching-learning\\\/\"},\"wordCount\":3538,\"commentCount\":0,\"publisher\":{\"@id\":\"https:\\\/\\\/blogs.etsii.urjc.es\\\/dseytr\\\/#organization\"},\"image\":{\"@id\":\"https:\\\/\\\/blogs.etsii.urjc.es\\\/dseytr\\\/clasificador-maching-learning\\\/#primaryimage\"},\"thumbnailUrl\":\"https:\\\/\\\/blogs.etsii.urjc.es\\\/dseytr\\\/wp-content\\\/uploads\\\/sites\\\/8\\\/2023\\\/05\\\/Maching-Learning.png\",\"keywords\":[\"Arduino\"],\"articleSection\":[\"Proyectos\"],\"inLanguage\":\"es\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\\\/\\\/blogs.etsii.urjc.es\\\/dseytr\\\/clasificador-maching-learning\\\/#respond\"]}]},{\"@type\":\"WebPage\",\"@id\":\"https:\\\/\\\/blogs.etsii.urjc.es\\\/dseytr\\\/clasificador-maching-learning\\\/\",\"url\":\"https:\\\/\\\/blogs.etsii.urjc.es\\\/dseytr\\\/clasificador-maching-learning\\\/\",\"name\":\"Clasificador-Maching Learning - Proyectos con Arduino.\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/blogs.etsii.urjc.es\\\/dseytr\\\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\\\/\\\/blogs.etsii.urjc.es\\\/dseytr\\\/clasificador-maching-learning\\\/#primaryimage\"},\"image\":{\"@id\":\"https:\\\/\\\/blogs.etsii.urjc.es\\\/dseytr\\\/clasificador-maching-learning\\\/#primaryimage\"},\"thumbnailUrl\":\"https:\\\/\\\/blogs.etsii.urjc.es\\\/dseytr\\\/wp-content\\\/uploads\\\/sites\\\/8\\\/2023\\\/05\\\/Maching-Learning.png\",\"datePublished\":\"2023-05-05T21:26:00+00:00\",\"dateModified\":\"2023-05-09T06:36:01+00:00\",\"description\":\"Clasificador de piezas met\u00e1licas mediante Maching Learning con Arduino Uno y Arduino Nano 33 BLE.\",\"breadcrumb\":{\"@id\":\"https:\\\/\\\/blogs.etsii.urjc.es\\\/dseytr\\\/clasificador-maching-learning\\\/#breadcrumb\"},\"inLanguage\":\"es\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\\\/\\\/blogs.etsii.urjc.es\\\/dseytr\\\/clasificador-maching-learning\\\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"es\",\"@id\":\"https:\\\/\\\/blogs.etsii.urjc.es\\\/dseytr\\\/clasificador-maching-learning\\\/#primaryimage\",\"url\":\"https:\\\/\\\/blogs.etsii.urjc.es\\\/dseytr\\\/wp-content\\\/uploads\\\/sites\\\/8\\\/2023\\\/05\\\/Maching-Learning.png\",\"contentUrl\":\"https:\\\/\\\/blogs.etsii.urjc.es\\\/dseytr\\\/wp-content\\\/uploads\\\/sites\\\/8\\\/2023\\\/05\\\/Maching-Learning.png\",\"width\":367,\"height\":205},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\\\/\\\/blogs.etsii.urjc.es\\\/dseytr\\\/clasificador-maching-learning\\\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Portada\",\"item\":\"https:\\\/\\\/blogs.etsii.urjc.es\\\/dseytr\\\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Clasificador-Maching Learning\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\\\/\\\/blogs.etsii.urjc.es\\\/dseytr\\\/#website\",\"url\":\"https:\\\/\\\/blogs.etsii.urjc.es\\\/dseytr\\\/\",\"name\":\"Proyectos con Arduino.\",\"description\":\"Blog de proyectos de Arduino de alumnos de la URJC\",\"publisher\":{\"@id\":\"https:\\\/\\\/blogs.etsii.urjc.es\\\/dseytr\\\/#organization\"},\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\\\/\\\/blogs.etsii.urjc.es\\\/dseytr\\\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"es\"},{\"@type\":\"Organization\",\"@id\":\"https:\\\/\\\/blogs.etsii.urjc.es\\\/dseytr\\\/#organization\",\"name\":\"Universidad Rey Juan Carlos\",\"url\":\"https:\\\/\\\/blogs.etsii.urjc.es\\\/dseytr\\\/\",\"logo\":{\"@type\":\"ImageObject\",\"inLanguage\":\"es\",\"@id\":\"https:\\\/\\\/blogs.etsii.urjc.es\\\/dseytr\\\/#\\\/schema\\\/logo\\\/image\\\/\",\"url\":\"https:\\\/\\\/blogs.etsii.urjc.es\\\/dseytr\\\/wp-content\\\/uploads\\\/sites\\\/8\\\/2022\\\/05\\\/logourjc-1.jpg\",\"contentUrl\":\"https:\\\/\\\/blogs.etsii.urjc.es\\\/dseytr\\\/wp-content\\\/uploads\\\/sites\\\/8\\\/2022\\\/05\\\/logourjc-1.jpg\",\"width\":745,\"height\":288,\"caption\":\"Universidad Rey Juan Carlos\"},\"image\":{\"@id\":\"https:\\\/\\\/blogs.etsii.urjc.es\\\/dseytr\\\/#\\\/schema\\\/logo\\\/image\\\/\"}},{\"@type\":\"Person\",\"@id\":\"https:\\\/\\\/blogs.etsii.urjc.es\\\/dseytr\\\/#\\\/schema\\\/person\\\/7491e54afbe5e7fd53467fccb9c7ce44\",\"name\":\"gdhwsw2\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"es\",\"@id\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/ed762cea3155134adfbecf1780d8a40c0fe5e4b642859a56b3a2b3611a1ca73a?s=96&d=mm&r=g\",\"url\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/ed762cea3155134adfbecf1780d8a40c0fe5e4b642859a56b3a2b3611a1ca73a?s=96&d=mm&r=g\",\"contentUrl\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/ed762cea3155134adfbecf1780d8a40c0fe5e4b642859a56b3a2b3611a1ca73a?s=96&d=mm&r=g\",\"caption\":\"gdhwsw2\"},\"url\":\"https:\\\/\\\/blogs.etsii.urjc.es\\\/dseytr\\\/author\\\/gdhwsw2\\\/\"}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"Clasificador-Maching Learning - Proyectos con Arduino.","description":"Clasificador de piezas met\u00e1licas mediante Maching Learning con Arduino Uno y Arduino Nano 33 BLE.","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/blogs.etsii.urjc.es\/dseytr\/clasificador-maching-learning\/","og_locale":"es_ES","og_type":"article","og_title":"Clasificador-Maching Learning - Proyectos con Arduino.","og_description":"Clasificador de piezas met\u00e1licas mediante Maching Learning con Arduino Uno y Arduino Nano 33 BLE.","og_url":"https:\/\/blogs.etsii.urjc.es\/dseytr\/clasificador-maching-learning\/","og_site_name":"Proyectos con Arduino.","article_published_time":"2023-05-05T21:26:00+00:00","article_modified_time":"2023-05-09T06:36:01+00:00","og_image":[{"width":367,"height":205,"url":"https:\/\/blogs.etsii.urjc.es\/dseytr\/wp-content\/uploads\/sites\/8\/2023\/05\/Maching-Learning.png","type":"image\/png"}],"author":"gdhwsw2","twitter_card":"summary_large_image","twitter_misc":{"Escrito por":"gdhwsw2","Tiempo de lectura":"18 minutos"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/blogs.etsii.urjc.es\/dseytr\/clasificador-maching-learning\/#article","isPartOf":{"@id":"https:\/\/blogs.etsii.urjc.es\/dseytr\/clasificador-maching-learning\/"},"author":{"name":"gdhwsw2","@id":"https:\/\/blogs.etsii.urjc.es\/dseytr\/#\/schema\/person\/7491e54afbe5e7fd53467fccb9c7ce44"},"headline":"Clasificador-Maching Learning","datePublished":"2023-05-05T21:26:00+00:00","dateModified":"2023-05-09T06:36:01+00:00","mainEntityOfPage":{"@id":"https:\/\/blogs.etsii.urjc.es\/dseytr\/clasificador-maching-learning\/"},"wordCount":3538,"commentCount":0,"publisher":{"@id":"https:\/\/blogs.etsii.urjc.es\/dseytr\/#organization"},"image":{"@id":"https:\/\/blogs.etsii.urjc.es\/dseytr\/clasificador-maching-learning\/#primaryimage"},"thumbnailUrl":"https:\/\/blogs.etsii.urjc.es\/dseytr\/wp-content\/uploads\/sites\/8\/2023\/05\/Maching-Learning.png","keywords":["Arduino"],"articleSection":["Proyectos"],"inLanguage":"es","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/blogs.etsii.urjc.es\/dseytr\/clasificador-maching-learning\/#respond"]}]},{"@type":"WebPage","@id":"https:\/\/blogs.etsii.urjc.es\/dseytr\/clasificador-maching-learning\/","url":"https:\/\/blogs.etsii.urjc.es\/dseytr\/clasificador-maching-learning\/","name":"Clasificador-Maching Learning - Proyectos con Arduino.","isPartOf":{"@id":"https:\/\/blogs.etsii.urjc.es\/dseytr\/#website"},"primaryImageOfPage":{"@id":"https:\/\/blogs.etsii.urjc.es\/dseytr\/clasificador-maching-learning\/#primaryimage"},"image":{"@id":"https:\/\/blogs.etsii.urjc.es\/dseytr\/clasificador-maching-learning\/#primaryimage"},"thumbnailUrl":"https:\/\/blogs.etsii.urjc.es\/dseytr\/wp-content\/uploads\/sites\/8\/2023\/05\/Maching-Learning.png","datePublished":"2023-05-05T21:26:00+00:00","dateModified":"2023-05-09T06:36:01+00:00","description":"Clasificador de piezas met\u00e1licas mediante Maching Learning con Arduino Uno y Arduino Nano 33 BLE.","breadcrumb":{"@id":"https:\/\/blogs.etsii.urjc.es\/dseytr\/clasificador-maching-learning\/#breadcrumb"},"inLanguage":"es","potentialAction":[{"@type":"ReadAction","target":["https:\/\/blogs.etsii.urjc.es\/dseytr\/clasificador-maching-learning\/"]}]},{"@type":"ImageObject","inLanguage":"es","@id":"https:\/\/blogs.etsii.urjc.es\/dseytr\/clasificador-maching-learning\/#primaryimage","url":"https:\/\/blogs.etsii.urjc.es\/dseytr\/wp-content\/uploads\/sites\/8\/2023\/05\/Maching-Learning.png","contentUrl":"https:\/\/blogs.etsii.urjc.es\/dseytr\/wp-content\/uploads\/sites\/8\/2023\/05\/Maching-Learning.png","width":367,"height":205},{"@type":"BreadcrumbList","@id":"https:\/\/blogs.etsii.urjc.es\/dseytr\/clasificador-maching-learning\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Portada","item":"https:\/\/blogs.etsii.urjc.es\/dseytr\/"},{"@type":"ListItem","position":2,"name":"Clasificador-Maching Learning"}]},{"@type":"WebSite","@id":"https:\/\/blogs.etsii.urjc.es\/dseytr\/#website","url":"https:\/\/blogs.etsii.urjc.es\/dseytr\/","name":"Proyectos con Arduino.","description":"Blog de proyectos de Arduino de alumnos de la URJC","publisher":{"@id":"https:\/\/blogs.etsii.urjc.es\/dseytr\/#organization"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/blogs.etsii.urjc.es\/dseytr\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"es"},{"@type":"Organization","@id":"https:\/\/blogs.etsii.urjc.es\/dseytr\/#organization","name":"Universidad Rey Juan Carlos","url":"https:\/\/blogs.etsii.urjc.es\/dseytr\/","logo":{"@type":"ImageObject","inLanguage":"es","@id":"https:\/\/blogs.etsii.urjc.es\/dseytr\/#\/schema\/logo\/image\/","url":"https:\/\/blogs.etsii.urjc.es\/dseytr\/wp-content\/uploads\/sites\/8\/2022\/05\/logourjc-1.jpg","contentUrl":"https:\/\/blogs.etsii.urjc.es\/dseytr\/wp-content\/uploads\/sites\/8\/2022\/05\/logourjc-1.jpg","width":745,"height":288,"caption":"Universidad Rey Juan Carlos"},"image":{"@id":"https:\/\/blogs.etsii.urjc.es\/dseytr\/#\/schema\/logo\/image\/"}},{"@type":"Person","@id":"https:\/\/blogs.etsii.urjc.es\/dseytr\/#\/schema\/person\/7491e54afbe5e7fd53467fccb9c7ce44","name":"gdhwsw2","image":{"@type":"ImageObject","inLanguage":"es","@id":"https:\/\/secure.gravatar.com\/avatar\/ed762cea3155134adfbecf1780d8a40c0fe5e4b642859a56b3a2b3611a1ca73a?s=96&d=mm&r=g","url":"https:\/\/secure.gravatar.com\/avatar\/ed762cea3155134adfbecf1780d8a40c0fe5e4b642859a56b3a2b3611a1ca73a?s=96&d=mm&r=g","contentUrl":"https:\/\/secure.gravatar.com\/avatar\/ed762cea3155134adfbecf1780d8a40c0fe5e4b642859a56b3a2b3611a1ca73a?s=96&d=mm&r=g","caption":"gdhwsw2"},"url":"https:\/\/blogs.etsii.urjc.es\/dseytr\/author\/gdhwsw2\/"}]}},"_links":{"self":[{"href":"https:\/\/blogs.etsii.urjc.es\/dseytr\/wp-json\/wp\/v2\/posts\/6582","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/blogs.etsii.urjc.es\/dseytr\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/blogs.etsii.urjc.es\/dseytr\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/blogs.etsii.urjc.es\/dseytr\/wp-json\/wp\/v2\/users\/8"}],"replies":[{"embeddable":true,"href":"https:\/\/blogs.etsii.urjc.es\/dseytr\/wp-json\/wp\/v2\/comments?post=6582"}],"version-history":[{"count":7,"href":"https:\/\/blogs.etsii.urjc.es\/dseytr\/wp-json\/wp\/v2\/posts\/6582\/revisions"}],"predecessor-version":[{"id":7077,"href":"https:\/\/blogs.etsii.urjc.es\/dseytr\/wp-json\/wp\/v2\/posts\/6582\/revisions\/7077"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/blogs.etsii.urjc.es\/dseytr\/wp-json\/wp\/v2\/media\/7038"}],"wp:attachment":[{"href":"https:\/\/blogs.etsii.urjc.es\/dseytr\/wp-json\/wp\/v2\/media?parent=6582"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/blogs.etsii.urjc.es\/dseytr\/wp-json\/wp\/v2\/categories?post=6582"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/blogs.etsii.urjc.es\/dseytr\/wp-json\/wp\/v2\/tags?post=6582"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}