{"id":5363,"date":"2018-10-03T17:03:55","date_gmt":"2018-10-03T15:03:55","guid":{"rendered":"https:\/\/blog.generationrobots.com\/?p=5363"},"modified":"2023-03-29T10:37:16","modified_gmt":"2023-03-29T08:37:16","slug":"cozmo-sdk-streaming-video-avec-la-camera","status":"publish","type":"post","link":"https:\/\/www.generationrobots.com\/blog\/fr\/cozmo-sdk-streaming-video-avec-la-camera\/","title":{"rendered":"Cozmo SDK : streaming vid\u00e9o avec la cam\u00e9ra"},"content":{"rendered":"\n<html>\n <body>\n  <h2 class=\"wp-block-heading\" id=\"h-objectif-recuperer-une-image-ou-un-flux-d-image-de-la-camera\">\n   <strong>\n    Objectif : r\u00e9cup\u00e9rer une image ou un flux d&rsquo;image de la cam\u00e9ra\n   <\/strong>\n  <\/h2>\n  \n  \n  <ul class=\"wp-block-list\">\n   \n   <li>\n    <strong>\n     <span style=\"color: #00ccff;\">\n      Dur\u00e9e :\n     <\/span>\n     15 minutes\n    <\/strong>\n   <\/li>\n   \n   \n   <li>\n    <strong>\n     <span style=\"color: #00ccff;\">\n      Niveau de difficult\u00e9 :\n     <\/span>\n     facile\n    <\/strong>\n   <\/li>\n   \n   \n   <li>\n    <strong>\n     <span style=\"color: #00ccff;\">\n      Objectif :\n     <\/span>\n     explorer la fonctionnalit\u00e9 de capture d&rsquo;images\n    <\/strong>\n   <\/li>\n   \n  <\/ul>\n  \n  \n  <h2 class=\"wp-block-heading\" id=\"h-les-prerequis\">\n   <strong>\n    Les pr\u00e9requis\n   <\/strong>\n  <\/h2>\n  \n  \n  <ul class=\"wp-block-list\">\n   \n   <li>\n    Avoir install\u00e9 et activ\u00e9 Cozmo SDK (consulter notre tutoriel\n    <a class=\"catalogue\" href=\"\/blog\/fr\/comment-activer-le-mode-sdk-de-cozmo\/\" title=\"Cozmo SDK : comment activer le mode SDK de Cozmo\">\n     Cozmo SDK : comment activer le mode SDK de Cozmo)\n    <\/a>\n   <\/li>\n   \n   \n   <li>\n    Avoir \u00e9tabli la connexion entre Cozmo et l&rsquo;ordinateur :\n    <a class=\"catalogue\" href=\"\/blog\/fr\/comment-activer-le-mode-sdk-de-cozmo\/\" title=\"Cozmo SDK : deux m\u00e9thodes pour se connecter au robot\">\n     Cozmo SDK : deux m\u00e9thodes pour se connecter au robot\n    <\/a>\n   <\/li>\n   \n  <\/ul>\n  \n  \n  <h2 class=\"wp-block-heading\" id=\"h-acceder-a-la-camera-du-robot-cozmo\">\n   Acc\u00e9der \u00e0 la cam\u00e9ra du robot Cozmo\n  <\/h2>\n  \n  \n  <h3 class=\"wp-block-heading\" id=\"h-presentation-de-la-camera-de-cozmo\">\n   Pr\u00e9sentation de la cam\u00e9ra de Cozmo\n  <\/h3>\n  \n  \n  <p>\n   Cozmo dispose d&rsquo;une camera VGA 30 embarqu\u00e9e. Celle-ci fournit des images en noir et blanc de dimension 320 x 240 pixels. L&rsquo;angle de la cam\u00e9ra est de 60\u00b0 et la longueur de la focale de 290 mm. Cozmo poss\u00e8de \u00e9galement un logiciel de reconnaissance faciale qui ouvre de nombreuses possibilit\u00e9s d&rsquo;applications.\n  <\/p>\n  \n  \n  <h3 class=\"wp-block-heading\" id=\"h-recuperation-d-une-image\">\n   R\u00e9cup\u00e9ration d&rsquo;une image\n  <\/h3>\n  \n  \n  <p>\n   Pour r\u00e9cup\u00e9rer une image depuis la cam\u00e9ra de Cozmo, il faudra effectuer les deux \u00e9tapes ci-dessous :\n  <\/p>\n  \n  \n  <ul class=\"wp-block-list\">\n   \n   <li>\n    <strong>\n     Activer le streaming vid\u00e9o du robot\n    <\/strong>\n    auquel vous \u00eates connect\u00e9 :\n    <em>\n     robot.camera.image_stream_enabled = True\n    <\/em>\n   <\/li>\n   \n   \n   <li>\n    <strong>\n     R\u00e9cup\u00e9rer l&rsquo;image\n    <\/strong>\n    elle-m\u00eame\u00a0 via l&rsquo;objet robot.world.latest_image\u00a0 :\n    <br\/>\n    <em>\n     latest_image = robot.world.latest_image\n    <\/em>\n   <\/li>\n   \n  <\/ul>\n  \n  \n  <p>\n   L&rsquo;activation du streaming vid\u00e9o se fait par un param\u00e8tre de la cam\u00e9ra, qui va activer le flux cam\u00e9ra. L&rsquo;objet\n   <em>\n    latest_image\n   <\/em>\n   est un objet\n   <a class=\"catalogue\" href=\"http:\/\/cozmosdk.anki.com\/docs\/generated\/cozmo.world.html#cozmo.world.CameraImage\" rel=\"noopener\" target=\"_blank\" title=\"Classes cozmo.world - CameraImage\">\n    CameraImage\n   <\/a>\n   renvoy\u00e9 par le robot. Ces images peuvent \u00eatre annot\u00e9e. Nous verrons cela dans un prochain tutoriel.\n  <\/p>\n  \n  \n  <p>\n   Ci-dessous, un exemple de code qui va servir \u00e0 r\u00e9cup\u00e9rer l&rsquo;image de la cam\u00e9ra avec un rafra\u00eechissement de 100 ms :\n  <\/p>\n  \n  <div class=\"wp-block-wab-pastacode\">\n\t<div class=\"code-embed-wrapper\"> <div class=\"code-embed-infos\"> <a href=\"https:\/\/github.com\/generationrobots-lab\/cozmo-examples\/blob\/master\/vision_simple_camera.py\" title=\"Afficher vision_simple_camera.py\" target=\"_blank\" class=\"code-embed-name\">vision_simple_camera.py<\/a> <a href=\"https:\/\/raw.github.com\/generationrobots-lab\/cozmo-examples\/master\/vision_simple_camera.py\" title=\"Back to vision_simple_camera.py\" class=\"code-embed-raw\" target=\"_blank\">affichage brut<\/a> <\/div> <pre class=\"language-python code-embed-pre line-numbers\"  data-start=\"25\" data-line-offset=\"24\"><code class=\"language-python code-embed-code\">def simple_camera(robot: cozmo.robot.Robot):<br\/>\t# activation du flux camera<br\/>\trobot.camera.image_stream_enabled = True<br\/>\t<br\/>\t# r\u00e9cup\u00e9ration de l&#039;image cam\u00e9ra<br\/>\tlatest_image = robot.world.latest_image<br\/><\/code><\/pre> <\/div><\/div>\n\n  \n  <p>\n   Ce code se contente uniquement de r\u00e9cup\u00e9rer l&rsquo;image.\u00a0Nous allons donc l&rsquo;am\u00e9liorer afin de cr\u00e9er un streaming vid\u00e9o avec ces images cam\u00e9ra.\n  <\/p>\n  \n  \n  <h3 class=\"wp-block-heading\" id=\"h-streaming-video-du-flux-camera\">\n   Streaming vid\u00e9o du flux cam\u00e9ra\n  <\/h3>\n  \n  \n  <p>\n   Ici, nous allons utiliser TkInter (une librairie tr\u00e8s simple d&rsquo;utilisation permettant de construire des interfaces graphiques avec Python) pour afficher le streaming vid\u00e9o de Cozmo dans un fen\u00eatre d\u00e9di\u00e9e. Cette classe est disponible sur notre\n   <a class=\"catalogue\" href=\"https:\/\/github.com\/generationrobots-lab\/cozmo-examples\" rel=\"noopener\" target=\"_blank\" title=\"Repository GitHub G\u00e9n\u00e9ration Robots - Cozmo SDK\">\n    repository GitHub\n   <\/a>\n   de m\u00eame que l&rsquo;exemple complet.\n  <\/p>\n  \n  <div class=\"wp-block-wab-pastacode\">\n\t<div class=\"code-embed-wrapper\"> <div class=\"code-embed-infos\"> <a href=\"https:\/\/github.com\/generationrobots-lab\/cozmo-examples\/blob\/master\/vision_stream_camera.py\" title=\"Afficher vision_stream_camera.py\" target=\"_blank\" class=\"code-embed-name\">vision_stream_camera.py<\/a> <a href=\"https:\/\/raw.github.com\/generationrobots-lab\/cozmo-examples\/master\/vision_stream_camera.py\" title=\"Back to vision_stream_camera.py\" class=\"code-embed-raw\" target=\"_blank\">affichage brut<\/a> <\/div> <pre class=\"language-python code-embed-pre line-numbers\"  data-start=\"28\" data-line-offset=\"27\"><code class=\"language-python code-embed-code\">from PIL import Image, ImageTk<br\/>from libs.simple_image_viewer import SimpleImageViewer<br\/><br\/>def stream_camera(robot: cozmo.robot.Robot):<br\/>\t<br\/>\t# on active le stream camera<br\/>\trobot.camera.image_stream_enabled = True<br\/><br\/>\t# instance de la vue <br\/>\timage_view = SimpleImageViewer(w=320, h=240)<br\/><br\/><br\/>\tprint(&quot;Press CTRL-C to quit&quot;)<br\/>\ttry:<br\/>\t\twhile True:<br\/>\t\t\tlatest_image = robot.world.latest_image<br\/>\t\t\tif latest_image:<br\/>\t\t\t\t<br\/>\t\t\t\t# affichage du image_number<br\/>\t\t\t\t#print(latest_image.image_number)<br\/>\t\t\t\tprint(&#039;.&#039;, end=&#039;&#039;, flush=True)<br\/><br\/>\t\t\t\t# r\u00e9cup\u00e9ration du raw<br\/>\t\t\t\tim = latest_image.raw_image<br\/><br\/>\t\t\t\t# update de la vue<br\/>\t\t\t\timage = ImageTk.PhotoImage(im)<br\/>\t\t\t\timage_view.update_image(image)<br\/><br\/>\t\t\t# refresh tous les 100 ms<br\/>\t\t\ttime.sleep(0.1)<br\/><br\/>\t# pour capter le Ctrl+C et terminer proprement\t\t<br\/>\texcept KeyboardInterrupt:<br\/>\t\tsys.exit()<br\/><\/code><\/pre> <\/div><\/div>\n\n  \n  <p>\n   Vous devriez maintenant voir le streaming vid\u00e9o de la cam\u00e9ra de Cozmo sur l&rsquo;\u00e9cran de votre PC.\n  <\/p>\n  \n  \n  <h3 class=\"wp-block-heading\" id=\"h-informations-supplementaires-sur-le-streaming-video-avec-cozmo\">\n   Informations suppl\u00e9mentaires sur le streaming vid\u00e9o avec Cozmo\n  <\/h3>\n  \n  \n  <p>\n   La cam\u00e9ra de Cozmo peut fournir des images en 640 x 480 pixels, mais le firmware ne supporte que des images de r\u00e9solution inf\u00e9rieure pour le moment.\n  <\/p>\n  \n  \n  <p>\n   De m\u00eame, la cam\u00e9ra du robot per\u00e7oit les couleurs, mais la transmission des vid\u00e9os se fait en noir et blanc pour \u00e9conomiser la bande passante utilis\u00e9e.\n  <\/p>\n  \n <\/body>\n<\/html>","protected":false},"excerpt":{"rendered":"<p>Objectif : r\u00e9cup\u00e9rer une image ou un flux d&rsquo;image de la cam\u00e9ra Les pr\u00e9requis Acc\u00e9der \u00e0 la cam\u00e9ra du robot Cozmo Pr\u00e9sentation de la cam\u00e9ra de Cozmo Cozmo dispose d&rsquo;une camera VGA 30 embarqu\u00e9e. Celle-ci fournit des images en noir et blanc de dimension 320 x 240 pixels. L&rsquo;angle de la cam\u00e9ra est de 60\u00b0[&#8230;]<br \/> <a class=\"button\" href=\"https:\/\/www.generationrobots.com\/blog\/fr\/cozmo-sdk-streaming-video-avec-la-camera\/\" style=\"float:right;\">Read this article &gt;&gt;<\/a><\/p>\n","protected":false},"author":188,"featured_media":5545,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[1128],"tags":[],"class_list":["post-5363","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-education"],"_links":{"self":[{"href":"https:\/\/www.generationrobots.com\/blog\/wp-json\/wp\/v2\/posts\/5363","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.generationrobots.com\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.generationrobots.com\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.generationrobots.com\/blog\/wp-json\/wp\/v2\/users\/188"}],"replies":[{"embeddable":true,"href":"https:\/\/www.generationrobots.com\/blog\/wp-json\/wp\/v2\/comments?post=5363"}],"version-history":[{"count":21,"href":"https:\/\/www.generationrobots.com\/blog\/wp-json\/wp\/v2\/posts\/5363\/revisions"}],"predecessor-version":[{"id":13138,"href":"https:\/\/www.generationrobots.com\/blog\/wp-json\/wp\/v2\/posts\/5363\/revisions\/13138"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/www.generationrobots.com\/blog\/wp-json\/wp\/v2\/media\/5545"}],"wp:attachment":[{"href":"https:\/\/www.generationrobots.com\/blog\/wp-json\/wp\/v2\/media?parent=5363"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.generationrobots.com\/blog\/wp-json\/wp\/v2\/categories?post=5363"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.generationrobots.com\/blog\/wp-json\/wp\/v2\/tags?post=5363"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}