Python skript for external Camera
Hi,
I have a mk4 which is directly connected to prusa connect. i use an external python script to stream two webcams with opencv. now i would like to extend this and send images directly to prusa connect in an interval. similar to what the cell phone can currently do. can anyone show me a simple python script to send only one image to prusa connect?
i would think that i can just upload it as an http post and a token? but unfortunately can't find any info. I saw PrusaConnect SDK for Printer but this seems to complex
Thanks for any help
Best Answer by Tergel:
This guy has a good example using a streaming camera. I have a pi that I was using with my MK3s so instead I just run libcamera-jpeg to grab and image then upload the image as he points out. https://gist.github.com/nunofgs/84861ee453254823be6b069ebbce9ad2
RE:
This guy has a good example using a streaming camera. I have a pi that I was using with my MK3s so instead I just run libcamera-jpeg to grab and image then upload the image as he points out. https://gist.github.com/nunofgs/84861ee453254823be6b069ebbce9ad2
RE: Python skript for external Camera
On prusa connect it asks you to scan a qr code to take you to a link copy that link set up the link then in the python script add a delay to it sending to the url
Please help me out by downloading a model it's free and easy but really helps me out https://www.printables.com/@Hello_474427/models
RE: Python skript for external Camera
Hello Hello,
that did not worked for me.
However thanks tergel for the link! I made myself a working python skript. Hopefully the token and fingerprint do not change. Here is a snippet of my code:
import requests def upload_image(http_url, fingerprint, token, image): response = requests.put( http_url, headers={ "accept": "*/*", "content-type": "image/jpg", "fingerprint": fingerprint, "token": token, }, data=image, stream=True, verify=False, ) return response HTTP_URL = "https://webcam.connect.prusa3d.com/c/snapshot" FINGERPRINT = "XXXXXXXXXXXXXX" TOKEN = "XXXXXXXXX" image = YOUR_IMAGE_FUNCTION() response = upload_image(HTTP_URL, FINGERPRINT, TOKEN, image) print(response)
RE: Python skript for external Camera
Have a look on the awesome integration which does not really have a benefit. but it is cool 🙂
RE: Python skript for external Camera
Hi Kasekuchen,
extreme beginnger here. How do i use this python script to grab images from RTSP camera with login credentials?
Hello Hello,
that did not worked for me.
However thanks tergel for the link! I made myself a working python skript. Hopefully the token and fingerprint do not change. Here is a snippet of my code:
import requests def upload_image(http_url, fingerprint, token, image): response = requests.put( http_url, headers={ "accept": "*/*", "content-type": "image/jpg", "fingerprint": fingerprint, "token": token, }, data=image, stream=True, verify=False, ) return response HTTP_URL = "https://webcam.connect.prusa3d.com/c/snapshot" FINGERPRINT = "XXXXXXXXXXXXXX" TOKEN = "XXXXXXXXX" image = YOUR_IMAGE_FUNCTION() response = upload_image(HTTP_URL, FINGERPRINT, TOKEN, image) print(response)
RE: Python skript for external Camera
Hi,
have a look at opencv for python. This should be easy and a good starting point for you. I don't use an rtsp. But here is a snippet which may help you to get on track. "Image" at the end should give you one image. Use this in kind of a loop and functions
import cv2 RTSP_URL = 'rtsp://user:pass@ADRESS' cap = cv2.VideoCapture(RTSP_URL, cv2.CAP_FFMPEG) image = cap.read()
RE: Python skript for external Camera
I would glue images on the sides, and not top/bottom.
Can you provide whole script?
See my GitHub and printables.com for some 3d stuff that you may like.
RE: Python skript for external Camera
Hello, hello, hello,
I think it's time I explain a little more about what I do. Maybe I need to start a new thread. My project has grown a lot in the meantime. I have achieved many of my following goals, a rework is still pending:
Current features:
Frontend:
- two video streams in LowQuality with focus on high FPS and low latency
- Display of HQ photos OnDemand
- FocusView (switching between FPS modes of both streams)
- Start / stop PrusaConnect CameraShare
- Start / stop Timelapse
- Visualization of Service Status
- Automatic Day / Night colors according clients “DarkMode” setting.
Backend:
- Automatic initialisation of cameras by name (UDEV alternative)
- asynchronous client management (allows streaming to multiple clients with Ptython Flask)
- Multi threading (one thread per camera, one thread per client. Camera threads send events to clients as soon as a new frame is available, results in low CPU load)
- Intelligent timelapse (series of images in variable time intervals, but a new image for Timeseries video is stored that most closely resembles the old one. This is to prevent fidgeting on the video. I use SSIM or MSE to compare images and decide which one is the best)
- Send images to PrusaConnect
- Provide a merged image from both cameras (merged vertically)
- Provide individual images in full resolution
- Change camera resolution
- Provide JSON API (output status of services, camera, PrusaConnect, timelapse).
- Auto turn on as soon as somebody connects
- Auto turn off camera if nobody is watching
(Backend based on FLASK and OPENCV)
Hardware:
- Raspberry Pi zero 2 w
- Two cameras (CSI camera, USB camera)
I would describe myself as an intermediate Python programmer. I've been testing my programme for about 2 weeks now and it's running very well so far but has some bugs. However, I'm running out of time and I really need to start commenting my code before I publish it. Also, I could clean up and simplify my code in terms of performance. Unfortunately, I myself have never really worked with Git in the role of author, but I know the principle. I would of course be extremely happy about help and a partner in development. In my private life I am also a young father, which makes it difficult to work on the code constantly.
tl;dr: I am happy to share my code. But I need more time to clean it up. The question is also whether you only need the merge function code? Here you go:
@staticmethod def sum_frame(pic1, pic2): if pic1 == None or pic2 == None: return b'' image_array1 = np.frombuffer(pic1, np.uint8) image_array2 = np.frombuffer(pic2, np.uint8) # OpenCV read ToDo: get pics direct in correct format image1 = cv2.imdecode(image_array1, cv2.IMREAD_COLOR) image2 = cv2.imdecode(image_array2, cv2.IMREAD_COLOR) # scale min_width = min(image1.shape[1], image2.shape[1]) image1 = VideoCamera.image_resize(image1, width=min_width) image2 = VideoCamera.image_resize(image2, width=min_width) c_image = cv2.vconcat([image1, image2]) cv2.imwrite('./cam_imagem.jpg', c_image) ret, jpeg = cv2.imencode('.jpg', c_image) return jpeg.tobytes() @staticmethod def image_resize(image, width=None, height=None, inter=cv2.INTER_AREA): # initialize the dimensions of the image to be resized and # grab the image size dim = None (h, w) = image.shape[:2] # if both the width and height are None, then return the # original image if width is None and height is None: return image # check to see if the width is None if width is None: # calculate the ratio of the height and construct the # dimensions r = height / float(h) dim = (int(w * r), height) # otherwise, the height is None else: # calculate the ratio of the width and construct the # dimensions r = width / float(w) dim = (width, int(h * r)) # resize the image resized = cv2.resize(image, dim, interpolation=inter) # return the resized image return resized
RE: Python skript for external Camera
Canyou provid all code please I can clean it up
Please help me out by downloading a model it's free and easy but really helps me out https://www.printables.com/@Hello_474427/models
RE: Python skript for external Camera
Hi,
I once again highlite that i am noob accoring github. My code is in chaotic stage at the moment. But here you go:
RE: Python skript for external Camera
Would be great to have something like this in a docker container for easy deployment for semi-noobs like me.
RE: Python skript for external Camera
Perhaps a basic question, but how can we obtain a fingerprint? I attempted to open the browser developer tools and even used the Postman application to inspect the network requests, but I never came across a fingerprint.
RE:
The fingerprint is yours to create, there are some limitations on what it can be, try base64 and don't make it too long, i forgot the character limit
RE: Python skript for external Camera
👍 Thanks for the information, it works like a charm with the fingerprint encoded in base64. 😎
The fingerprint is yours to create, there are some limitations on what it can be, try base64 and don't make it too long, i forgot the character limit
RE: Python skript for external Camera
Hi! Do you run this script of of a raspberry pi? And what is the .service file for, sorry I am very new to python, as I primarily do front-end work. If you could just explain to me some key points I would need to get this running that would be amazing.
RE: Python skript for external Camera
Reviving a semi-dead/dying thread here, but I found this thread the other day, and tried Käsekuchen's PrinterCam. It was cool, but just "import cv2" takes a long time on the Pi Zero (non-2) I intended to use for this, and I had trouble setting appropriate resolutions for my cameras. So, I decided to make my own, taking some cues from how the Pi-based PrusaLink handles cameras.
The result is quite minimal, easy to set up, requires no additional libraries from a clean installation of Raspberry Pi OS Lite, and runs well even on a first-gen Pi Zero. Might be of use to others as well, so I put it on GitHub: https://github.com/firetech/ConnectCam
RE: Python skript for external Camera
Thanks. That was really easy and works great with my Pi Zero 2 and an old USB Webcam I had.
RE: Python skript for external Camera
huh opencv2 is pretty heavy for the python, maybe better switch to pillow ( https://python-pillow.org/)? https://note.nkmk.me/en/python-pillow-concat-images/
See my GitHub and printables.com for some 3d stuff that you may like.
RE: Python skript for external Camera
Hi,
Can I add my wifi camera with rtsp protocol to RPI Zero 2W ? With the above topic that @kasekuchen mention?