Spaces:
Runtime error
Runtime error
| # This is a sample Python script. | |
| # Press ⌃R to execute it or replace it with your code. | |
| # Press Double ⇧ to search everywhere for classes, files, tool windows, actions, and settings. | |
| import numpy as np | |
| import cv2 | |
| import base64 | |
| def cv2_base64(image): | |
| base64_str = cv2.imencode('.png',image)[1].tobytes() | |
| base64_str = base64.b64encode(base64_str) | |
| return base64_str.decode('utf-8') | |
| def base64_cv2(base64_str): | |
| imgString = base64.b64decode(base64_str) | |
| nparr = np.frombuffer(imgString,np.uint8) | |
| image = cv2.imdecode(nparr,cv2.IMREAD_COLOR) | |
| return image | |
| def image_pose_mask(imagepath : str): | |
| img = base64_cv2(imagepath) | |
| gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY) | |
| ret, thresh = cv2.threshold(gray, 10, 255, cv2.THRESH_BINARY) | |
| contours, hierarchy = cv2.findContours(thresh, cv2.RETR_EXTERNAL, cv2.CHAIN_APPROX_SIMPLE) | |
| cnt = contours[-1] | |
| hull = cv2.convexHull(cnt) | |
| length = len(hull) | |
| if length > 4: | |
| for i in range(length): | |
| cv2.line(img, tuple(hull[i][0]), tuple(hull[(i + 1) % length][0]), (255, 255, 255), 2) | |
| gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY) | |
| _, threshold = cv2.threshold(gray, 10, 255, cv2.THRESH_BINARY) | |
| mask = img.copy() | |
| kernel = np.ones((30, 30), dtype=np.uint8) | |
| dilated = cv2.dilate(threshold, kernel, 20) | |
| dilated = cv2.dilate(dilated, kernel, 20) | |
| contours, hierarchy = cv2.findContours(dilated, cv2.RETR_EXTERNAL, cv2.CHAIN_APPROX_NONE) | |
| valid = len(contours) > 0 | |
| area = [] | |
| for k in range(len(contours)): | |
| area.append(cv2.contourArea(contours[k])) | |
| max_idx = np.argmax(np.array(area)) | |
| mask2 = cv2.drawContours(mask, contours, max_idx, (255, 255, 255), thickness=-1) | |
| img_base64 = cv2_base64(mask2) | |
| return img_base64 | |
| def image_pose_mask_numpy(image): | |
| img = np.uint8(image) | |
| print("shape:" + str(img.shape)) | |
| gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY) | |
| ret, thresh = cv2.threshold(gray, 10, 255, cv2.THRESH_BINARY) | |
| contours, hierarchy = cv2.findContours(thresh, cv2.RETR_EXTERNAL, cv2.CHAIN_APPROX_SIMPLE) | |
| cnt = contours[-1] | |
| hull = cv2.convexHull(cnt) | |
| length = len(hull) | |
| if length > 4: | |
| for i in range(length): | |
| cv2.line(img, tuple(hull[i][0]), tuple(hull[(i + 1) % length][0]), (255, 255, 255), 2) | |
| gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY) | |
| _, threshold = cv2.threshold(gray, 10, 255, cv2.THRESH_BINARY) | |
| mask = img.copy() | |
| kernel = np.ones((30, 30), dtype=np.uint8) | |
| dilated = cv2.dilate(threshold, kernel, 20) | |
| dilated = cv2.dilate(dilated, kernel, 20) | |
| contours, hierarchy = cv2.findContours(dilated, cv2.RETR_EXTERNAL, cv2.CHAIN_APPROX_NONE) | |
| valid = len(contours) > 0 | |
| area = [] | |
| for k in range(len(contours)): | |
| area.append(cv2.contourArea(contours[k])) | |
| max_idx = np.argmax(np.array(area)) | |
| mask2 = cv2.drawContours(mask, contours, max_idx, (255, 255, 255), thickness=-1) | |
| img_base64 = cv2_base64(mask2) | |
| return img_base64 | |
| def image_canny(imagepath:str): | |
| img = base64_cv2(imagepath) | |
| image_map = cv2.Canny(img, 100, 200) | |
| contours, hierarchy = cv2.findContours(image_map, cv2.RETR_EXTERNAL, cv2.CHAIN_APPROX_SIMPLE) | |
| cnt = contours[-1] | |
| hull = cv2.convexHull(cnt) | |
| length = len(hull) | |
| if length > 4: | |
| for i in range(length): | |
| cv2.line(img, tuple(hull[i][0]), tuple(hull[(i + 1) % length][0]), (0, 0, 255), 2) | |
| img = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY) | |
| contours, hierarchy = cv2.findContours(img, cv2.RETR_EXTERNAL, cv2.CHAIN_APPROX_NONE) | |
| valid = len(contours) > 0 | |
| area = [] | |
| for k in range(len(contours)): | |
| area.append(cv2.contourArea(contours[k])) | |
| max_idx = np.argmax(np.array(area)) | |
| mask2 = cv2.drawContours(image_map, contours, max_idx, (0, 0, 255), thickness=3) | |
| img_base64 = cv2_base64(mask2) | |
| return img_base64 | |
| # Press the green button in the gutter to run the script. | |
| if __name__ == '__main__': | |
| image_canny(imagepath='download (13).png') | |