{"id":1743,"date":"2026-03-25T09:02:04","date_gmt":"2026-03-25T05:02:04","guid":{"rendered":"https:\/\/iremi.univ-reunion.fr\/?p=1743"},"modified":"2026-04-23T14:43:12","modified_gmt":"2026-04-23T10:43:12","slug":"denombrer-sans-compter","status":"publish","type":"post","link":"https:\/\/iremi.univ-reunion.fr\/?p=1743","title":{"rendered":"D\u00e9nombrer sans compter"},"content":{"rendered":"\n<p>Les experts du <em>m&rsquo;raha wa n&rsquo;tso<\/em> \u00e0 Mayotte ne comptent jamais les graines (Tiennot communication priv\u00e9e). Pour le <em>katro<\/em> de Madagascar, seuls les enfants ont le droit de compter les graines, sinon le seul fait d&rsquo;avoir touch\u00e9 ne serait-ce qu&rsquo;une graine, oblige \u00e0 semer depuis la case o\u00f9 se trouvait cette graine. Toujours \u00e0 Madagascar (Tiennot communication priv\u00e9e) les marchands de fruits connaissent avec une grande pr\u00e9cision le cardinal d&rsquo;un tas de fruits sans compter ceux-ci. Quand \u00e0 Mayotte, les champions du <em>m&rsquo;raha wa n&rsquo;tso<\/em> savent avec pr\u00e9cision (cette connaissance \u00e9tant d&rsquo;importance strat\u00e9gique) le nombre de graines contenu dans la <em>nyumba<\/em> (la case de forme carr\u00e9e) sans jamais compter ces graines.<\/p>\n\n\n\n<figure class=\"wp-block-image size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"800\" height=\"521\" src=\"https:\/\/iremi.univ-reunion.fr\/wp-content\/uploads\/2026\/03\/zanzibar-bwejuu-game-bao-kalaha-african-village-island-tanzania-october-236594350.jpg\" alt=\"\" class=\"wp-image-1899\" srcset=\"https:\/\/iremi.univ-reunion.fr\/wp-content\/uploads\/2026\/03\/zanzibar-bwejuu-game-bao-kalaha-african-village-island-tanzania-october-236594350.jpg 800w, https:\/\/iremi.univ-reunion.fr\/wp-content\/uploads\/2026\/03\/zanzibar-bwejuu-game-bao-kalaha-african-village-island-tanzania-october-236594350-300x195.jpg 300w, https:\/\/iremi.univ-reunion.fr\/wp-content\/uploads\/2026\/03\/zanzibar-bwejuu-game-bao-kalaha-african-village-island-tanzania-october-236594350-768x500.jpg 768w\" sizes=\"auto, (max-width: 800px) 100vw, 800px\" \/><\/figure>\n\n\n\n<p>Comment font-ils ? Une premi\u00e8re possibilit\u00e9 est qu&rsquo;ils aient m\u00e9moris\u00e9 les nombres de graines au cours de la partie (ou alors qu&rsquo;ils aient compt\u00e9 les coups jou\u00e9s, et les graines des cases peu remplies, et retrouv\u00e9 le cardinal des <em>nyumbas<\/em> par d\u00e9duction), ce qui suppose une m\u00e9moire de travail impressionnante. Une seconde est qu&rsquo;ils savent estimer avec pr\u00e9cision un grand nombre entier.<\/p>\n\n\n\n<p>Dans cet article, on se propose d&rsquo;explorer la mani\u00e8re dont des machines (vous avez dit IA ?) peuvent d\u00e9nombrer sans compter. On peut d\u00e9nombrer par pes\u00e9e, par estimation du volume, voire par le regard.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Premier projet : d\u00e9nombrement par pesage<\/h2>\n\n\n\n<p>Un plateau de jeu de semailles (par exemple, <a href=\"https:\/\/iremi.univ-reunion.fr\/?p=689\">Sowing<\/a> \u00e0 6 cases) p\u00e9dagogique est un alignement de cases (o\u00f9 on s\u00e8me des graines), chacune d&rsquo;entre elles ayant en son fond une <a href=\"https:\/\/fr.wikipedia.org\/wiki\/Jauge_de_d%C3%A9formation\">jauge de contrainte<\/a>, permettant de mesurer la masse du tas de graines ; de plus, \u00e0 c\u00f4t\u00e9 de chaque case, figure un afficheur LED indiquant le nombre de graines actuellement dans la case. Quelque chose comme<\/p>\n\n\n\n<figure class=\"wp-block-table\"><table class=\"has-fixed-layout\"><tbody><tr><td>o<\/td><td>oo<\/td><td><\/td><td>o<\/td><td><\/td><td>oo<\/td><\/tr><tr><td><a href=\"https:\/\/en.wikipedia.org\/wiki\/File:7-segment_bc.svg\"><img loading=\"lazy\" decoding=\"async\" width=\"10\" height=\"17\" src=\"https:\/\/upload.wikimedia.org\/wikipedia\/commons\/thumb\/b\/be\/7-segment_bc.svg\/20px-7-segment_bc.svg.png\" alt=\"1\"><\/a><\/td><td><a href=\"https:\/\/en.wikipedia.org\/wiki\/File:7-segment_abdeg.svg\"><img loading=\"lazy\" decoding=\"async\" width=\"10\" height=\"17\" src=\"https:\/\/upload.wikimedia.org\/wikipedia\/commons\/thumb\/f\/f8\/7-segment_abdeg.svg\/20px-7-segment_abdeg.svg.png\" alt=\"2\"><\/a><\/td><td><a href=\"https:\/\/en.wikipedia.org\/wiki\/File:7-segment_abcdef.svg\"><img loading=\"lazy\" decoding=\"async\" width=\"10\" height=\"17\" src=\"https:\/\/upload.wikimedia.org\/wikipedia\/commons\/thumb\/4\/49\/7-segment_abcdef.svg\/20px-7-segment_abcdef.svg.png\" alt=\"0\"><\/a><\/td><td><a href=\"https:\/\/en.wikipedia.org\/wiki\/File:7-segment_bc.svg\"><img loading=\"lazy\" decoding=\"async\" width=\"10\" height=\"17\" src=\"https:\/\/upload.wikimedia.org\/wikipedia\/commons\/thumb\/b\/be\/7-segment_bc.svg\/20px-7-segment_bc.svg.png\" alt=\"1\"><\/a><a href=\"https:\/\/en.wikipedia.org\/wiki\/File:7-segment_abcdg.svg\"><\/a><a href=\"https:\/\/en.wikipedia.org\/wiki\/File:7-segment_abcdg.svg\"><\/a><a href=\"https:\/\/en.wikipedia.org\/wiki\/File:7-segment_abcdg.svg\"><\/a><a href=\"https:\/\/en.wikipedia.org\/wiki\/File:7-segment_abcdg.svg\"><\/a><a href=\"https:\/\/en.wikipedia.org\/wiki\/File:7-segment_abcdg.svg\"><\/a><a href=\"https:\/\/en.wikipedia.org\/wiki\/File:7-segment_abcdg.svg\"><\/a><a href=\"https:\/\/en.wikipedia.org\/wiki\/File:7-segment_bcfg.svg\"><\/a><\/td><td><a href=\"https:\/\/en.wikipedia.org\/wiki\/File:7-segment_abcdef.svg\"><img loading=\"lazy\" decoding=\"async\" width=\"10\" height=\"17\" src=\"https:\/\/upload.wikimedia.org\/wikipedia\/commons\/thumb\/4\/49\/7-segment_abcdef.svg\/20px-7-segment_abcdef.svg.png\" alt=\"0\"><\/a><\/td><td><a href=\"https:\/\/en.wikipedia.org\/wiki\/File:7-segment_abdeg.svg\"><img loading=\"lazy\" decoding=\"async\" width=\"10\" height=\"17\" src=\"https:\/\/upload.wikimedia.org\/wikipedia\/commons\/thumb\/f\/f8\/7-segment_abdeg.svg\/20px-7-segment_abdeg.svg.png\" alt=\"2\"><\/a><\/td><\/tr><\/tbody><\/table><\/figure>\n\n\n\n<p>qui peut aider les jeunes \u00e9l\u00e8ves \u00e0 apprendre \u00e0 associer les chiffres et les nombres. Voici un exemple de ce qui est attendu :<\/p>\n\n\n\n<figure class=\"wp-block-image size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"491\" src=\"https:\/\/iremi.univ-reunion.fr\/wp-content\/uploads\/2026\/03\/sowingdigits1-1024x491.jpg\" alt=\"\" class=\"wp-image-1814\" srcset=\"https:\/\/iremi.univ-reunion.fr\/wp-content\/uploads\/2026\/03\/sowingdigits1-1024x491.jpg 1024w, https:\/\/iremi.univ-reunion.fr\/wp-content\/uploads\/2026\/03\/sowingdigits1-300x144.jpg 300w, https:\/\/iremi.univ-reunion.fr\/wp-content\/uploads\/2026\/03\/sowingdigits1-768x368.jpg 768w, https:\/\/iremi.univ-reunion.fr\/wp-content\/uploads\/2026\/03\/sowingdigits1.jpg 1503w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><\/figure>\n\n\n\n<p>Un probl\u00e8me qui se pose avec la pes\u00e9e de graines, est que celles-ci ne sont pas calibr\u00e9es avec pr\u00e9cision. Une mesure effectu\u00e9e sur les 48 graines d&rsquo;un jeu de <em>katro<\/em> indique une masse moyenne de 2,583g et un \u00e9cart-type (estim\u00e9) de 0,414g. Le trac\u00e9 d&rsquo;une <a href=\"https:\/\/fr.wikipedia.org\/wiki\/Droite_de_Henry\">droite de Henry<\/a> :<\/p>\n\n\n\n<div data-wp-interactive=\"core\/file\" class=\"wp-block-file\"><object data-wp-bind--hidden=\"!state.hasPdfPreview\" hidden class=\"wp-block-file__embed\" data=\"https:\/\/iremi.univ-reunion.fr\/wp-content\/uploads\/2026\/02\/dtehenry.pdf\" type=\"application\/pdf\" style=\"width:100%;height:600px\" aria-label=\"Contenu embarqu\u00e9 dtehenry.\"><\/object><a id=\"wp-block-file--media-4e8e1a97-cafb-4be1-a834-7b7abba91e21\" href=\"https:\/\/iremi.univ-reunion.fr\/wp-content\/uploads\/2026\/02\/dtehenry.pdf\">dtehenry<\/a><a href=\"https:\/\/iremi.univ-reunion.fr\/wp-content\/uploads\/2026\/02\/dtehenry.pdf\" class=\"wp-block-file__button wp-element-button\" download aria-describedby=\"wp-block-file--media-4e8e1a97-cafb-4be1-a834-7b7abba91e21\">T\u00e9l\u00e9charger<\/a><\/div>\n\n\n\n<p>sugg\u00e8re, avec un coefficient de corr\u00e9lation de carr\u00e9 0,988 que la mod\u00e9lisation de la masse d&rsquo;une graine par une variable al\u00e9atoire normale de param\u00e8tres 2,583g et 0,414g est pertinente dans ce contexte. En supposant qu&rsquo;il y a ind\u00e9pendance entre les masses des graines, la masse du tas de <math data-latex=\"n\"><semantics><mi>n<\/mi><annotation encoding=\"application\/x-tex\">n<\/annotation><\/semantics><\/math> graines est alors normale de param\u00e8tres <math data-latex=\"n \\times 2,583\"><semantics><mrow><mi>n<\/mi><mo>\u00d7<\/mo><mn>2,583<\/mn><\/mrow><annotation encoding=\"application\/x-tex\">n \\times 2,583<\/annotation><\/semantics><\/math> et <math data-latex=\"0,414 \\times \\sqrt{n}\"><semantics><mrow><mn>0,414<\/mn><mo>\u00d7<\/mo><msqrt><mi>n<\/mi><\/msqrt><\/mrow><annotation encoding=\"application\/x-tex\">0,414 \\times \\sqrt{n}<\/annotation><\/semantics><\/math> et le quotient de cette masse totale par 2,583 suit lui aussi une loi normale, de param\u00e8tres <math data-latex=\"n\"><semantics><mi>n<\/mi><annotation encoding=\"application\/x-tex\">n<\/annotation><\/semantics><\/math> et <math data-latex=\"0,16 \\times \\sqrt{n}\"><semantics><mrow><mn>0,16<\/mn><mo>\u00d7<\/mo><msqrt><mi>n<\/mi><\/msqrt><\/mrow><annotation encoding=\"application\/x-tex\">0,16 \\times \\sqrt{n}<\/annotation><\/semantics><\/math>. La probabilit\u00e9 qu&rsquo;elle soit comprise entre <math data-latex=\"n-\\frac{1}{2}\"><semantics><mrow><mi>n<\/mi><mo>\u2212<\/mo><mfrac><mn>1<\/mn><mn>2<\/mn><\/mfrac><\/mrow><annotation encoding=\"application\/x-tex\">n-\\frac{1}{2}<\/annotation><\/semantics><\/math> et <math data-latex=\"n + \\frac{1}{2}\"><semantics><mrow><mi>n<\/mi><mo>+<\/mo><mfrac><mn>1<\/mn><mn>2<\/mn><\/mfrac><\/mrow><annotation encoding=\"application\/x-tex\">n + \\frac{1}{2}<\/annotation><\/semantics><\/math> (c&rsquo;est-\u00e0-dire que son arrondi entier soit correct) est donn\u00e9e dans le tableau suivant :<\/p>\n\n\n\n<figure class=\"wp-block-table\"><table class=\"has-fixed-layout\"><tbody><tr><td>1<\/td><td>0,998221949401783<\/td><\/tr><tr><td>2<\/td><td>0,972874613820933<\/td><\/tr><tr><td>3<\/td><td>0,928803110724748<\/td><\/tr><tr><td>4<\/td><td>0,881829754134665<\/td><\/tr><tr><td>5<\/td><td>0,837749500152768<\/td><\/tr><tr><td>6<\/td><td>0,797965253549604<\/td><\/tr><tr><td>7<\/td><td>0,762452482209559<\/td><\/tr><tr><td>8<\/td><td>0,730777292410847<\/td><\/tr><tr><td>9<\/td><td>0,702433751636496<\/td><\/tr><tr><td>10<\/td><td>0,676951054399075<\/td><\/tr><tr><td>11<\/td><td>0,653921494553211<\/td><\/tr><tr><td>12<\/td><td>0,633001454164905<\/td><\/tr><\/tbody><\/table><\/figure>\n\n\n\n<p>On voit que, pour des grands tas (ceux-l\u00e0 m\u00eame o\u00f9 l&rsquo;humain est peu performant pour ce qui est de d\u00e9nombrer), la probabilit\u00e9 de se tromper est d&rsquo;une chance sur trois, ce qui n&rsquo;est pas n\u00e9gligeable.<\/p>\n\n\n\n<p>Pour r\u00e9aliser ce projet, par exemple sur un Sowing p\u00e9dagogique \u00e0 6 cases, il faut<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>un microcontr\u00f4leur type Arduino ou ESP-32,<\/li>\n\n\n\n<li>6 capteurs de type jauge de contrainte, dont les signaux sont multiplex\u00e9s pour pouvoir n&rsquo;utiliser qu&rsquo;un seul convertisseur analogique-num\u00e9rique du ESP-32 (lequel dispose de 8 canaux tout de m\u00eame),<\/li>\n\n\n\n<li>6 actuateurs de type <a href=\"https:\/\/alainbusser.frama.io\/NSI-IREMI-974\/septsegments.html\">affichage LED 7 segments<\/a>, un (deux s&rsquo;il risque d&rsquo;y avoir plus de 9 graines) par case,  avec interfaces s\u00e9ries permettant de les programmer en binaire, et chacun branch\u00e9 sur une sortie num\u00e9rique du ESP-32.<\/li>\n<\/ul>\n\n\n\n<p>Le module ESP-32 peut \u00eatre programm\u00e9 en <a href=\"https:\/\/fr.wikipedia.org\/wiki\/MicroPython\">micropython<\/a>. Le plateau serait plus p\u00e9dagogique si les chiffres \u00e9taient affich\u00e9s en calligraphie : ce sont les formes que les enfants doivent apprendre \u00e0 reconna\u00eetre.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Variante avec <em>machine learning<\/em><\/h3>\n\n\n\n<p>L&rsquo;initiation au machine learning commence souvent par la <a href=\"https:\/\/fr.wikipedia.org\/wiki\/R%C3%A9gression_lin%C3%A9aire\">r\u00e9gression lin\u00e9aire<\/a> (qui est un apprentissage supervis\u00e9 pour une pr\u00e9diction) et il se trouve que justement le tableur permet de calculer une droite de r\u00e9gression, et qu&rsquo;en plus les fonctions affines sont au programme de math\u00e9matiques de Seconde.<\/p>\n\n\n\n<p>Le mat\u00e9riel n\u00e9cessaire est compos\u00e9 de<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>machines ESP-32 (programmables en micropython ; id\u00e9alement une par \u00e9l\u00e8ve),<\/li>\n\n\n\n<li>jauges de contrainte (\u00e0 brancher sur une entr\u00e9e analogique de l&rsquo;ESP-32),<\/li>\n\n\n\n<li>ordinateurs, sur chacun desquel est install\u00e9 Thonny et un tableur.<\/li>\n<\/ul>\n\n\n\n<p>Ci-dessous, \u00e0 gauche c&rsquo;est la carte ESP-32, au centre l&rsquo;amplificateur hx-711, et \u00e0 droite la jauge de contrainte avec 10 graines de <a href=\"https:\/\/fr.wikipedia.org\/wiki\/Soja_noir_sal%C3%A9\">soja noir<\/a> pos\u00e9es dessus :<\/p>\n\n\n\n<figure class=\"wp-block-image size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"720\" height=\"540\" src=\"https:\/\/iremi.univ-reunion.fr\/wp-content\/uploads\/2026\/03\/learn.jpg\" alt=\"\" class=\"wp-image-1993\" srcset=\"https:\/\/iremi.univ-reunion.fr\/wp-content\/uploads\/2026\/03\/learn.jpg 720w, https:\/\/iremi.univ-reunion.fr\/wp-content\/uploads\/2026\/03\/learn-300x225.jpg 300w\" sizes=\"auto, (max-width: 720px) 100vw, 720px\" \/><\/figure>\n\n\n\n<p>Une fois lanc\u00e9 Thonny et branch\u00e9 (par USB) l&rsquo;ESP-32, il faut changer l&rsquo;interpr\u00e9teur Python pour choisir celui de l&rsquo;ESP-32, pour cela on va dans <em>ex\u00e9cuter <\/em>:<\/p>\n\n\n\n<figure class=\"wp-block-image size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"505\" height=\"191\" src=\"https:\/\/iremi.univ-reunion.fr\/wp-content\/uploads\/2026\/03\/Capture-decran-du-2026-04-09-08-01-02.png\" alt=\"\" class=\"wp-image-1970\" srcset=\"https:\/\/iremi.univ-reunion.fr\/wp-content\/uploads\/2026\/03\/Capture-decran-du-2026-04-09-08-01-02.png 505w, https:\/\/iremi.univ-reunion.fr\/wp-content\/uploads\/2026\/03\/Capture-decran-du-2026-04-09-08-01-02-300x113.png 300w\" sizes=\"auto, (max-width: 505px) 100vw, 505px\" \/><\/figure>\n\n\n\n<p>L\u00e0, on choisit la version ESP-32 :<\/p>\n\n\n\n<figure class=\"wp-block-image size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"552\" height=\"399\" src=\"https:\/\/iremi.univ-reunion.fr\/wp-content\/uploads\/2026\/03\/Capture-decran-du-2026-04-09-08-01-28.png\" alt=\"\" class=\"wp-image-1971\" srcset=\"https:\/\/iremi.univ-reunion.fr\/wp-content\/uploads\/2026\/03\/Capture-decran-du-2026-04-09-08-01-28.png 552w, https:\/\/iremi.univ-reunion.fr\/wp-content\/uploads\/2026\/03\/Capture-decran-du-2026-04-09-08-01-28-300x217.png 300w\" sizes=\"auto, (max-width: 552px) 100vw, 552px\" \/><\/figure>\n\n\n\n<p>on clique dessus :<\/p>\n\n\n\n<figure class=\"wp-block-image size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"552\" height=\"399\" src=\"https:\/\/iremi.univ-reunion.fr\/wp-content\/uploads\/2026\/03\/Capture-decran-du-2026-04-09-08-03-03.png\" alt=\"\" class=\"wp-image-1972\" srcset=\"https:\/\/iremi.univ-reunion.fr\/wp-content\/uploads\/2026\/03\/Capture-decran-du-2026-04-09-08-03-03.png 552w, https:\/\/iremi.univ-reunion.fr\/wp-content\/uploads\/2026\/03\/Capture-decran-du-2026-04-09-08-03-03-300x217.png 300w\" sizes=\"auto, (max-width: 552px) 100vw, 552px\" \/><\/figure>\n\n\n\n<p>puis sur <em>OK<\/em>, ce qui a pour effet de red\u00e9marrer Python, mais en mode ESP-32 :<\/p>\n\n\n\n<figure class=\"wp-block-image size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"839\" height=\"550\" src=\"https:\/\/iremi.univ-reunion.fr\/wp-content\/uploads\/2026\/03\/Capture-decran-du-2026-04-09-08-04-40.png\" alt=\"\" class=\"wp-image-1973\" srcset=\"https:\/\/iremi.univ-reunion.fr\/wp-content\/uploads\/2026\/03\/Capture-decran-du-2026-04-09-08-04-40.png 839w, https:\/\/iremi.univ-reunion.fr\/wp-content\/uploads\/2026\/03\/Capture-decran-du-2026-04-09-08-04-40-300x197.png 300w, https:\/\/iremi.univ-reunion.fr\/wp-content\/uploads\/2026\/03\/Capture-decran-du-2026-04-09-08-04-40-768x503.png 768w\" sizes=\"auto, (max-width: 839px) 100vw, 839px\" \/><\/figure>\n\n\n\n<p>Ensuite, on d\u00e9clare un objet de type broche, avec <code>Pin<\/code> (import\u00e9 du module <code>machine<\/code>), comme <a href=\"https:\/\/esp32tutorials.com\/esp32-adc-esp-idf\/\">entr\u00e9e analogique<\/a>, Puis on commence l&rsquo;apprentissage, dont chaque \u00e9tape consiste \u00e0<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>choisir un entier <math data-latex=\"n \\geqslant 0\"><semantics><mrow><mi>n<\/mi><mo>\u2a7e<\/mo><mn>0<\/mn><\/mrow><annotation encoding=\"application\/x-tex\">n \\geqslant 0<\/annotation><\/semantics><\/math>,<\/li>\n\n\n\n<li>poser <math data-latex=\"n\"><semantics><mi>n<\/mi><annotation encoding=\"application\/x-tex\">n<\/annotation><\/semantics><\/math> graines sur le plateau,<\/li>\n\n\n\n<li>lire (avec la m\u00e9thode read de la broche) la masse du tas de graines,<\/li>\n\n\n\n<li>entrer dans la colonne A le r\u00e9sultat de la lecture,<\/li>\n\n\n\n<li>entrer dans la colonne B le nombre <math data-latex=\"n\"><semantics><mi>n<\/mi><annotation encoding=\"application\/x-tex\">n<\/annotation><\/semantics><\/math>.<\/li>\n<\/ul>\n\n\n\n<p>En recommen\u00e7ant sur plusieurs lignes du tableur des donn\u00e9es de ce genre, on r\u00e9alise l&rsquo;apprentissage. Il est conseill\u00e9 de choisir au moins une fois chaque valeur de  <math data-latex=\"n\"><semantics><mi>n<\/mi><annotation encoding=\"application\/x-tex\">n<\/annotation><\/semantics><\/math> entre 0 et 12 (compris). La phase suivante consiste \u00e0 dessiner le nuage de points, puis tracer la doite de r\u00e9gression, avec son \u00e9quation.<\/p>\n\n\n\n<p>L&rsquo;utilisation consiste \u00e0 mettre des graines sur le plateau, lire la tension aux bornes du plateau, puis calculer son image par la fonction affine construite dans l&rsquo;apprentissage, et arrondir \u00e0 l&rsquo;entier le plus proche pour avoir une estimation du nombre de graines. Ensuite on v\u00e9rifie si l&rsquo;estimation correspond au nombre r\u00e9el de graines. En munissant la jauge de contrainte d&rsquo;un amplificateur hx-711, et \u00e0 l&rsquo;aide de <a href=\"https:\/\/github.com\/robert-hh\/hx711\">la biblioth\u00e8que Python<\/a> permettant de g\u00e9rer le tout, on peut effectuer des mesures en lan\u00e7ant ce script :<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>from hx711_gpio import HX711\nfrom machine import Pin\n\npin_sck = Pin(22, Pin.OUT)\npin_dout = Pin(23, Pin.IN)\nhx = HX711(pin_sck, pin_dout, gain=128)<\/code><\/pre>\n\n\n\n<p>Ensuite, dans la console Python, il suffit de <\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>poser quelques graines sur la balance,<\/li>\n\n\n\n<li>\u00e9valuer dans la console l&rsquo;expression <code>hx.get_value()<\/code>,<\/li>\n\n\n\n<li>noter le r\u00e9sultat dans une cellule du tableur (colonne 1) et le nombre de graines dans la cellule voisine (colonne 2)<\/li>\n<\/ul>\n\n\n\n<p>Au bout de quelques mesures not\u00e9es (phase d&rsquo;apprentissage supervis\u00e9), il est possible de dessiner le nuage de points, puis de demander la droite de r\u00e9gression (donnant n fonction de la mesure) :<\/p>\n\n\n\n<figure class=\"wp-block-image size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"756\" height=\"425\" src=\"https:\/\/iremi.univ-reunion.fr\/wp-content\/uploads\/2026\/03\/dte1.png\" alt=\"\" class=\"wp-image-1991\" srcset=\"https:\/\/iremi.univ-reunion.fr\/wp-content\/uploads\/2026\/03\/dte1.png 756w, https:\/\/iremi.univ-reunion.fr\/wp-content\/uploads\/2026\/03\/dte1-300x169.png 300w\" sizes=\"auto, (max-width: 756px) 100vw, 756px\" \/><\/figure>\n\n\n\n<p>Ensuite on peut utiliser le mod\u00e8le pour une estimation en programmant la fonction affine en Python :<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>def f(x):\n   return round(0.00419133506877983*x-13484.4216461023,0)<\/code><\/pre>\n\n\n\n<p>(on arrondit \u00e0 z\u00e9ro chiffre apr\u00e8s la virgule parce qu&rsquo;il y a un nombre entier de graines)<\/p>\n\n\n\n<p>Pour utiliser le mod\u00e8le, on pose des graines sur la balance puis on \u00e9value dans la console l&rsquo;expression <code>f(hx.get_value())<\/code> pour estimer le nombre de graines. On ne s&rsquo;attend pas \u00e0 avoir une estimation correcte \u00e0 chaque fois, par exemple ci-dessous on a mis trois graines pour en estimer 5 :<\/p>\n\n\n\n<figure class=\"wp-block-image size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"482\" height=\"1024\" src=\"https:\/\/iremi.univ-reunion.fr\/wp-content\/uploads\/2026\/03\/fit-482x1024.jpg\" alt=\"\" class=\"wp-image-1992\" srcset=\"https:\/\/iremi.univ-reunion.fr\/wp-content\/uploads\/2026\/03\/fit-482x1024.jpg 482w, https:\/\/iremi.univ-reunion.fr\/wp-content\/uploads\/2026\/03\/fit-141x300.jpg 141w, https:\/\/iremi.univ-reunion.fr\/wp-content\/uploads\/2026\/03\/fit.jpg 720w\" sizes=\"auto, (max-width: 482px) 100vw, 482px\" \/><\/figure>\n\n\n\n<h2 class=\"wp-block-heading\">Second projet : d\u00e9nombrement par regard<\/h2>\n\n\n\n<h3 class=\"wp-block-heading\">Avec ImageJ<\/h3>\n\n\n\n<p>Usuellement, quand on veut estimer le nombre de manifestants dans une manif ou le nombre de globules rouges dans une goutte de sang, on ne le fait ni par pes\u00e9e ni par comptage. Une application int\u00e9ressante sur le smartphone serait celle qui afficherait sur l&rsquo;\u00e9cran de la webcam des cadres de ce genre :<\/p>\n\n\n\n<figure class=\"wp-block-image size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"960\" height=\"720\" src=\"https:\/\/iremi.univ-reunion.fr\/wp-content\/uploads\/2026\/03\/sowingframes.jpg\" alt=\"\" class=\"wp-image-1815\" srcset=\"https:\/\/iremi.univ-reunion.fr\/wp-content\/uploads\/2026\/03\/sowingframes.jpg 960w, https:\/\/iremi.univ-reunion.fr\/wp-content\/uploads\/2026\/03\/sowingframes-300x225.jpg 300w, https:\/\/iremi.univ-reunion.fr\/wp-content\/uploads\/2026\/03\/sowingframes-768x576.jpg 768w\" sizes=\"auto, (max-width: 960px) 100vw, 960px\" \/><\/figure>\n\n\n\n<p>Avec le logiciel libre <a href=\"https:\/\/imagej.net\/ij\/\">ImageJ<\/a>, on peut compter ces graines :<\/p>\n\n\n\n<figure class=\"wp-block-image size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"512\" height=\"512\" src=\"https:\/\/iremi.univ-reunion.fr\/wp-content\/uploads\/2026\/03\/neufzaricotstourne.jpg\" alt=\"\" class=\"wp-image-1799\" srcset=\"https:\/\/iremi.univ-reunion.fr\/wp-content\/uploads\/2026\/03\/neufzaricotstourne.jpg 512w, https:\/\/iremi.univ-reunion.fr\/wp-content\/uploads\/2026\/03\/neufzaricotstourne-300x300.jpg 300w, https:\/\/iremi.univ-reunion.fr\/wp-content\/uploads\/2026\/03\/neufzaricotstourne-150x150.jpg 150w\" sizes=\"auto, (max-width: 512px) 100vw, 512px\" \/><\/figure>\n\n\n\n<p>Les ombres g\u00eanent la visibilit\u00e9, au point que si on essaye d&rsquo;analyser cette image sans retouche, ImageJ ne compte que les constellations :<\/p>\n\n\n\n<figure class=\"wp-block-image size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"509\" height=\"513\" src=\"https:\/\/iremi.univ-reunion.fr\/wp-content\/uploads\/2026\/03\/Capture-decran-2026-02-28-130314.png\" alt=\"\" class=\"wp-image-1801\" srcset=\"https:\/\/iremi.univ-reunion.fr\/wp-content\/uploads\/2026\/03\/Capture-decran-2026-02-28-130314.png 509w, https:\/\/iremi.univ-reunion.fr\/wp-content\/uploads\/2026\/03\/Capture-decran-2026-02-28-130314-298x300.png 298w, https:\/\/iremi.univ-reunion.fr\/wp-content\/uploads\/2026\/03\/Capture-decran-2026-02-28-130314-150x150.png 150w\" sizes=\"auto, (max-width: 509px) 100vw, 509px\" \/><\/figure>\n\n\n\n<p>Il faut donc d&rsquo;abord s\u00e9parer les graines et les ombres. Comme ici les graines sont rouge\u00e2tres, on peut effectuer un filtrage passe-bande :<\/p>\n\n\n\n<figure class=\"wp-block-image size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"512\" height=\"512\" src=\"https:\/\/iremi.univ-reunion.fr\/wp-content\/uploads\/2026\/03\/neufzaricotsbandpass.png\" alt=\"\" class=\"wp-image-1802\" srcset=\"https:\/\/iremi.univ-reunion.fr\/wp-content\/uploads\/2026\/03\/neufzaricotsbandpass.png 512w, https:\/\/iremi.univ-reunion.fr\/wp-content\/uploads\/2026\/03\/neufzaricotsbandpass-300x300.png 300w, https:\/\/iremi.univ-reunion.fr\/wp-content\/uploads\/2026\/03\/neufzaricotsbandpass-150x150.png 150w\" sizes=\"auto, (max-width: 512px) 100vw, 512px\" \/><\/figure>\n\n\n\n<p>Le rouge ressort bien par rapport \u00e0 l&rsquo;ombre grise, et du coup la composante verte de l&rsquo;image porte des graines plus fonc\u00e9es que le reste :<\/p>\n\n\n\n<figure class=\"wp-block-image size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"512\" height=\"512\" src=\"https:\/\/iremi.univ-reunion.fr\/wp-content\/uploads\/2026\/03\/neufzaricotsbandpass.png-green.png\" alt=\"\" class=\"wp-image-1803\" srcset=\"https:\/\/iremi.univ-reunion.fr\/wp-content\/uploads\/2026\/03\/neufzaricotsbandpass.png-green.png 512w, https:\/\/iremi.univ-reunion.fr\/wp-content\/uploads\/2026\/03\/neufzaricotsbandpass.png-green-300x300.png 300w, https:\/\/iremi.univ-reunion.fr\/wp-content\/uploads\/2026\/03\/neufzaricotsbandpass.png-green-150x150.png 150w\" sizes=\"auto, (max-width: 512px) 100vw, 512px\" \/><\/figure>\n\n\n\n<p>Ensuite on choisit un seuil au-del\u00e0 duquel la couleur est suffisamment fonc\u00e9e pour \u00eatre une graine :<\/p>\n\n\n\n<figure class=\"wp-block-image size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"512\" height=\"512\" src=\"https:\/\/iremi.univ-reunion.fr\/wp-content\/uploads\/2026\/03\/neufzaricotsbandpass.png-greenthreshold.png\" alt=\"\" class=\"wp-image-1804\" srcset=\"https:\/\/iremi.univ-reunion.fr\/wp-content\/uploads\/2026\/03\/neufzaricotsbandpass.png-greenthreshold.png 512w, https:\/\/iremi.univ-reunion.fr\/wp-content\/uploads\/2026\/03\/neufzaricotsbandpass.png-greenthreshold-300x300.png 300w, https:\/\/iremi.univ-reunion.fr\/wp-content\/uploads\/2026\/03\/neufzaricotsbandpass.png-greenthreshold-150x150.png 150w\" sizes=\"auto, (max-width: 512px) 100vw, 512px\" \/><\/figure>\n\n\n\n<p>La suite est de la topologie : on demande \u00e0 ImageJ de compter les composantes connexes (<em>analyse particles<\/em>) de la partie noire de l&rsquo;image. Le r\u00e9sultat (pour les \u00ab\u00a0particules\u00a0\u00bb de 400 pixels\u00b2 \u00e0 l&rsquo;infini) est ici :<\/p>\n\n\n\n<figure class=\"wp-block-table\"><table class=\"has-fixed-layout\"><tbody><tr><td><\/td><td>Area<\/td><td>Mean<\/td><\/tr><tr><td>1<\/td><td>1423<\/td><td>246.936<\/td><\/tr><tr><td>2<\/td><td>1474<\/td><td>253.789<\/td><\/tr><tr><td>3<\/td><td>1154<\/td><td>254.337<\/td><\/tr><tr><td>4<\/td><td>1415<\/td><td>250.855<\/td><\/tr><tr><td>5<\/td><td>1670<\/td><td>247.671<\/td><\/tr><tr><td>6<\/td><td>1209<\/td><td>241.079<\/td><\/tr><tr><td>7<\/td><td>1029<\/td><td>248.309<\/td><\/tr><tr><td>8<\/td><td>1520<\/td><td>253.658<\/td><\/tr><tr><td>9<\/td><td>1450<\/td><td>255.000<\/td><\/tr><\/tbody><\/table><\/figure>\n\n\n\n<p>ImageJ compte 9 composantes connexes, donc 9 graines dans l&rsquo;image. Elles peuvent \u00eatre num\u00e9rot\u00e9es :<\/p>\n\n\n\n<figure class=\"wp-block-image size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"512\" height=\"512\" src=\"https:\/\/iremi.univ-reunion.fr\/wp-content\/uploads\/2026\/03\/greenoutlines.png\" alt=\"\" class=\"wp-image-1806\" srcset=\"https:\/\/iremi.univ-reunion.fr\/wp-content\/uploads\/2026\/03\/greenoutlines.png 512w, https:\/\/iremi.univ-reunion.fr\/wp-content\/uploads\/2026\/03\/greenoutlines-300x300.png 300w, https:\/\/iremi.univ-reunion.fr\/wp-content\/uploads\/2026\/03\/greenoutlines-150x150.png 150w\" sizes=\"auto, (max-width: 512px) 100vw, 512px\" \/><\/figure>\n\n\n\n<p>ou sch\u00e9matis\u00e9es par des ellipses :<\/p>\n\n\n\n<figure class=\"wp-block-image size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"512\" height=\"512\" src=\"https:\/\/iremi.univ-reunion.fr\/wp-content\/uploads\/2026\/03\/greenellipses.png\" alt=\"\" class=\"wp-image-1807\" srcset=\"https:\/\/iremi.univ-reunion.fr\/wp-content\/uploads\/2026\/03\/greenellipses.png 512w, https:\/\/iremi.univ-reunion.fr\/wp-content\/uploads\/2026\/03\/greenellipses-300x300.png 300w, https:\/\/iremi.univ-reunion.fr\/wp-content\/uploads\/2026\/03\/greenellipses-150x150.png 150w\" sizes=\"auto, (max-width: 512px) 100vw, 512px\" \/><\/figure>\n\n\n\n<p>Tr\u00e8s bien : l&rsquo;ordinateur sait compter au moins jusqu&rsquo;\u00e0 9. Sauf que la suite d&rsquo;op\u00e9rations pr\u00e9c\u00e9dentes n&rsquo;est pas automatisable (dans un script), notamment parce que le choix du seuil a \u00e9t\u00e9 fait manuellement, et il n&rsquo;est pas facile de d\u00e9l\u00e9guer ce choix \u00e0 un algorithme. Par exemple, avec la nyumba qui ouvre cet article, on voit que seules quelques ombres (et aucune graine, celles-ci sont trop claires) ont \u00e9t\u00e9 compt\u00e9es :<\/p>\n\n\n\n<figure class=\"wp-block-image size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"400\" height=\"133\" src=\"https:\/\/iremi.univ-reunion.fr\/wp-content\/uploads\/2026\/03\/nyumbaombres.png\" alt=\"\" class=\"wp-image-1811\" srcset=\"https:\/\/iremi.univ-reunion.fr\/wp-content\/uploads\/2026\/03\/nyumbaombres.png 400w, https:\/\/iremi.univ-reunion.fr\/wp-content\/uploads\/2026\/03\/nyumbaombres-300x100.png 300w\" sizes=\"auto, (max-width: 400px) 100vw, 400px\" \/><\/figure>\n\n\n\n<p>Ce projet peut n\u00e9anmoins \u00eatre tent\u00e9 en cours de SNT (th\u00e8mes : les objets connect\u00e9s, et la photographie num\u00e9rique),<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>soit directement avec ImageJ,<\/li>\n\n\n\n<li>soit avec le module Python openCV,<\/li>\n\n\n\n<li>soit avec <a href=\"http:\/\/revue.sesamath.net\/spip.php?article910\">appInventor<\/a>, du MIT, en programmation par blocs, pour les smartphones Android, ou l&rsquo;\u00e9quivalent Apple pour les iPhones.<\/li>\n<\/ul>\n\n\n\n<h3 class=\"wp-block-heading\">Avec openCV<\/h3>\n\n\n\n<p>Python poss\u00e8de un module opencv permettant de faire du traitement d&rsquo;images (y compris en vid\u00e9o). Avec<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>import cv2\nimport numpy as np<\/code><\/pre>\n\n\n\n<p>on dispose d&rsquo;une fonction <code>cv2.imread<\/code> qui permet d&rsquo;importer une image (comme celle de nyumba d\u00e9j\u00e0 vue) dans une variable <code>img<\/code>, puis de la mettre en noir et blanc et lui appliquer une transform\u00e9e de Hough circulaire avec<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)\ngray = cv2.GaussianBlur(gray, (9,9), 2)\n\ncircles = cv2.HoughCircles(\n    gray,\n    cv2.HOUGH_GRADIENT,\n    dp=1.2,\n    minDist=20,\n    param1=100,\n    param2=30,\n    minRadius=30,\n    maxRadius=60\n)<\/code><\/pre>\n\n\n\n<p>Avec ces param\u00e8tres seules 2 graines sur les 12 n&rsquo;ont pas \u00e9t\u00e9 d\u00e9tect\u00e9es :<\/p>\n\n\n\n<figure class=\"wp-block-image size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"223\" height=\"202\" src=\"https:\/\/iremi.univ-reunion.fr\/wp-content\/uploads\/2026\/03\/Capture-decran-2026-03-09-102204.png\" alt=\"\" class=\"wp-image-1817\" \/><\/figure>\n\n\n\n<p>En effet elles sont partiellement cach\u00e9es par le bord inf\u00e9rieur du plateau et la partie visible n&rsquo;a pas une forme circulaire. D&rsquo;ailleurs cet algorithme (d\u00fb \u00e0 Serge Bays) ne fonctionne pas avec des graines de forme allong\u00e9e.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Avec un r\u00e9seau de neurones<\/h3>\n\n\n\n<p>Les <a href=\"https:\/\/fr.wikipedia.org\/wiki\/Filet_c%C3%A9leste\">nombreuses cam\u00e9ras chinoises<\/a> sont dot\u00e9es de r\u00e9seaux de neurones qui ont appris \u00e0 reconna\u00eetre des visages. Sauraient-elles reconna\u00eetre (et d\u00e9nombrer) des graines ? Pour simuler un r\u00e9seau de neurones, on utilise le module <a href=\"https:\/\/keras.io\/\">keras<\/a> de Python. Pour un apprentissage supervis\u00e9, a \u00e9t\u00e9 cr\u00e9\u00e9 un jeu de donn\u00e9es artificiel, compos\u00e9 d&rsquo;images de 256 pixels comportant des images de graines ne se chevauchant pas trop :<\/p>\n\n\n\n<figure class=\"wp-block-image size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"640\" height=\"480\" src=\"https:\/\/iremi.univ-reunion.fr\/wp-content\/uploads\/2026\/03\/nuages10-1.png\" alt=\"\" class=\"wp-image-1820\" srcset=\"https:\/\/iremi.univ-reunion.fr\/wp-content\/uploads\/2026\/03\/nuages10-1.png 640w, https:\/\/iremi.univ-reunion.fr\/wp-content\/uploads\/2026\/03\/nuages10-1-300x225.png 300w\" sizes=\"auto, (max-width: 640px) 100vw, 640px\" \/><\/figure>\n\n\n\n<p>ainsi que le nombre de graines de chaque image (ci-dessus <code>[5, 7, 9, 3, 4, 9, 1, 6, 6, 3]<\/code>). Apr\u00e8s plusieurs essais, ce r\u00e9seau de neurones a \u00e9t\u00e9 choisi :<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>p = 8\nmodele = Sequential(&#091;\n    Conv2D(p,3,input_shape=(16,16,1)),\n    MaxPooling2D(pool_size=2),\n    Flatten(),\n    Dense(10,activation='softmax')])\nmodele.compile(loss='categorical_crossentropy',optimizer='sgd',metrics=&#091;'accuracy'])<\/code><\/pre>\n\n\n\n<p>Avec la descente du gradient comme optimiseur, on est d\u00e9\u00e7u par la faible pr\u00e9cision 0,5206666588783264 : le r\u00e9seau pr\u00e9dit correctement le nombre seulement une fois sur deux. Par exemple cette image a \u00e9t\u00e9 vue comme repr\u00e9sentant le nombre 4 :<\/p>\n\n\n\n<figure class=\"wp-block-image size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"640\" height=\"480\" src=\"https:\/\/iremi.univ-reunion.fr\/wp-content\/uploads\/2026\/03\/cnnvu4.png\" alt=\"\" class=\"wp-image-1823\" srcset=\"https:\/\/iremi.univ-reunion.fr\/wp-content\/uploads\/2026\/03\/cnnvu4.png 640w, https:\/\/iremi.univ-reunion.fr\/wp-content\/uploads\/2026\/03\/cnnvu4-300x225.png 300w\" sizes=\"auto, (max-width: 640px) 100vw, 640px\" \/><\/figure>\n\n\n\n<p>La distribution (pour cette image) a en effet 4 comme mode :<\/p>\n\n\n\n<figure class=\"wp-block-image size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"640\" height=\"480\" src=\"https:\/\/iremi.univ-reunion.fr\/wp-content\/uploads\/2026\/03\/distprob.png\" alt=\"\" class=\"wp-image-1824\" srcset=\"https:\/\/iremi.univ-reunion.fr\/wp-content\/uploads\/2026\/03\/distprob.png 640w, https:\/\/iremi.univ-reunion.fr\/wp-content\/uploads\/2026\/03\/distprob-300x225.png 300w\" sizes=\"auto, (max-width: 640px) 100vw, 640px\" \/><\/figure>\n\n\n\n<p>Le probl\u00e8me vient de ce que <a href=\"https:\/\/en.wikipedia.org\/wiki\/%E2%A0%8C\">\u280c<\/a> et <a href=\"https:\/\/en.wikipedia.org\/wiki\/%E2%A0%A1\">\u2821<\/a> sont des images diff\u00e9rentes (les pixels noirs ne sont pas du tout au m\u00eame endroit) alors qu&rsquo;elles repr\u00e9sentent le m\u00eame nombre 2. Il faudrait entra\u00eener un r\u00e9seau de neurones sur des images qui se ressemblent \u00e0 translation et rotation pr\u00e8s. C&rsquo;est le cas pour la <a href=\"https:\/\/docs.opencv.org\/4.x\/de\/dbc\/tutorial_py_fourier_transform.html\">transform\u00e9e de Fourier bidimensionnelle<\/a>. En lan\u00e7ant le r\u00e9seau de neurones convolutif sur des transform\u00e9es de Fourier de constellations, on obtient plus de succ\u00e8s, avec une pr\u00e9cision de 0,6243333220481873. Le r\u00e9seau de neurones ne se trompe qu&rsquo;une fois sur trois, et pas de beaucoup, puisqu&rsquo;au lieu de<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>&#091;3, 3, 4, 8, 2, 7, 4, 5, 3, 4]<\/code><\/pre>\n\n\n\n<p>il trouve<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>&#091;3, 4, 5, 9, 3, 6, 4, 6, 3, 4]<\/code><\/pre>\n\n\n\n<p>donc (ici) 6 erreurs sur 10 mais des erreurs d&rsquo;une seule valeur \u00e0 chaque fois (par exemple 4 au lieu de 3). Dans ce cas (deuxi\u00e8me valeur), la distribution est presque pr\u00e9cise :<\/p>\n\n\n\n<figure class=\"wp-block-image size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"640\" height=\"480\" src=\"https:\/\/iremi.univ-reunion.fr\/wp-content\/uploads\/2026\/03\/fftbayes.png\" alt=\"\" class=\"wp-image-1827\" srcset=\"https:\/\/iremi.univ-reunion.fr\/wp-content\/uploads\/2026\/03\/fftbayes.png 640w, https:\/\/iremi.univ-reunion.fr\/wp-content\/uploads\/2026\/03\/fftbayes-300x225.png 300w\" sizes=\"auto, (max-width: 640px) 100vw, 640px\" \/><\/figure>\n\n\n\n<p>Le mode 4 (erron\u00e9) d\u00e9passe de peu la valeur correcte 3.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Et si on comptait quand m\u00eame ?<\/h2>\n\n\n\n<p>L&rsquo;algorithme par transform\u00e9e de Hough ne fait que rep\u00e9rer les graines (des cercles) et les compter. Mais cela peut \u00eatre utile \u00e0 un joueur de <em>m&rsquo;raha wa n&rsquo;tso<\/em> parce que, comme lui, la machine compte les graines sans les toucher. Seulement il faut d&rsquo;abord qu&rsquo;elle reconnaisse les graines, ind\u00e9pendamment de leur orientation, ce qui va passer par l&rsquo;apprentissage : la machine doit apprendre \u00e0 reconna\u00eetre une graine. L&rsquo;affichage de la cam\u00e9ra intelligente apr\u00e8s apprentissage pourrait ressembler \u00e0 ceci :<\/p>\n\n\n\n<figure class=\"wp-block-image size-full is-resized\"><img loading=\"lazy\" decoding=\"async\" width=\"512\" height=\"512\" src=\"https:\/\/iremi.univ-reunion.fr\/wp-content\/uploads\/2026\/03\/grainescompte.png\" alt=\"\" class=\"wp-image-1862\" style=\"width:512px;height:auto\" srcset=\"https:\/\/iremi.univ-reunion.fr\/wp-content\/uploads\/2026\/03\/grainescompte.png 512w, https:\/\/iremi.univ-reunion.fr\/wp-content\/uploads\/2026\/03\/grainescompte-300x300.png 300w, https:\/\/iremi.univ-reunion.fr\/wp-content\/uploads\/2026\/03\/grainescompte-150x150.png 150w\" sizes=\"auto, (max-width: 512px) 100vw, 512px\" \/><\/figure>\n\n\n\n<p>Cela m\u00e8nerait \u00e0 un autre type de TP, portant sur une cam\u00e9ra intelligente (<em>smart cam<\/em>) o\u00f9 les \u00e9l\u00e8ves n&rsquo;auraient qu&rsquo;\u00e0 apprendre \u00e0 la machine \u00e0 reconna\u00eetre un nouvel objet (une graine) et apr\u00e8s cette phase d&rsquo;apprentissage supervis\u00e9, on testerait la machine sur des constellations : la machine compte correctement si elle reconna\u00eet pr\u00e9cis\u00e9ment les graines, et <\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>sous-compte si elle ne reconna\u00eet pas certaines graines (elle ne les voit pas bien),<\/li>\n\n\n\n<li>sur-compte en cas de faux positifs (une tache d&rsquo;ombre prise pour une graine par exemple).<\/li>\n<\/ul>\n","protected":false},"excerpt":{"rendered":"<p>Les experts du m&rsquo;raha wa n&rsquo;tso \u00e0 Mayotte ne comptent jamais les graines (Tiennot communication priv\u00e9e). Pour le katro de Madagascar, seuls les enfants ont le droit de compter les graines, sinon le seul fait d&rsquo;avoir touch\u00e9 ne serait-ce qu&rsquo;une graine, oblige \u00e0 semer depuis la case o\u00f9 se trouvait cette graine. Toujours \u00e0 Madagascar [&hellip;]<\/p>\n","protected":false},"author":6,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[9,3,12,10],"tags":[80],"coauthors":[54],"class_list":["post-1743","post","type-post","status-publish","format-standard","hentry","category-algorithmes-programmation-et-langages","category-arithmetique-et-algebre","category-jeux-mathematiques","category-machines-information-codage","tag-snt"],"_links":{"self":[{"href":"https:\/\/iremi.univ-reunion.fr\/index.php?rest_route=\/wp\/v2\/posts\/1743","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/iremi.univ-reunion.fr\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/iremi.univ-reunion.fr\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/iremi.univ-reunion.fr\/index.php?rest_route=\/wp\/v2\/users\/6"}],"replies":[{"embeddable":true,"href":"https:\/\/iremi.univ-reunion.fr\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=1743"}],"version-history":[{"count":41,"href":"https:\/\/iremi.univ-reunion.fr\/index.php?rest_route=\/wp\/v2\/posts\/1743\/revisions"}],"predecessor-version":[{"id":2090,"href":"https:\/\/iremi.univ-reunion.fr\/index.php?rest_route=\/wp\/v2\/posts\/1743\/revisions\/2090"}],"wp:attachment":[{"href":"https:\/\/iremi.univ-reunion.fr\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=1743"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/iremi.univ-reunion.fr\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=1743"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/iremi.univ-reunion.fr\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=1743"},{"taxonomy":"author","embeddable":true,"href":"https:\/\/iremi.univ-reunion.fr\/index.php?rest_route=%2Fwp%2Fv2%2Fcoauthors&post=1743"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}