{"id":24759,"date":"2024-11-18T10:00:00","date_gmt":"2024-11-18T09:00:00","guid":{"rendered":"https:\/\/monraspberry.com\/?p=24759"},"modified":"2024-11-04T12:35:59","modified_gmt":"2024-11-04T11:35:59","slug":"creez-un-systeme-de-surveillance-pour-animaux-avec-raspberry-pi","status":"publish","type":"post","link":"https:\/\/monraspberry.com\/en\/creez-un-systeme-de-surveillance-pour-animaux-avec-raspberry-pi\/","title":{"rendered":"Create a pet monitoring system with Raspberry Pi"},"content":{"rendered":"<p>Visit <strong>Raspberry Pi<\/strong> est un ordinateur monocarte polyvalent qui, associ\u00e9 \u00e0 des composants appropri\u00e9s, peut \u00eatre transform\u00e9 en un syst\u00e8me de surveillance intelligent pour animaux. Ce guide d\u00e9taill\u00e9 vous accompagnera pas \u00e0 pas dans la cr\u00e9ation d&#8217;un tel syst\u00e8me, int\u00e9grant la d\u00e9tection de mouvement, la reconnaissance d&#8217;animaux et l&#8217;envoi de notifications.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Vue d\u2019ensemble du projet<\/h2>\n\n\n\n<p>Le projet permet de cr\u00e9er une solution de surveillance avanc\u00e9e pour animaux, capable de :<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>D\u00e9tecter les mouvements<\/strong> \u00e0 l\u2019aide de la cam\u00e9ra.<\/li>\n\n\n\n<li><strong>Identifier les animaux<\/strong> via l\u2019intelligence artificielle (IA).<\/li>\n\n\n\n<li><strong>Envoyer des notifications personnalis\u00e9es par e-mail<\/strong> incluant des images et le type d&#8217;animal d\u00e9tect\u00e9.<\/li>\n\n\n\n<li><strong>G\u00e9rer les param\u00e8tres de configuration<\/strong> (types d\u2019animaux, e-mail, alertes) via une <strong>interface web<\/strong>.<\/li>\n<\/ul>\n\n\n\n<h2 class=\"wp-block-heading\">Equipment required<\/h2>\n\n\n\n<ol class=\"wp-block-list\">\n<li><strong>Raspberry Pi 4<\/strong> (ou mod\u00e8le sup\u00e9rieur)<\/li>\n\n\n\n<li><strong>Cam\u00e9ra pour Raspberry Pi<\/strong> (module cam\u00e9ra officiel ou webcam USB compatible)<\/li>\n\n\n\n<li><strong>microSD card<\/strong> (32 Go minimum) avec Raspberry Pi OS<\/li>\n\n\n\n<li><strong>Clavier, souris et \u00e9cran<\/strong> pour la configuration initiale<\/li>\n\n\n\n<li><strong>Connexion internet<\/strong> (Wi-Fi ou Ethernet pour l\u2019interface web)<\/li>\n<\/ol>\n\n\n\n<h2 class=\"wp-block-heading\">\u00c9tape 1 : Installation et configuration initiale du Raspberry Pi<\/h2>\n\n\n\n<ol class=\"wp-block-list\">\n<li><strong>Installer Raspberry Pi OS<\/strong> sur votre carte microSD en utilisant <a>Raspberry Pi Imager<\/a>.<\/li>\n\n\n\n<li><strong>D\u00e9marrer et configurer le Raspberry Pi<\/strong> (r\u00e9seau, date, langue).<\/li>\n\n\n\n<li><strong>Mettre \u00e0 jour le syst\u00e8me<\/strong> :<\/li>\n<\/ol>\n\n\n<div class=\"wp-block-syntaxhighlighter-code\"><pre class=\"brush: plain; title: ; notranslate\" title=\"\">\nsudo apt update &amp;&amp; sudo apt upgrade -y\n<\/pre><\/div>\n\n\n<h2 class=\"wp-block-heading\">\u00c9tape 2 : Pr\u00e9parer la cam\u00e9ra et installer les biblioth\u00e8ques d\u2019IA<\/h2>\n\n\n\n<h3 class=\"wp-block-heading\">2.1 Activer et tester la cam\u00e9ra<\/h3>\n\n\n\n<p>Activez la cam\u00e9ra :<\/p>\n\n\n<div class=\"wp-block-syntaxhighlighter-code\"><pre class=\"brush: plain; title: ; notranslate\" title=\"\">\nsudo raspi-config\n<\/pre><\/div>\n\n\n<p>Tester la cam\u00e9ra :<\/p>\n\n\n<div class=\"wp-block-syntaxhighlighter-code\"><pre class=\"brush: plain; title: ; notranslate\" title=\"\">\nraspistill -o test.jpg\n<\/pre><\/div>\n\n\n<h3 class=\"wp-block-heading\">2.2 Installer OpenCV et TensorFlow Lite<\/h3>\n\n\n\n<p>Installer OpenCV pour la d\u00e9tection d\u2019image :<\/p>\n\n\n\n<ol class=\"wp-block-list\"><\/ol>\n\n\n<div class=\"wp-block-syntaxhighlighter-code\"><pre class=\"brush: plain; title: ; notranslate\" title=\"\">\nsudo apt install python3-opencv -y\n<\/pre><\/div>\n\n\n<p>T\u00e9l\u00e9charger et configurer le mod\u00e8le MobileNet SSD pour la reconnaissance d\u2019animaux :<\/p>\n\n\n<div class=\"wp-block-syntaxhighlighter-code\"><pre class=\"brush: plain; title: ; notranslate\" title=\"\">\nmkdir ~\/models &amp;amp;&amp;amp; cd ~\/models\nwget https:\/\/storage.googleapis.com\/download.tensorflow.org\/models\/tflite\/coco_ssd_mobilenet_v1_1.0_quant_2018_06_29.zip\nunzip coco_ssd_mobilenet_v1_1.0_quant_2018_06_29.zip\n<\/pre><\/div>\n\n\n<h2 class=\"wp-block-heading\">\u00c9tape 3 : D\u00e9tection de mouvements et reconnaissance des animaux<\/h2>\n\n\n\n<p>Nous allons cr\u00e9er un script Python pour analyser les images et d\u00e9tecter les animaux.<\/p>\n\n\n\n<p>Create a file <code>animal_surveillance.py<\/code> :<\/p>\n\n\n\n<ol class=\"wp-block-list\"><\/ol>\n\n\n<div class=\"wp-block-syntaxhighlighter-code\"><pre class=\"brush: plain; title: ; notranslate\" title=\"\">\nnano animal_surveillance.py\n<\/pre><\/div>\n\n\n<p>Ajoutez le code suivant pour configurer la d\u00e9tection de mouvement, la capture d\u2019images, et la reconnaissance des animaux :<\/p>\n\n\n<div class=\"wp-block-syntaxhighlighter-code\"><pre class=\"brush: plain; title: ; notranslate\" title=\"\">\nimport cv2\nimport tensorflow as tf\nimport numpy as np\nfrom datetime import datetime\nimport os\n\n# Charger le mod\u00e8le TensorFlow Lite\ninterpreter = tf.lite.Interpreter(model_path=&quot;~\/models\/detect.tflite&quot;)\ninterpreter.allocate_tensors()\ninput_details = interpreter.get_input_details()\noutput_details = interpreter.get_output_details()\n\n# D\u00e9finir les classes d&#039;animaux d\u00e9tectables\nANIMAL_CLASSES = {16: &quot;Oiseau&quot;, 17: &quot;Chat&quot;, 18: &quot;Chien&quot;}\nDETECTION_THRESHOLD = 0.5\n\n# Initialiser la cam\u00e9ra\ncamera = cv2.VideoCapture(0)\nfirst_frame = None\n\n# Fonction pour d\u00e9tecter les animaux\ndef detect_animal(frame):\n    input_shape = input_details&#x5B;0]&#x5B;&#039;shape&#039;]\n    frame_resized = cv2.resize(frame, (input_shape&#x5B;1], input_shape&#x5B;2]))\n    input_data = np.expand_dims(frame_resized, axis=0)\n    interpreter.set_tensor(input_details&#x5B;0]&#x5B;&#039;index&#039;], input_data)\n    interpreter.invoke()\n    boxes = interpreter.get_tensor(output_details&#x5B;0]&#x5B;&#039;index&#039;])&#x5B;0]\n    classes = interpreter.get_tensor(output_details&#x5B;1]&#x5B;&#039;index&#039;])&#x5B;0]\n    scores = interpreter.get_tensor(output_details&#x5B;2]&#x5B;&#039;index&#039;])&#x5B;0]\n    for i in range(len(scores)):\n        if scores&#x5B;i] &gt;= DETECTION_THRESHOLD:\n            return ANIMAL_CLASSES.get(int(classes&#x5B;i]), &quot;Inconnu&quot;)\n    return None\n\n# Fonction pour d\u00e9tecter les mouvements\ndef detect_motion():\n    global first_frame\n    ret, frame = camera.read()\n    gray = cv2.cvtColor(frame, cv2.COLOR_BGR2GRAY)\n    gray = cv2.GaussianBlur(gray, (21, 21), 0)\n\n    if first_frame is None:\n        first_frame = gray\n        return None\n\n    delta_frame = cv2.absdiff(first_frame, gray)\n    thresh_frame = cv2.threshold(delta_frame, 25, 255, cv2.THRESH_BINARY)&#x5B;1]\n    thresh_frame = cv2.dilate(thresh_frame, None, iterations=2)\n    contours, _ = cv2.findContours(thresh_frame.copy(), cv2.RETR_EXTERNAL, cv2.CHAIN_APPROX_SIMPLE)\n\n    for contour in contours:\n        if cv2.contourArea(contour) &amp;lt; 5000:\n            continue\n        animal = detect_animal(frame)\n        if animal:\n            timestamp = datetime.now().strftime(&quot;%Y%m%d_%H%M%S&quot;)\n            image_path = f&quot;\/home\/pi\/captures\/{animal}_{timestamp}.jpg&quot;\n            cv2.imwrite(image_path, frame)\n            return animal, image_path\n    return None, None\n\nif __name__ == &quot;__main__&quot;:\n    os.makedirs(&quot;\/home\/pi\/captures&quot;, exist_ok=True)\n    print(&quot;Surveillance animale en cours...&quot;)\n    while True:\n        animal, image_path = detect_motion()\n        if animal:\n            print(f&quot;Animal d\u00e9tect\u00e9 : {animal}&quot;)\n            # Notifications et alertes peuvent \u00eatre ajout\u00e9es ici\n<\/pre><\/div>\n\n\n<p>Le script <strong>d\u00e9tecte le mouvement<\/strong>, <strong>reconna\u00eet les animaux<\/strong>and <strong>enregistre une capture d&#8217;image<\/strong> pour chaque d\u00e9tection.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">\u00c9tape 4 : Interface Web avec Flask pour configurer les param\u00e8tres et afficher les captures<\/h2>\n\n\n\n<p>Pour une gestion plus facile, nous allons cr\u00e9er une interface web permettant de configurer les param\u00e8tres d&#8217;alerte et de visualiser les images captur\u00e9es.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">4.1 Installation de Flask<\/h3>\n\n\n<div class=\"wp-block-syntaxhighlighter-code\"><pre class=\"brush: plain; title: ; notranslate\" title=\"\">\npip3 install flask\n<\/pre><\/div>\n\n\n<h3 class=\"wp-block-heading\">4.2 Cr\u00e9ation du Serveur Flask<\/h3>\n\n\n\n<p>Cr\u00e9er un fichier <code>app.py<\/code> pour l\u2019interface :<\/p>\n\n\n\n<ol class=\"wp-block-list\"><\/ol>\n\n\n<div class=\"wp-block-syntaxhighlighter-code\"><pre class=\"brush: plain; title: ; notranslate\" title=\"\">\nnano app.py\n<\/pre><\/div>\n\n\n<p>Ajouter le code Flask suivant pour configurer l&#8217;interface web :<\/p>\n\n\n<div class=\"wp-block-syntaxhighlighter-code\"><pre class=\"brush: plain; title: ; notranslate\" title=\"\">\nfrom flask import Flask, render_template, request, redirect, url_for\nimport os\n\napp = Flask(__name__)\n\n# Stockage des param\u00e8tres\nconfig = {\n    &quot;email&quot;: &quot;destination_email@example.com&quot;,\n    &quot;animals&quot;: &#x5B;&quot;Chat&quot;, &quot;Chien&quot;]\n}\n\n@app.route(&quot;\/&quot;)\ndef index():\n    captures = os.listdir(&quot;\/home\/pi\/captures\/&quot;)\n    captures = &#x5B;f&quot;\/static\/captures\/{capture}&quot; for capture in captures]\n    return render_template(&quot;index.html&quot;, config=config, captures=captures)\n\n@app.route(&quot;\/settings&quot;, methods=&#x5B;&quot;POST&quot;])\ndef settings():\n    config&#x5B;&quot;email&quot;] = request.form&#x5B;&quot;email&quot;]\n    config&#x5B;&quot;animals&quot;] = request.form.getlist(&quot;animals&quot;)\n    return redirect(url_for(&quot;index&quot;))\n\nif __name__ == &quot;__main__&quot;:\n    app.run(host=&quot;0.0.0.0&quot;, port=5000)\n<\/pre><\/div>\n\n\n<p>Cr\u00e9er le mod\u00e8le HTML <code>index.html<\/code> pour g\u00e9rer la configuration et visualiser les captures :<\/p>\n\n\n<div class=\"wp-block-syntaxhighlighter-code\"><pre class=\"brush: plain; title: ; notranslate\" title=\"\">\n&amp;lt;!DOCTYPE html&gt;\n&amp;lt;html lang=&quot;en&quot;&gt;\n&amp;lt;head&gt;\n    &amp;lt;meta charset=&quot;UTF-8&quot;&gt;\n    &amp;lt;title&gt;Surveillance Animale&amp;lt;\/title&gt;\n&amp;lt;\/head&gt;\n&amp;lt;body&gt;\n    &amp;lt;h1&gt;Configuration de Surveillance Animale&amp;lt;\/h1&gt;\n    &amp;lt;form action=&quot;\/settings&quot; method=&quot;post&quot;&gt;\n        &amp;lt;label for=&quot;email&quot;&gt;E-mail de Notification :&amp;lt;\/label&gt;\n        &amp;lt;input type=&quot;email&quot; name=&quot;email&quot; value=&quot;{{ config.email }}&quot; required&gt;&amp;lt;br&gt;\n        &amp;lt;label&gt;Animaux Suivis :&amp;lt;\/label&gt;&amp;lt;br&gt;\n        &amp;lt;input type=&quot;checkbox&quot; name=&quot;animals&quot; value=&quot;Chat&quot; {% if &quot;Chat&quot; in config.animals %}checked{% endif %}&gt; Chat&amp;lt;br&gt;\n        &amp;lt;input type=&quot;checkbox&quot; name=&quot;animals&quot; value=&quot;Chien&quot; {% if &quot;Chien&quot; in config.animals %}checked{% endif %}&gt; Chien&amp;lt;br&gt;\n        &amp;lt;button type=&quot;submit&quot;&gt;Enregistrer&amp;lt;\/button&gt;\n    &amp;lt;\/form&gt;\n    &amp;lt;h2&gt;Captures :&amp;lt;\/h2&gt;\n    {% for capture in captures %}\n        &amp;lt;img src=&quot;{{ capture }}&quot; width=&quot;300&quot;&gt;&amp;lt;br&gt;\n    {% endfor %}\n&amp;lt;\/body&gt;\n&amp;lt;\/html&gt;\n<\/pre><\/div>\n\n\n<p>D\u00e9marrer le serveur Flask :<\/p>\n\n\n<div class=\"wp-block-syntaxhighlighter-code\"><pre class=\"brush: plain; title: ; notranslate\" title=\"\">\npython3 app.py\n<\/pre><\/div>\n\n\n<p>Acc\u00e9dez \u00e0 l&#8217;interface via <code>http:\/\/&lt;adresse_ip_du_raspberry_pi>:5000<\/code>.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">\u00c9tape 5 : Configuration des notifications e-mail avec captures et d\u00e9tails d&#8217;animaux<\/h2>\n\n\n\n<h3 class=\"wp-block-heading\">5.1 Installation et configuration de l&#8217;envoi d\u2019e-mails<\/h3>\n\n\n\n<p>Pour envoyer des notifications, nous utiliserons <code>smtplib<\/code>, une biblioth\u00e8que Python standard pour envoyer des e-mails via un serveur SMTP (par exemple, Gmail).<\/p>\n\n\n\n<p>Cr\u00e9er un fichier de configuration pour stocker vos informations de connexion e-mail de mani\u00e8re s\u00e9curis\u00e9e.<\/p>\n\n\n\n<ol class=\"wp-block-list\"><\/ol>\n\n\n\n<p>Create a file <code>config.py<\/code><\/p>\n\n\n<div class=\"wp-block-syntaxhighlighter-code\"><pre class=\"brush: plain; title: ; notranslate\" title=\"\">\nnano config.py\n<\/pre><\/div>\n\n\n<p>Ajoutez les informations de connexion suivantes (en rempla\u00e7ant par votre adresse et mot de passe) :<\/p>\n\n\n<div class=\"wp-block-syntaxhighlighter-code\"><pre class=\"brush: plain; title: ; notranslate\" title=\"\">\nEMAIL_ADDRESS = &quot;votre_email@gmail.com&quot;\nEMAIL_PASSWORD = &quot;votre_mot_de_passe&quot;\n<\/pre><\/div>\n\n\n<p>Sauvegardez et fermez le fichier.<\/p>\n\n\n\n<p><strong>Activer l&#8217;acc\u00e8s aux applications moins s\u00e9curis\u00e9es<\/strong> dans votre compte Google (si vous utilisez Gmail), car <code>smtplib<\/code> n\u00e9cessite une autorisation pour acc\u00e9der \u00e0 votre compte via SMTP.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">5.2 Ajouter la fonction d\u2019envoi d\u2019e-mails dans le script de surveillance<\/h3>\n\n\n\n<p>Modifiez <code>animal_surveillance.py<\/code> pour inclure la fonction d&#8217;envoi d&#8217;e-mails, int\u00e9grant l&#8217;image captur\u00e9e et le type d&#8217;animal d\u00e9tect\u00e9<\/p>\n\n\n\n<p><strong>Ouvrez <code>animal_surveillance.py<\/code> et ajoutez la fonction suivante<\/strong> pour l&#8217;envoi des e-mails :<\/p>\n\n\n<div class=\"wp-block-syntaxhighlighter-code\"><pre class=\"brush: plain; title: ; notranslate\" title=\"\">\nimport smtplib\nfrom email.mime.multipart import MIMEMultipart\nfrom email.mime.text import MIMEText\nfrom email.mime.image import MIMEImage\nimport config  # Importer le fichier config pour r\u00e9cup\u00e9rer l&#039;email et le mot de passe\n\ndef send_email_alert(image_path, detected_animal):\n    # Cr\u00e9er un e-mail\n    msg = MIMEMultipart()\n    msg&#x5B;&#039;From&#039;] = config.EMAIL_ADDRESS\n    msg&#x5B;&#039;To&#039;] = config.EMAIL_ADDRESS  # Envoyer \u00e0 vous-m\u00eame ou \u00e0 l\u2019adresse sp\u00e9cifi\u00e9e dans config\n    msg&#x5B;&#039;Subject&#039;] = f&quot;Alerte : {detected_animal} d\u00e9tect\u00e9 !&quot;\n\n    # Ajouter le corps du message\n    body = f&quot;Un {detected_animal} a \u00e9t\u00e9 d\u00e9tect\u00e9 par le syst\u00e8me de surveillance animale.&quot;\n    msg.attach(MIMEText(body, &#039;plain&#039;))\n\n    # Ajouter l&#039;image en pi\u00e8ce jointe\n    with open(image_path, &#039;rb&#039;) as f:\n        img_data = f.read()\n        image = MIMEImage(img_data, name=os.path.basename(image_path))\n        msg.attach(image)\n\n    # Envoi de l&#039;e-mail via SMTP\n    try:\n        server = smtplib.SMTP(&#039;smtp.gmail.com&#039;, 587)\n        server.starttls()\n        server.login(config.EMAIL_ADDRESS, config.EMAIL_PASSWORD)\n        server.sendmail(config.EMAIL_ADDRESS, config.EMAIL_ADDRESS, msg.as_string())\n        server.quit()\n        print(&quot;E-mail envoy\u00e9 avec succ\u00e8s.&quot;)\n    except Exception as e:\n        print(f&quot;Erreur lors de l&#039;envoi de l&#039;e-mail : {e}&quot;)\n<\/pre><\/div>\n\n\n<p>Int\u00e9grer la fonction d\u2019envoi d\u2019e-mails dans le script de d\u00e9tection :<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Modifiez la partie <code>if animal:<\/code> dans <code>detect_motion()<\/code> pour envoyer un e-mail avec les d\u00e9tails de l&#8217;animal d\u00e9tect\u00e9.<\/li>\n<\/ul>\n\n\n<div class=\"wp-block-syntaxhighlighter-code\"><pre class=\"brush: plain; title: ; notranslate\" title=\"\">\nif animal:\n    timestamp = datetime.now().strftime(&quot;%Y%m%d_%H%M%S&quot;)\n    image_path = f&quot;\/home\/pi\/captures\/{animal}_{timestamp}.jpg&quot;\n    cv2.imwrite(image_path, frame)\n    print(f&quot;{animal} d\u00e9tect\u00e9. Image sauvegard\u00e9e : {image_path}&quot;)\n    send_email_alert(image_path, animal)  # Appel de la fonction d&#039;envoi d&#039;e-mail\n<\/pre><\/div>\n\n\n<p><strong>Sauvegardez et fermez<\/strong> le fichier <code>animal_surveillance.py<\/code>.<\/p>\n\n\n\n<p>Tester le script en ex\u00e9cutant :<\/p>\n\n\n<div class=\"wp-block-syntaxhighlighter-code\"><pre class=\"brush: plain; title: ; notranslate\" title=\"\">\npython3 animal_surveillance.py\n<\/pre><\/div>\n\n\n<p>Lorsque le syst\u00e8me d\u00e9tecte un mouvement et reconna\u00eet un animal, il envoie un e-mail \u00e0 l\u2019adresse configur\u00e9e avec l\u2019image de l\u2019animal d\u00e9tect\u00e9 et le type d\u2019animal dans le sujet de l\u2019e-mail.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Conclusion<\/h2>\n\n\n\n<p>Ce guide fournit un <strong>syst\u00e8me de surveillance animal intelligent<\/strong> complet utilisant le Raspberry Pi. Gr\u00e2ce \u00e0 la d\u00e9tection de mouvement, la reconnaissance d&#8217;animaux, une <strong>interface web de configuration<\/strong> and <strong>notifications e-mail<\/strong> d\u00e9taill\u00e9es, ce projet est une solution puissante et flexible pour surveiller vos animaux. Vous pouvez facilement personnaliser les param\u00e8tres d&#8217;alerte et ajouter de nouveaux types d&#8217;animaux via la configuration web.<\/p>","protected":false},"excerpt":{"rendered":"<p>Syst\u00e8me de surveillance pour animaux avec Raspberry Pi : d\u00e9tection, reconnaissance, configuration web, alertes e-mail. Guide complet pour d\u00e9butants.<\/p>","protected":false},"author":1,"featured_media":24761,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"_jetpack_memberships_contains_paid_content":false,"footnotes":""},"categories":[308],"tags":[],"class_list":["post-24759","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-tutos"],"featured_image_src":{"landsacpe":["https:\/\/monraspberry.com\/wp-content\/uploads\/2024\/11\/DALL\u00b7E-2024-11-04-12.35.13-A-clean-minimalistic-landscape-style-illustration-showing-a-Raspberry-Pi-with-icons-for-camera-animal-detection-notifications-and-a-web-interface.webp",779,445,false],"list":["https:\/\/monraspberry.com\/wp-content\/uploads\/2024\/11\/DALL\u00b7E-2024-11-04-12.35.13-A-clean-minimalistic-landscape-style-illustration-showing-a-Raspberry-Pi-with-icons-for-camera-animal-detection-notifications-and-a-web-interface.webp",463,265,false],"medium":["https:\/\/monraspberry.com\/wp-content\/uploads\/2024\/11\/DALL\u00b7E-2024-11-04-12.35.13-A-clean-minimalistic-landscape-style-illustration-showing-a-Raspberry-Pi-with-icons-for-camera-animal-detection-notifications-and-a-web-interface-300x171.webp",300,171,true],"full":["https:\/\/monraspberry.com\/wp-content\/uploads\/2024\/11\/DALL\u00b7E-2024-11-04-12.35.13-A-clean-minimalistic-landscape-style-illustration-showing-a-Raspberry-Pi-with-icons-for-camera-animal-detection-notifications-and-a-web-interface.webp",1792,1024,false]},"jetpack_featured_media_url":"https:\/\/monraspberry.com\/wp-content\/uploads\/2024\/11\/DALL\u00b7E-2024-11-04-12.35.13-A-clean-minimalistic-landscape-style-illustration-showing-a-Raspberry-Pi-with-icons-for-camera-animal-detection-notifications-and-a-web-interface.webp","jetpack_sharing_enabled":true,"_links":{"self":[{"href":"https:\/\/monraspberry.com\/en\/wp-json\/wp\/v2\/posts\/24759","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/monraspberry.com\/en\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/monraspberry.com\/en\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/monraspberry.com\/en\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/monraspberry.com\/en\/wp-json\/wp\/v2\/comments?post=24759"}],"version-history":[{"count":0,"href":"https:\/\/monraspberry.com\/en\/wp-json\/wp\/v2\/posts\/24759\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/monraspberry.com\/en\/wp-json\/wp\/v2\/media\/24761"}],"wp:attachment":[{"href":"https:\/\/monraspberry.com\/en\/wp-json\/wp\/v2\/media?parent=24759"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/monraspberry.com\/en\/wp-json\/wp\/v2\/categories?post=24759"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/monraspberry.com\/en\/wp-json\/wp\/v2\/tags?post=24759"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}