김태희

add No Smoking Area Detection Code

1 +"""Detects text in the file."""
2 +from google.cloud import vision
3 +
4 +import io
5 +import os
6 +import cv2
7 +import numpy as np
8 +
9 +smokingZone = 0
10 +
11 +def stackImages(scale,imgArray): #calculate convolution
12 + rows = len(imgArray)
13 + cols = len(imgArray[0])
14 + rowsAvailable = isinstance(imgArray[0], list)
15 + width = imgArray[0][0].shape[1]
16 + height = imgArray[0][0].shape[0]
17 + if rowsAvailable:
18 + for x in range ( 0, rows):
19 + for y in range(0, cols):
20 + if imgArray[x][y].shape[:2] == imgArray[0][0].shape [:2]:
21 + imgArray[x][y] = cv2.resize(imgArray[x][y], (0, 0), None, scale, scale)
22 + else:
23 + imgArray[x][y] = cv2.resize(imgArray[x][y], (imgArray[0][0].shape[1], imgArray[0][0].shape[0]), None, scale, scale)
24 + if len(imgArray[x][y].shape) == 2: imgArray[x][y]= cv2.cvtColor( imgArray[x][y], cv2.COLOR_GRAY2BGR)
25 + imageBlank = np.zeros((height, width, 3), np.uint8)
26 + hor = [imageBlank]*rows
27 + hor_con = [imageBlank]*rows
28 + for x in range(0, rows):
29 + hor[x] = np.hstack(imgArray[x])
30 + ver = np.vstack(hor)
31 + else:
32 + for x in range(0, rows):
33 + if imgArray[x].shape[:2] == imgArray[0].shape[:2]:
34 + imgArray[x] = cv2.resize(imgArray[x], (0, 0), None, scale, scale)
35 + else:
36 + imgArray[x] = cv2.resize(imgArray[x], (imgArray[0].shape[1], imgArray[0].shape[0]), None,scale, scale)
37 + if len(imgArray[x].shape) == 2: imgArray[x] = cv2.cvtColor(imgArray[x], cv2.COLOR_GRAY2BGR)
38 + hor= np.hstack(imgArray)
39 + ver = hor
40 + return ver
41 +
42 +def getContours(img):
43 + contours,hierarchy = cv2.findContours(img,cv2.RETR_EXTERNAL,cv2.CHAIN_APPROX_NONE)
44 + for cnt in contours:
45 + area = cv2.contourArea(cnt)
46 + print(area)
47 + if area>500:
48 + cv2.drawContours(imgContour, cnt, -1, (255, 0, 0), 3)
49 + peri = cv2.arcLength(cnt,True)
50 + #print(peri)
51 + approx = cv2.approxPolyDP(cnt,0.02*peri,True)
52 + print(len(approx))
53 + objCor = len(approx)
54 + x, y, w, h = cv2.boundingRect(approx)
55 +
56 + if objCor ==3: objectType ="Tri"
57 + elif objCor == 4:
58 + aspRatio = w/float(h)
59 + if aspRatio >0.98 and aspRatio <1.03: objectType= "Square"
60 + else:objectType="Rectangle"
61 + elif objCor>4: objectType= "Sign"
62 + else:objectType="None"
63 +
64 +
65 + cv2.rectangle(imgContour,(x,y),(x+w,y+h),(0,255,0),2)
66 + cv2.putText(imgContour,objectType,
67 + (x+(w//2)-10,y+(h//2)-10),cv2.FONT_HERSHEY_COMPLEX,0.7,
68 + (0,0,0),2)
69 +
70 + if objectType == "Sign":
71 + smokingZone = 1
72 +
73 +os.environ["GOOGLE_APPLICATION_CREDENTIALS"]="C:/Users/User/Downloads/SmokeDetection-ab1773dcbc6a.json"
74 +client = vision.ImageAnnotatorClient()
75 +path = 'TestPhoto/test08.jpg'
76 +
77 +with io.open(path, 'rb') as image_file:
78 + content = image_file.read()
79 +
80 +image = vision.Image(content=content)
81 +
82 +price_candidate = []
83 +card_number_candidate = []
84 +date_candidate = []
85 +
86 +response = client.text_detection(image=image)
87 +texts = response.text_annotations
88 +print('Texts:')
89 +
90 +for text in texts:
91 + content = text.description
92 + content = content.replace(',','')
93 + print('\n"{}"'.format(content))
94 +
95 + if content == 'SMOKING' or content == "NO":
96 + smokingZone = 1
97 + print("This is No Smoking Zone")
98 +
99 +
100 +if response.error.message:
101 + raise Exception(
102 + '{}\nFor more info on error messages, check: '
103 + 'https://cloud.google.com/apis/design/errors'.format(
104 + response.error.message))
105 +
106 +
107 +img = cv2.imread(path)
108 +imgContour = img.copy()
109 +
110 +imgGray = cv2.cvtColor(img,cv2.COLOR_BGR2GRAY)
111 +imgBlur = cv2.GaussianBlur(imgGray,(7,7),1) # Gaussian smoothing filter for noise(고주파) reduce
112 +imgCanny = cv2.Canny(imgBlur,50,50)
113 +getContours(imgCanny)
114 +
115 +if smokingZone == 1:
116 + imgBlank = cv2.imread('TestPhoto/detected.png')
117 +else:
118 + imgBlank = np.zeros_like(img)
119 +
120 +imgStack = stackImages(0.6,([img,imgGray,imgBlur],
121 + [imgCanny,imgContour,imgBlank]))
122 +
123 +cv2.imshow("Stack", imgStack)
124 +
125 +cv2.waitKey(0)
...\ No newline at end of file ...\ No newline at end of file