I try to make an encrypted video conference, so the data will be sent UDP mode, I accessed the webcam with openCV in python, it is there any whay to acces the data from webcam as bits so that I can encript-transfer-decript and show the immage on the desired station? Or what other library(python/java/c/c++) can help me wth taking data from my webcam?
Asked
Active
Viewed 315 times
1
-
1there are postings about how to serialize an image. One simple approach would be to encode the image as jpg or png (cv::imencode) to serialize and then use any encryption. But that will result in quite big data packets. In opencv you can't access the raw videoencoded packets, since opencv is for computer vision and not for video processing. – Micka Jan 06 '18 at 12:02
1 Answers
1
I'm using OpenCV 3.3 for Python(3.5) on Ubuntu 16.04.
For you question, to encrypt the frame taken from video and transform by TCP/UDP:
On Side A:
(1) use `cap.read` to take frame form `videoCapture` as `np.array`
(2) use `np.tobytes` to convert from `np.array` to `bytes`
(3) do encryption on bytes(can be switched with step 2).
(4) transfer `bytes` using TCP/UDP
On Side B:
(1) receive from A
(2) do decryption on the received bytes
(3) use `np.frombuffer` to convert from `bytes` to `np.array`, then `reshape`. you get the data.
A sample code snippet:
- On Side A
cap = cv2.VideoCapture(0)
assert cap.isOpened()
## (1) read
ret, frame = cap.read()
sz = frame.shape
## (2) numpy to bytes
frame_bytes = frame.tobytes()
print(type(frame_bytes))
# <class 'bytes'>
## (3) encode
# ...
## (4) transfer
# ...
cap.release()
- On Side B
## (1) receive
## (2) decode
## (3) frombuffer and reshape to the same size on Side A
frame_frombytes = np.frombuffer(frame_bytes, dtype=np.uint8).reshape(sz)
print(type(frame_frombytes))
## <class 'numpy.ndarray'>
Related answers:
(1) Convert str to numpy.ndarray
(2) Can't write video by opencv in Python
(3) How to transfer cv::VideoCapture frames through socket in client-server model (OpenCV C++)?

Kinght 金
- 17,681
- 4
- 60
- 74