Notifications
Clear all

[Solved] Python skript for external Camera  

Page 2 / 2
  RSS
Käsekuchen
(@kasekuchen)
Active Member
Topic starter answered:
RE: Python skript for external Camera

I have tried rtsp but with no luck. but maybe just because of missing knowledge. 
RPI Zero 2W has enough power to provide 2 cameras with 1080px and 15 frames with opencv on my side. opencv is indeed to heavy for streams only but very good for the feauters with i described above.

but good news. check the prusa blog. there is some progress for cams.

Posted : 25/04/2024 3:30 pm
KitReplicados
(@kitreplicados)
Member
RE:

 

Raspberry Pi Preparation:

Open Thonny: Thonny is a Python IDE that comes pre-installed with Raspberry Pi OS. You can find it in the "Programming" menu.

Create a New Python Script:

Click on "File" in the menu bar. Select "New" to create a new file. Paste the following code into the new file:

import os
import subprocess
import time
import requests
import logging

# Configure logging
logging.basicConfig(level=logging.INFO)
logger = logging.getLogger(__name__)

# Define camera configurations for Prusa
CAMERAS = [
    {
        "name": "Camera 1",
        "device": "/dev/video0",
        "token": ""
    }
]

# Prusa settings
HTTP_URL = "https://webcam.connect.prusa3d.com/c/snapshot"
DELAY_SECONDS_FOR_PRUSA = 10

def capture_snapshot(camera):
    """Capture a snapshot from the webcam."""
    try:
        subprocess.run([
            "/usr/bin/ffmpeg",
            "-loglevel", "quiet",
            "-stats",
            "-y",
            "-f", "v4l2",
            "-i", camera["device"],
            "-vf", "format=yuv420p",
            "-q:v", "2",
            "-frames:v", "1",
            "output.jpg"
        ], check=True)
        return True
    except subprocess.CalledProcessError as e:
        logger.error(f"Error capturing snapshot from {camera['name']}: {e}")
        return False

def upload_to_prusa(camera):
    """Upload the captured snapshot to Prusa."""
    if not os.path.exists("output.jpg"):
        logger.error("Snapshot file not found.")
        return False
    try:
        with open("output.jpg", "rb") as file:
            response = requests.put(HTTP_URL,
                                    headers={"accept": "*/*",
                                             "content-type": "image/jpg",
                                             "fingerprint": "",
                                             "token": camera["token"]},
                                    data=file)
            response.raise_for_status()
            logger.info(f"Image uploaded to Prusa from {camera['name']} successfully.")
            return True
    except requests.exceptions.RequestException as e:
        logger.error(f"Error uploading image to Prusa from {camera['name']}: {e}")
        return False

def main():
    while True:
        for camera in CAMERAS:
            if capture_snapshot(camera):
                upload_to_prusa(camera)
        time.sleep(DELAY_SECONDS_FOR_PRUSA)  # Wait 10 seconds before capturing next snapshot

if __name__ == "__main__":
    main()

Replace : Replace with your actual Prusa Connect token. You can find this token in your Prusa Connect account settings.

Save the Script: Save the script in a location of your choice. For example, you can save it in the "Documents" folder with the name snapshot.py.

Adding the Script to Startup:

Open Terminal: You can open the terminal by clicking on the terminal icon in the taskbar or by searching for "Terminal" in the applications menu.

Navigate to the Script Location: Use the cd command to navigate to the location where you saved the snapshot.py script. For example:

cd ~/Documents

Set Execution Permissions: Run the following command to ensure that the script has execution permissions:

chmod +x snapshot.py

Edit the Startup Service: Run the following command to create or edit the systemd service file:

[Unit]
Description=Snapshot Service
After=multi-user.target

[Service]
Type=simple
ExecStart=/usr/bin/python3 /home/pi/Documents/snapshot.py
WorkingDirectory=/home/pi/Documents
Restart=on-failure
RestartSec=5s

[Install]
WantedBy=multi-user.target

Save and Exit: Press Ctrl + X, then press Y to confirm, and finally press Enter to save the file.

Reload systemd: Run the following command to reload systemd and apply the changes:

sudo systemctl daemon-reload

Enable the Service: Run the following command to enable the service, so it starts automatically on boot:

sudo systemctl enable snapshot.service

Start the Service: Run the following command to start the service:

sudo systemctl start snapshot.service
This post was modified 8 months ago by KitReplicados
Posted : 01/05/2024 9:14 pm
Page 2 / 2
Share: