Merge branch 'master' of http://khuhub.khu.ac.kr/2020-2-capstone-design2/2015102747
Showing
1 changed file
with
92 additions
and
0 deletions
Modules/Videopreprocessing.py
0 → 100644
| 1 | +import cv2 | ||
| 2 | +import numpy as np | ||
| 3 | +import matplotlib as plt | ||
| 4 | +import time | ||
| 5 | +fname = "./croppedimg/" | ||
| 6 | +index = 0 | ||
| 7 | +prevTime = 0 | ||
| 8 | +def filter_img(img): | ||
| 9 | + #이미지의 RGB값을 분석하여 찾는 실내 Tag가 맞는지 판별 | ||
| 10 | + img = cv2.resize(img, (10,10)) | ||
| 11 | + first = [0,0,0] | ||
| 12 | + for x_loc in range(0, 10): | ||
| 13 | + for y_loc in range(0, 10): | ||
| 14 | + bgr_value = img[x_loc,y_loc] | ||
| 15 | + first=first+bgr_value | ||
| 16 | + first[0] = first[0]/100 | ||
| 17 | + first[1] = first[1]/100 | ||
| 18 | + first[2] = first[2]/100 | ||
| 19 | + blue = first[0]<200 and first[0]>120 | ||
| 20 | + green = first[1]>120 and first[1]<210 | ||
| 21 | + red = first[2]>130 and first[2]<230 | ||
| 22 | + | ||
| 23 | + if(blue and green and red): | ||
| 24 | + return True | ||
| 25 | + else: | ||
| 26 | + return False | ||
| 27 | +def bboxes(inp,prevTime): | ||
| 28 | + #Frame을 인자로 전달받음 | ||
| 29 | + img = inp | ||
| 30 | + start = time.time() | ||
| 31 | + curTime = time.time() | ||
| 32 | + # img2gray = cv2.imread(fname,0) | ||
| 33 | + # img = cv2.namedWindow(img,cv2.WINDOW_NORMAL) | ||
| 34 | + # img = cv2.resizeWindow(img,600,600) | ||
| 35 | + img_final = inp | ||
| 36 | + # img_final = cv2.namedWindow(fname,cv2.WINDOW_NORMAL) | ||
| 37 | + # img_final = cv2.resizeWindow(fname,600,600) | ||
| 38 | + img2gray = cv2.cvtColor(inp, cv2.COLOR_BGR2GRAY) #GRAY Image 8bit per pixel | ||
| 39 | + ret, mask = cv2.threshold(img2gray, 180, 255, cv2.THRESH_BINARY) #threshold : distinguish background, object | ||
| 40 | + image_final = cv2.bitwise_and(img2gray, img2gray, mask=mask) #bitwise | ||
| 41 | + ret, new_img = cv2.threshold(img_final, 180, 255, cv2.THRESH_BINARY) # Nfor black text , cv.THRESH_BINARY_IV | ||
| 42 | + newimg = cv2.cvtColor(new_img, cv2.COLOR_BGR2GRAY) #Gray Image converting | ||
| 43 | + #newimg = cv2.GaussianBlur(newimg, (3,3),0) | ||
| 44 | + | ||
| 45 | + # remove noise from image | ||
| 46 | + #kernel = cv2.getStructuringElement(cv2.MORPH_CROSS, (5,1)) | ||
| 47 | + # to manipulate the orientation of dilution , large x means horizonatally dilating more, large y means vertically dilating more | ||
| 48 | + #dilated = cv2.dilate(newimg, kernel, iterations=1) # dilate | ||
| 49 | + # erode = cv2.erode(newimg, kernel) | ||
| 50 | + _,contours, _ = cv2.findContours(newimg, cv2.RETR_CCOMP, cv2.CHAIN_APPROX_NONE) # get contours | ||
| 51 | + #cv2.CHAIN_APPROX_NONE: 모든 컨투어 포인트를 반환 | ||
| 52 | + for contour in contours: | ||
| 53 | + # get rectangle bounding contour | ||
| 54 | + [x, y, w, h] = cv2.boundingRect(contour) | ||
| 55 | + # remove small false positives that aren't textq | ||
| 56 | + # text인식하기. width, height | ||
| 57 | + #if w > 50 or h > 35 or w<25: | ||
| 58 | + #continue | ||
| 59 | + if h / w > 1.0 or w / h > 2.0: | ||
| 60 | + continue | ||
| 61 | + #if h>40 or w>70: | ||
| 62 | + #continue | ||
| 63 | + if y>150: | ||
| 64 | + continue | ||
| 65 | + cropped = img_final[y :y + h , x : x + w] | ||
| 66 | + # draw rectangle around contour on original image | ||
| 67 | + if(filter_img(cropped)): | ||
| 68 | + cv2.rectangle(img, (x, y), (x + w, y + h), (0, 0, 255), 3) | ||
| 69 | + cv2.putText(img,"cropped", (x-50,y-10), cv2.FONT_HERSHEY_COMPLEX_SMALL, 1, (0,0,255), 1) | ||
| 70 | + #cropped = img_final[y :y + h , x : x + w] | ||
| 71 | + else: | ||
| 72 | + continue | ||
| 73 | + img = cv2.resize(img, (720, 380)) | ||
| 74 | + sec = curTime - prevTime | ||
| 75 | + prevTime = curTime | ||
| 76 | + fps = 1/(sec) | ||
| 77 | + #print ("Time {0} ".format(sec)) | ||
| 78 | + #print ("Estimated fps {0} ".format(fps)) | ||
| 79 | + str1 = ("FPS : {0}".format(int(fps))) | ||
| 80 | + cv2.putText(img, str1, (0, 40), cv2.FONT_HERSHEY_COMPLEX_SMALL, 0.8, (0, 255, 0),1) | ||
| 81 | + cv2.imshow('captcha_result', img) | ||
| 82 | + return prevTime | ||
| 83 | + | ||
| 84 | +cap = cv2.VideoCapture(0) #동영상 파일 읽어옴 | ||
| 85 | +while (cap.isOpened()): | ||
| 86 | + ret, inp = cap.read() #프레임을 읽어옴, 읽어온 프레임을 인자로 bboxes 전달 | ||
| 87 | + if(ret): #success boolean | ||
| 88 | + prevTime = bboxes(inp, prevTime) | ||
| 89 | + if cv2.waitKey(1) & 0xFF == ord('q'): | ||
| 90 | + print("Terminate Process..") | ||
| 91 | + break | ||
| 92 | +cap.release() #파일 닫아줌 | ||
| ... | \ No newline at end of file | ... | \ No newline at end of file |
-
Please register or login to post a comment