{"id":6893,"date":"2025-10-31T19:13:39","date_gmt":"2025-10-31T18:13:39","guid":{"rendered":"https:\/\/olivier.hoarau.site\/?p=6893"},"modified":"2025-11-01T08:40:37","modified_gmt":"2025-11-01T07:40:37","slug":"integration-dune-cle-usb-accelerateur-google-coral-sur-zoneminder","status":"publish","type":"post","link":"https:\/\/olivier.hoarau.org\/?p=6893","title":{"rendered":"Int\u00e9gration d&rsquo;une cl\u00e9 USB acc\u00e9l\u00e9rateur Google Coral sur ZoneMinder"},"content":{"rendered":"\n<p>J&rsquo;ai investi dans une cl\u00e9 USB acc\u00e9l\u00e9rateur Google Coral Edge TPU pour moins d&rsquo;une centaine d&rsquo;euros sur un <a href=\"https:\/\/amzn.to\/430LEG8\">c\u00e9l\u00e8bre site de vente en ligne<\/a>. Cette cl\u00e9 est destin\u00e9e \u00e0 booster mon syst\u00e8me personnel de vid\u00e9osurveillance aujourd&rsquo;hui bas\u00e9 sur <a href=\"https:\/\/www.funix.org\/fr\/linux\/index.php?ref=zoneminder\">ZoneMinder<\/a>.<\/p>\n\n\n\n<figure class=\"wp-block-image size-large\"><img data-recalc-dims=\"1\" decoding=\"async\" src=\"https:\/\/i0.wp.com\/www.funix.org\/fr\/linux\/images\/video\/videosurveillance\/google-coral.jpg?w=474&#038;ssl=1\" alt=\"\"\/><figcaption class=\"wp-element-caption\">Cl\u00e9 Google Coral branch\u00e9e sur mon serveur basse consommation Lenovo ThinkCenter M92p<\/figcaption><\/figure>\n\n\n\n<p>Jusqu&rsquo;\u00e0 pr\u00e9sent dans le monde des processeurs on connaissait les CPU et les GPU, il existe maintenant aussi  les TPU. TPU pour <a href=\"https:\/\/fr.wikipedia.org\/wiki\/Tensor_Processing_Unit\">Tensor Processing Unit<\/a>\u00a0est une unit\u00e9 de calcul sp\u00e9cifique\u00a0pour pouvoir exploiter la biblioth\u00e8que opensource <a href=\"https:\/\/www.tensorflow.org\/?hl=fr\">TensorFlow<\/a> qui est utilis\u00e9e dans le monde de l&rsquo;IA pour l&rsquo;apprentissage automatique, les r\u00e9seaux de neurones et les calculs num\u00e9riques g\u00e9n\u00e9raux sur CPU, GPU, cluster de GPU et TPU donc. Pour la petite histoire tensor, ou <a href=\"https:\/\/fr.statisticseasily.com\/glossaire\/Qu%27est-ce-que-le-tenseur-dans-la-science-et-l%27analyse-des-donn%C3%A9es\/\">tenseur<\/a> en fran\u00e7ais, est le nom g\u00e9n\u00e9rique pour les structures de donn\u00e9es utilis\u00e9es pour l&rsquo;apprentissage automatique. Le tout est d\u00e9velopp\u00e9 par Google au sein de la division d\u00e9di\u00e9e \u00e0 l&rsquo;IA <a href=\"https:\/\/fr.wikipedia.org\/wiki\/Google_AI\">Google AI<\/a>. <strong>TensorFlow<\/strong> n&rsquo;est pas le seul moteur d&rsquo;IA, pour s&rsquo;en convaincre <a href=\"https:\/\/en.wikipedia.org\/wiki\/Comparison_of_deep_learning_software\">cette page<\/a> recense les principaux moteurs, mais tous ne b\u00e9n\u00e9ficient d&rsquo;une puce d\u00e9di\u00e9e. L&rsquo;avantage du TPU de Google est qu&rsquo;il se base sur des biblioth\u00e8ques libres qui ont favoris\u00e9 son d\u00e9veloppement et l&rsquo;ont popularis\u00e9, coupl\u00e9 \u00e0 un co\u00fbt abordable qui permet de booster un PC quelconque \u00e0 moindre frais. En terme de performance, il faut savoir qu&rsquo;un TPU peut \u00eatre 15 \u00e0 20 fois plus performant qu&rsquo;un CPU ou GPU pour des t\u00e2ches d&rsquo;apprentissage automatique (cf. <a href=\"https:\/\/www.digitalocean.com\/resources\/articles\/tpu-vs-gpu\">r\u00e9f<\/a>).<\/p>\n\n\n\n<p>L&rsquo;installation est pr\u00e9vue pour les distributions Debian et Debian like comme Ubuntu comme on peut le voir sur <a href=\"https:\/\/gweb-coral-full.uc.r.appspot.com\/docs\/accelerator\/get-started\/#runtime-on-linux\">la page officielle<\/a> et il n&rsquo;y a pas plus d&rsquo;indications pour les autres distributions notamment celles bas\u00e9e sur RPM comme ma Mageia. Trois biblioth\u00e8ques sont n\u00e9cessaires \u00e0 l&rsquo;utilisation de la cl\u00e9, <strong>TensorFlow<\/strong> \u00e9voqu\u00e9e plus haut, <a href=\"https:\/\/github.com\/google-coral\/libedgetpu\">libedgetpu<\/a> pour piloter les p\u00e9riph\u00e9riques Coral et <a href=\"https:\/\/github.com\/google-coral\/pycoral\">PyCoral<\/a>, une biblioth\u00e8que API <strong>Python<\/strong> pour exploiter <strong>TensorFlow<\/strong> sur des p\u00e9riph\u00e9riques Coral. A d\u00e9faut de packages pr\u00e9compil\u00e9s pour ma distribution, je suis parti dans la compilation des biblioth\u00e8ques. Encore une fois je me suis fait assister par <a href=\"https:\/\/chatgpt.com\/\">ChatGPT<\/a>, mais alors qu&rsquo;il m&rsquo;a \u00e9t\u00e9 d&rsquo;<a href=\"https:\/\/olivier.hoarau.org\/?p=6864\">un grand secours pour r\u00e9diger des scripts pour adresser une cam\u00e9ra IP dont l&rsquo;adresse change r\u00e9guli\u00e8rement<\/a>, il m&rsquo;a totalement perdu. Il m&rsquo;a envoy\u00e9 sur un tas de chemins de traverse, souvent contradictoires entre eux, sur la base d&rsquo;informations obsol\u00e8tes, incompl\u00e8tes voire fausses, sans prendre en compte forc\u00e9ment le travail d\u00e9j\u00e0 r\u00e9alis\u00e9, il pouvait dire tout et son contraire en deux questions, pour prendre un exemple une fois il va me dire qu&rsquo;il faut une version de <strong>Bazel<\/strong> sup\u00e9rieure \u00e0 8 et deux questions plus loin il faut une version inf\u00e9rieure \u00e0 7 ! Il y a souvent aucune logique dans l&rsquo;encha\u00eenement des r\u00e9ponses alors que j&rsquo;avais l&rsquo;impression de rester sur mon cheminement logique. Au final j&rsquo;ai perdu un temps consid\u00e9rable \u00e0 exploiter chacune des pistes, finalement j&rsquo;ai arr\u00eat\u00e9 les frais, pris du recul et j&rsquo;y suis all\u00e9 au feeling \u00e0 l&rsquo;ancienne, j&rsquo;ai r\u00e9ussi \u00e0 compiler <strong>TensorFlow<\/strong> et <strong>libedgetpu<\/strong> plus ou moins laborieusement car il est n\u00e9cessaire de faire co\u00efncider les versions pour que \u00e7a fonctionne et j&rsquo;ai trouv\u00e9 sur le net des packages fonctionnels pour <strong>PyCoral<\/strong> compatible avec <strong>Python<\/strong> 3.10 de ma distribution que quelqu&rsquo;un a bien voulu partager. Tout cela est expliqu\u00e9 sur <a href=\"https:\/\/www.funix.org\/fr\/linux\/index.php?ref=videosurveillance#Google_Coral_USB\">cette page<\/a>.<\/p>\n\n\n\n<!--more-->\n\n\n\n<p>Il en reste pas moins que l&rsquo;installation de cette cl\u00e9 n&rsquo;est pas la finalit\u00e9, il restait \u00e0 voir ce qu&rsquo;elle apporte \u00e0 <strong>ZoneMinder<\/strong>. Le gain principal est clairement au niveau des performances, lors de la d\u00e9tection d&rsquo;\u00e9v\u00e8nement la charge du CPU montait en fl\u00e8che. Pour ce qui est la reconnaissances des objets, j&rsquo;ai toujours gal\u00e9r\u00e9 \u00e0 trouver les bons r\u00e9glages avec <strong>ZoneMinder<\/strong> qui est quand m\u00eame de ce c\u00f4t\u00e9 une bonne usine \u00e0 gaz et je n&rsquo;ai pas pris le recul suffisant pour estimer le gain car j&rsquo;ai imm\u00e9diatement saisi l&rsquo;opportunit\u00e9 de tester son concurrent libre <a href=\"https:\/\/www.funix.org\/fr\/linux\/index.php?ref=frigate\">Frigate<\/a>.<\/p>\n\n\n\n<p>Jusqu&rsquo;\u00e0 pr\u00e9sent je n&rsquo;avais pas \u00e9t\u00e9 plus loin dans les tests et l&rsquo;utilisation de <strong>Frigate<\/strong> car il \u00e9tait en l&rsquo;\u00e9tat inutilisable avec un simple CPU. Mais avec la cl\u00e9, c&rsquo;est le jour et la nuit comme les deux copies d&rsquo;\u00e9cran des ressources syst\u00e8me l&rsquo;attestent.<\/p>\n\n\n\n<figure class=\"wp-block-image size-large\"><img data-recalc-dims=\"1\" decoding=\"async\" src=\"https:\/\/i0.wp.com\/www.funix.org\/fr\/linux\/images\/video\/videosurveillance\/frigate\/frigate-system.jpg?w=474&#038;ssl=1\" alt=\"\"\/><figcaption class=\"wp-element-caption\">CPU seul<\/figcaption><\/figure>\n\n\n\n<figure class=\"wp-block-image size-large\"><a href=\"https:\/\/i0.wp.com\/olivier.hoarau.org\/wp-content\/uploads\/frigate-system-tpu.jpg?ssl=1\"><img data-recalc-dims=\"1\" loading=\"lazy\" decoding=\"async\" width=\"474\" height=\"232\" src=\"https:\/\/i0.wp.com\/olivier.hoarau.org\/wp-content\/uploads\/frigate-system-tpu.jpg?resize=474%2C232&#038;ssl=1\" alt=\"\" class=\"wp-image-6896\" srcset=\"https:\/\/i0.wp.com\/olivier.hoarau.org\/wp-content\/uploads\/frigate-system-tpu.jpg?resize=1024%2C502&amp;ssl=1 1024w, https:\/\/i0.wp.com\/olivier.hoarau.org\/wp-content\/uploads\/frigate-system-tpu.jpg?resize=300%2C147&amp;ssl=1 300w, https:\/\/i0.wp.com\/olivier.hoarau.org\/wp-content\/uploads\/frigate-system-tpu.jpg?resize=768%2C377&amp;ssl=1 768w, https:\/\/i0.wp.com\/olivier.hoarau.org\/wp-content\/uploads\/frigate-system-tpu.jpg?resize=1536%2C754&amp;ssl=1 1536w, https:\/\/i0.wp.com\/olivier.hoarau.org\/wp-content\/uploads\/frigate-system-tpu.jpg?w=1863&amp;ssl=1 1863w, https:\/\/i0.wp.com\/olivier.hoarau.org\/wp-content\/uploads\/frigate-system-tpu.jpg?w=948&amp;ssl=1 948w, https:\/\/i0.wp.com\/olivier.hoarau.org\/wp-content\/uploads\/frigate-system-tpu.jpg?w=1422&amp;ssl=1 1422w\" sizes=\"auto, (max-width: 474px) 100vw, 474px\" \/><\/a><figcaption class=\"wp-element-caption\">Avec TPU<\/figcaption><\/figure>\n\n\n\n<p><strong>Frigate<\/strong> est enfin utilisable et se r\u00e9v\u00e8le d&rsquo;une facilit\u00e9 d\u00e9concertante pour la configuration, les r\u00e9glages et l&rsquo;utilisation. \u00c7a n&rsquo;a rien \u00e0 voir avec <strong>ZoneMinder<\/strong> qui est peu convivial et d&rsquo;une complexit\u00e9 d\u00e9routante. <strong>Frigate<\/strong> est aujourd&rsquo;hui en phase de test pour piloter mon syst\u00e8me de vid\u00e9osurveillance et est bien parti pour le rester. En compl\u00e9ment on pourra consulter<a href=\"https:\/\/haade.fr\/fr\/blog\/frigate-nvr-google-coral-ai-acceleration-materielle\"> cette page<\/a> de l&rsquo;excellent site <a href=\"https:\/\/haade.fr\/\">haade<\/a> consacr\u00e9 \u00e0 la domotique qui pr\u00e9sente l&rsquo;installation simplissime de <strong>Frigate<\/strong> sous Debian et qui \u00e9voque les performances du Google Coral en terme d&rsquo;<a href=\"https:\/\/cloud.google.com\/discover\/what-is-ai-inference?hl=fr\">inf\u00e9rence<\/a> qui est un indicateur de la capacit\u00e9 d&rsquo;apprentissage d&rsquo;un moteur d&rsquo;IA.<\/p>\n\n\n\n<p>Ayant pouss\u00e9 assez loin sa configuration j&rsquo;ai cr\u00e9\u00e9 sur mon site <a href=\"https:\/\/www.funix.org\">Funix<\/a> une <a href=\"https:\/\/www.funix.org\/fr\/linux\/index.php?ref=frigate\">page d\u00e9di\u00e9e<\/a>. On y retrouvera \u00e9galement <a href=\"http:\/\/une page sur ZoneMinder\">une page sur ZoneMinder<\/a> et <a href=\"https:\/\/www.funix.org\/fr\/linux\/index.php?ref=videosurveillance\">une autre pour tout l&rsquo;aspect hardware<\/a>, installation des cam\u00e9ras et de la cl\u00e9 Google Coral.<\/p>\n\n\n\n<p><\/p>\n","protected":false},"excerpt":{"rendered":"<p>L&rsquo;auteur a investi dans une cl\u00e9 USB Google Coral Edge TPU pour am\u00e9liorer son syst\u00e8me de vid\u00e9osurveillance bas\u00e9 sur ZoneMinder. Bien qu&rsquo;il ait rencontr\u00e9 des difficult\u00e9s pour installer les biblioth\u00e8ques n\u00e9cessaires, l&rsquo;ajout de la cl\u00e9 a consid\u00e9rablement am\u00e9lior\u00e9 les performances et a rendu le logiciel Frigate, plus convivial, utilisable pour la surveillance.<\/p>\n","protected":false},"author":4,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"ngg_post_thumbnail":0,"_jetpack_newsletter_access":"","_jetpack_dont_email_post_to_subs":false,"_jetpack_newsletter_tier_id":0,"_jetpack_memberships_contains_paywalled_content":false,"_jetpack_memberships_contains_paid_content":false,"footnotes":"","jetpack_post_was_ever_published":false,"_share_on_mastodon":"0"},"categories":[5,12,10],"tags":[109],"class_list":["post-6893","post","type-post","status-publish","format-standard","hentry","category-logiciels-libres","category-vie-de-funix","category-vie-de-mes-sites","tag-videosurveillance"],"share_on_mastodon":{"url":"https:\/\/mastodon.social\/@funix\/115470134260323282","error":""},"jetpack_featured_media_url":"","jetpack_sharing_enabled":true,"jetpack_shortlink":"https:\/\/wp.me\/peOjJ-1Nb","jetpack_likes_enabled":true,"_links":{"self":[{"href":"https:\/\/olivier.hoarau.org\/index.php?rest_route=\/wp\/v2\/posts\/6893","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/olivier.hoarau.org\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/olivier.hoarau.org\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/olivier.hoarau.org\/index.php?rest_route=\/wp\/v2\/users\/4"}],"replies":[{"embeddable":true,"href":"https:\/\/olivier.hoarau.org\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=6893"}],"version-history":[{"count":15,"href":"https:\/\/olivier.hoarau.org\/index.php?rest_route=\/wp\/v2\/posts\/6893\/revisions"}],"predecessor-version":[{"id":6911,"href":"https:\/\/olivier.hoarau.org\/index.php?rest_route=\/wp\/v2\/posts\/6893\/revisions\/6911"}],"wp:attachment":[{"href":"https:\/\/olivier.hoarau.org\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=6893"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/olivier.hoarau.org\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=6893"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/olivier.hoarau.org\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=6893"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}