How to send image from openCV to a Web API - python

I have a web camera and I can capture video from it as following:
import cv2
cap = cv2.VideoCapture(0)
while True:
ret, frame = cap.read()
cv2.imshow('frame', frame)
if cv2.waitKey(1) and 0xFF == ord('q'):
break
cap.release()
cv2.destroyAllWindows()
What I want to do is to send the frame to an Web API (HTTP), receive the response image and show that image.
I'm new to openCV. Would you tell me how do I do this?

Try this (taken from a real project). Some parts (authentication, response validation) are obviously skipped. Hopefully it will give you a good grasp.
import cv2
from PIL import Image
from six import StringIO
import requests
cap = cv2.VideoCapture(0)
while True:
ret, frame = cap.read()
cv2.imshow('frame', frame)
if cv2.waitKey(1) and 0xFF == ord('q'):
frame_im = cv2.cvtColor(frame, cv2.COLOR_BGR2RGB)
pil_im = Image.fromarray(frame_im)
stream = StringIO()
pil_im.save(stream, format="JPEG")
stream.seek(0)
img_for_post = stream.read()
files = {'image': img_for_post}
response = requests.post(
url='/api/path-to-your-endpoint/',
files=files
)
break
cap.release()
cv2.destroyAllWindows()

Related

OpenCV2 Write to webcam python

Can I do something like this?
import cv2
cap = cv2.VideoCapture(0)
wri = cv2.device(0)
while 1:
ret, val = cv2.cvtColor(cap.read(), cv2.RGB2GRAY)
if ret:
wri.setCurrentFrame(val)
if cv2.WaitKey(0) == 27:
break
cap.release()
wri.release()
cv2.destroyAllWindows()
I want to make something like ManyCam.
I have researched and have not been able to find anything like this.
Note that the VideoCapture object is strictly responsible for capturing(read) an image from the stream(webcam, video file, RTSP, e.t.c.).
Then you can do any further processing with any of the opencv functions
Now, the webcam hardware is a device you read from, not write to.
Try of this way
import cv2
capture = cv2.VideoCapture(0)
while(True):
ret, frame = capture.read()
grayFrame = cv2.cvtColor(frame, cv2.COLOR_BGR2GRAY)
cv2.imshow('video gray', grayFrame)
cv2.imshow('video original', frame)
if cv2.waitKey(1) == 27:
break
capture.release()
cv2.destroyAllWindows()
That's it

Facecam Video does not open with cv2.VideoCapture() and cannot be read

I'm new to OpenCV and just started learning
I am using macOS, python version 3.8.1
My code:
import cv2
# takes facecam video
cap = cv2.VideoCapture(-1)
while True:
# Capture frame-by-frame
ret, frame = cap.read()
if cap.isOpened() == True:
# Our operations on the frame come here
gray = cv2.cvtColor(frame, cv2.COLOR_BGR2GRAY)
# Display the resulting frame
cv2.imshow('frame',gray)
if cv2.waitKey(1) & 0xFF == ord('q'):
break
else:
cap.open(-1)
# When everything done, release the capture
cap.release()
cv2.destroyAllWindows()
This works for me
import cv2
cap = cv2.VideoCapture(0)
while True:
ne, frame = cap.read()
cv2.imshow("Webcam Capture", frame)
if cv2.waitKey(1) & 0xFF == ord("A"):
break
cap.release()
cv2.destroyAllWindows()

Cannot Close Video Window in OpenCV

I would like to play a video in openCV using python and close that window at any time, but it is not working.
import numpy as np
import cv2
fileName='test.mp4' # change the file name if needed
cap = cv2.VideoCapture(fileName) # load the video
while(cap.isOpened()):
# play the video by reading frame by frame
ret, frame = cap.read()
if ret==True:
# optional: do some image processing here
cv2.imshow('frame',frame) # show the video
if cv2.waitKey(1) & 0xFF == ord('q'):
break
else:
break
cv2.waitKey(1)
cv2.destroyAllWindows()
cv2.waitKey(1)
The window opens and starts playing the video, but I cannot close the window.
You can use cv2.getWindowProperty('window-name', index) to detect if the window is closed. I'm not totally sure about the index but this worked for me:
import cv2
filename = 'test.mp4'
cam = cv2.VideoCapture(filename)
while True:
ret, frame = cam.read()
if not ret:
break
cv2.imshow('asd', frame)
cv2.waitKey(1)
if cv2.getWindowProperty('asd', 4) < 1:
break

Issue at opening a video with VideoCapture

I'm unable to open some avi files with Videocapture from opencv. In fact, I just have one video which works, but none of my other videos will open.
The code I use:
import numpy as np
import cv2
cap = cv2.VideoCapture('test.avi')
while True:
ret, frame = cap.read()
if ret == True:
gray = cv2.cvtColor(frame, cv2.COLOR_BGR2GRAY)
cv2.imshow('frame',gray)
if cv2.waitKey(30) & 0xFF == ord('q'):
break
else:
break
cap.release()
cv2.destroyAllWindows()

Stream video from drone Parrot 2.0. Python + cv2

I am trying to have access to the stream of my drone's camera.
Here my code:
import cv2
import numpy
import libardrone
drone = libardrone.ARDrone()
cap = drone.image
while(True):
cap = drone.image
if not cap:
continue
ret, frame = convert
gray = cv2.cvtColor(frame, cv2.COLOR_BGR2GRAY)
cv2.imshow('frame',gray)
if cv2.waitKey(1) & 0xFF == ord('q'):
break
cap.release()
cv2.destroyAllWindows()
It does not work. It does not open any frame where I can see the stream video of my drone's camera.
What's wrong? Do you have any suggestions?
Thank you!
import cv2
cam = cv2.VideoCapture('tcp://192.168.1.1:5555')
running = True
while running:
# get current frame of video
running, frame = cam.read()
if running:
cv2.imshow('frame', frame)
if cv2.waitKey(1) & 0xFF == 27:
# escape key pressed
running = False
else:
# error reading frame
print 'error reading video feed'
cam.release()
cv2.destroyAllWindows()
Try this code...This works for me.

Categories