Spaces:
Runtime error
Runtime error
| import numpy as np | |
| import PIL | |
| import io | |
| import cv2 | |
| from base64 import b64decode, b64encode | |
| def js_to_image(js_reply): | |
| """ | |
| Convert the JavaScript object into an OpenCV image. | |
| @param js_reply: JavaScript object containing image from webcam | |
| @return img: OpenCV BGR image | |
| """ | |
| # decode base64 image | |
| image_bytes = b64decode(js_reply.split(',')[1]) | |
| # convert bytes to numpy array | |
| jpg_as_np = np.frombuffer(image_bytes, dtype=np.uint8) | |
| # decode numpy array into OpenCV BGR image | |
| img = cv2.imdecode(jpg_as_np, flags=1) | |
| return img | |
| def bbox_to_bytes(bbox_array): | |
| """ | |
| Convert OpenCV Rectangle bounding box image into base64 byte string to be overlayed on video stream. | |
| @param bbox_array: Numpy array (pixels) containing rectangle to overlay on video stream. | |
| @return bbox_bytes: Base64 image byte string | |
| """ | |
| # convert array into PIL image | |
| bbox_PIL = PIL.Image.fromarray(bbox_array, 'RGBA') | |
| iobuf = io.BytesIO() | |
| # format bbox into png for return | |
| bbox_PIL.save(iobuf, format='png') | |
| # format return string | |
| bbox_bytes = 'data:image/png;base64,{}'.format((str(b64encode(iobuf.getvalue()), 'utf-8'))) | |
| return bbox_bytes | |
| def image_to_bytes(image): | |
| """ | |
| Convert OpenCV image into base64 byte string to be overlayed on video stream. | |
| @param image: Input image. | |
| @return img_bytes: Base64 image byte string. | |
| """ | |
| ret, buffer = cv2.imencode('.jpg', image) | |
| jpg_as_text = b64encode(buffer).decode('utf-8') | |
| img_bytes = f'data:image/jpeg;base64,{jpg_as_text}' | |
| return img_bytes |