рдПрдХ рд╕реНрдХреВрд▓реА рдмрдЪреНрдЪреЗ рдХреА рдЖрдВрдЦреЛрдВ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рд╡рд░реНрдЧреАрдХреГрдд рдХрд░рдиреЗ рдХрд╛ рдХрд╛рд░реНрдп: рдПрдХ рдирд┐рдЧрд░рд╛рдиреА рдХреИрдорд░реЗ рд╕реЗ рдлреНрд░реЗрдо рджреНрд╡рд╛рд░рд╛ рдкрд╛рд░реНрдХрд┐рдВрдЧ рдореЗрдВ рдХрд╛рд░ рдХреА рдЙрдкрд╕реНрдерд┐рддрд┐ рдХрд╛ рдирд┐рд░реНрдзрд╛рд░рдг рдХрд░рдирд╛

рд╣реИрд▓реЛ, рдореИрдВ 11 рд╡реАрдВ рдХрдХреНрд╖рд╛ рдХрд╛ рдЫрд╛рддреНрд░ рд╣реВрдВ, рдореБрдЭреЗ рдкреНрд░реЛрдЧреНрд░рд╛рдорд┐рдВрдЧ, рдЖрдИрдЯреА рд╡рд┐рд╖рдпреЛрдВ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рджрд┐рд▓рдЪрд╕реНрдкреА рд╣реИред

рдореИрдВ рдЕрдкрдиреА рдкрд░рд┐рдпреЛрдЬрдирд╛ рдХреЛ рд╕рд╛рдЭрд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдпрд╣ рдкреЛрд╕реНрдЯ рд▓рд┐рдЦ рд░рд╣рд╛ рд╣реВрдВ, рдЬрд┐рд╕рдиреЗ рд╕рдкреНрддрд╛рд╣рд╛рдВрдд рдореЗрдВ рдореЗрд░реЗ рдЬреАрд╡рди рдХреЗ 10 рдШрдВрдЯреЗ рд▓реЗ рд▓рд┐рдП рдФрд░ рдбреЗрдЯрд╛ рд╡рд┐рд╢реНрд▓реЗрд╖рдг рдХреЗ рдЖрдзреБрдирд┐рдХ рддрд░реАрдХреЛрдВ рдХреА рд╕рдВрднрд╛рд╡рдирд╛рдУрдВ рдХреЛ рд╕рдордЭрдиреЗ рдХреЗ рд▓рд┐рдП рдкреВрд░рд╛ рдХрд┐рдпрд╛ рдЧрдпрд╛ред рдкреНрд░рдХрд╛рд╢рди рдХреЛ рдЬреНрдЮрд╛рди рдХреЗ рдЗрд╕ рдХреНрд╖реЗрддреНрд░ рдореЗрдВ рдЕрдирднрд┐рдЬреНрдЮ рд▓реЛрдЧреЛрдВ рдХреЗ рд▓рд┐рдП рд╕рдлрд▓ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдХрд╛ рдПрдХ рдЙрджрд╛рд╣рд░рдг рдорд╛рдирд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ, рд╕рд╛рде рд╣реА рдЙрди рд▓реЛрдЧреЛрдВ рдХреЗ рд▓рд┐рдП рдореЗрд░реА рдЧрд▓рддрд┐рдпреЛрдВ рдХреЛ рдЗрдВрдЧрд┐рдд рдХрд░рдиреЗ рдХрд╛ рдЕрдиреБрд░реЛрдз рднреА рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ рдЬреЛ рддрджрдиреБрд╕рд╛рд░ рдЬрд╛рдирдХрд╛рд░ рд╣реИрдВред

рджрд┐рдпрд╛ рдЧрдпрд╛: рдПрдХ рд╕реАрд╕реАрдЯреАрд╡реА рдХреИрдорд░реЗ рд╕реЗ рд╡реАрдбрд┐рдпреЛ рд╕реНрдЯреНрд░реАрдо, рдЬрд┐рд╕ рдкрд░ рдПрдХ рд╡рд┐рд╢реЗрд╖ рдкрд╛рд░реНрдХрд┐рдВрдЧ рд╕реНрдерд╛рди рдХреА рдЫрд╡рд┐ рдХреЗ рд╕рд╛рде 100x50 рдкрд┐рдХреНрд╕реЗрд▓ рдХрд╛ рдПрдХ рдЯреБрдХрдбрд╝рд╛ рд╣реИ, рдЬрд┐рд╕ рдкрд░ рдХреЗрд╡рд▓ рдПрдХ рд╡рд┐рд╢рд┐рд╖реНрдЯ рдХрд╛рд░ рдореМрдЬреВрдж рдпрд╛ рдЕрдиреБрдкрд╕реНрдерд┐рдд рд╣реЛ рд╕рдХрддреА рд╣реИред

рдХреИрдорд░рд╛ рдЫрд╡рд┐

рдПрдХ рдкрд╛рд░реНрдХрд┐рдВрдЧ рдХреА рдЬрдЧрд╣ рдХреА рдЫрд╡рд┐


рдЙрджреНрджреЗрд╢реНрдп: рдкрд╛рд░реНрдХрд┐рдВрдЧ рд╕реНрдерд╛рди рдореЗрдВ рдХрд╛рд░ рдХреА рдЙрдкрд╕реНрдерд┐рддрд┐ рдпрд╛ рдЕрдиреБрдкрд╕реНрдерд┐рддрд┐ рдХрд╛ рдирд┐рд░реНрдзрд╛рд░рдг рдХрд░рдирд╛ред

рдПрдХ рдХреИрдорд░рд╛ рдЫрд╡рд┐ рдкреНрд░рд╛рдкреНрдд рдХрд░рдирд╛


рдореИрдВ рдЫрд╡рд┐ рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдФрд░ рдкреНрд░реАрдкреНрд░реЛрд╕реЗрд╕ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдУрдкрдирд╕реАрд╡реА рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реВрдВред
рдирд┐рдореНрди рдХреЛрдб рдореИрдВрдиреЗ рдиреНрдпреВрд░рд▓ рдиреЗрдЯрд╡рд░реНрдХ рдХреЛ рдкреНрд░рд╢рд┐рдХреНрд╖рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЙрдкрдпреЛрдЧ рдХрд┐рдП рдЬрд╛рдиреЗ рд╡рд╛рд▓реЗ рдбреЗрдЯрд╛рд╕реЗрдЯ рдХрд╛ рдирд┐рд░реНрдорд╛рдг рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛: рдореИрдВ рдкреНрд░рддрд┐ рдШрдВрдЯреЗ рдкрд╛рд░реНрдХрд┐рдВрдЧ рд╕реНрдерд╛рди рдХреА рддрд╕реНрд╡реАрд░ рдЦреАрдВрдЪрддрд╛ рд╣реВрдВ, рдФрд░ 60 рдлреЛрдЯреЛ рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреЗ рдмрд╛рдж, рдореИрдВ рдореИрдиреНрдпреБрдЕрд▓ рд░реВрдк рд╕реЗ рдЙрдиреНрд╣реЗрдВ рдорд╢реАрди рдХреЗ рд╕рд╛рде рдФрд░ рдмрд┐рдирд╛ рдлреЛрдЯреЛ рдореЗрдВ рд╡рд┐рднрд╛рдЬрд┐рдд рдХрд░рддрд╛ рд╣реВрдВред

dataminer.py
import cv2 as cv import numpy as np import time cap = cv.VideoCapture() r = 0 while r <=100: cap.open('http://**.**.***.***:***/*****CG?container=mjpeg&stream=main') #URL-  hasFrame, frame = cap.read()#    frame = frame[100:200, 300:750] box = [0,335,100,385] quantframe = frame[box[0]:box[2], box[1]:box[3]]#         r+=1 cv.imwrite(str(r)+'.png',quantframe) #     print('saved') cap.release() time.sleep(3600) key = cv.waitKey(1) if key & 0xFF == ord('q'): cv.destroyAllWindows() break 


рдЫрд╡рд┐ рдкреНрд░рд╕рдВрд╕реНрдХрд░рдг


рдореБрдЭреЗ рд▓рдЧрд╛ рдХрд┐ рддрдВрддреНрд░рд┐рдХрд╛ рдиреЗрдЯрд╡рд░реНрдХ рдХреЛ рд╕реНрд░реЛрдд рдЪрд┐рддреНрд░реЛрдВ рдкрд░ рдирд╣реАрдВ, рдмрд▓реНрдХрд┐ cv2.findcontours (...) рдлрд╝рдВрдХреНрд╢рди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдХрд╛рд░ рдХреЗ рдЖрдХреГрддрд┐ рдХреЗ рд╕рд╛рде рдЫрд╡рд┐рдпреЛрдВ рдкрд░ рдкреНрд░рд╢рд┐рдХреНрд╖рд┐рдд рдХрд░рдирд╛ рд╕рд╣реА рдирд┐рд░реНрдгрдп рдерд╛ред

рдпрд╣рд╛рдБ рд╡рд╣ рдХреЛрдб рд╣реИ рдЬреЛ рдореВрд▓ рдЫрд╡рд┐ рдХреЛ рдПрдХ рд░реВрдкрд░реЗрдЦрд╛ рдЫрд╡рд┐ рдореЗрдВ рдкрд░рд┐рд╡рд░реНрддрд┐рдд рдХрд░рддрд╛ рд╣реИ:

рдЖрдХреГрддрд┐ рдЦреЛрдЬрдирд╛
 def contoursfinder(image): img = image.copy() srcimg = img.copy() hsv_min = np.array((0, 0, 0), np.uint8) hsv_max = np.array((255, 255, 60), np.uint8) #         ,   ,      hsv = cv.cvtColor( img, cv.COLOR_BGR2HSV ) thresh = cv.inRange( hsv, hsv_min, hsv_max ) contours, _ = cv.findContours(thresh, cv.RETR_EXTERNAL, cv.CHAIN_APPROX_SIMPLE) img = np.zeros((100,50,3), np.uint8) cv.drawContours(img, contours, -1, (255,255,255), 1, cv.LINE_AA) return cv.cvtColor(img, cv.COLOR_BGR2GRAY) 


рд╕рдорд╛рд░реЛрд╣ рдХрд╛ рдкрд░рд┐рдгрд╛рдо:

рдЫрд┐рдкрд╛ рд╣реБрдЖ рдкрд╛рда

рддрдВрддреНрд░рд┐рдХрд╛ рдиреЗрдЯрд╡рд░реНрдХ


рдореИрдВрдиреЗ рдЯреЗрдВрд╕рд░рдлрд╝реНрд▓реЛ рд▓рд╛рдЗрдмреНрд░реЗрд░реА (рдХреЗрд░рд╕) рдХрд╛ рдЗрд╕реНрддреЗрдорд╛рд▓ рдХрд┐рдпрд╛ред

рдиреЗрдЯрд╡рд░реНрдХ рдЖрд░реНрдХрд┐рдЯреЗрдХреНрдЪрд░ рдХреЛ рдЗрдВрдЯрд░рдиреЗрдЯ рд╕реЗ рдЙрджрд╛рд╣рд░рдг рд╕реЗ рдХреЙрдкреА рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ: рдореЗрд░реЗ рд▓рд┐рдП, рдПрдХ рд╕реНрдкрд╖реНрдЯреАрдХрд░рдг рд╕реНрдкрд╖реНрдЯ рдирд╣реАрдВ рд╣реИ рдХрд┐ рдРрд╕рд╛ рдХреНрдпреЛрдВ рд╣реИред рдпрджрд┐ рдЬрд╛рдирдХрд╛рд░ рд▓реЛрдЧ рдпрд╣ рдмрддрд╛рддреЗ рдпрд╛ рдмрддрд╛рддреЗ рд╣реИрдВ рдХрд┐ рдХрд╣рд╛рдВ рдкрдврд╝рдирд╛ рд╣реИ рддреЛ рдпрд╣ рд╡рд╛рд╕реНрддреБрдХрд▓рд╛ рдкреНрд░рднрд╛рд╡реА рдХреНрдпреЛрдВ рд╣реИ рдпрд╛ рдХреБрдЫ рдЕрдиреНрдп рдХреНрдпреЛрдВ рдЕрдзрд┐рдХ рдкреНрд░рднрд╛рд╡реА рд╣реЛрдВрдЧреЗ, рдореИрдВ рдмрд╣реБрдд рдЖрднрд╛рд░реА рд░рд╣реВрдВрдЧрд╛ред
рддрдВрддреНрд░рд┐рдХрд╛ рдиреЗрдЯрд╡рд░реНрдХ рдореЙрдбрд▓: рдЕрдиреБрдХреНрд░рдорд┐рдХ, рдореЗрдВ 256 рдФрд░ 128 рдиреНрдпреВрд░реЙрдиреНрд╕ рдФрд░ рдЗрдирдкреБрдЯ, рдЖрдЙрдЯрдкреБрдЯ рдкрд░рддреЛрдВ рдХреЗ рджреЛ рдШрдиреЗ рдЫрд┐рдкреЗ рд╣реБрдП рдкрд░рдд рд╣реЛрддреЗ рд╣реИрдВред

рдХреЛрдб
 model = keras.Sequential([ keras.layers.Flatten(input_shape=(100, 50)), keras.layers.Dense(256, activation=tf.nn.relu), keras.layers.Dense(128, activation=tf.nn.relu), keras.layers.Dense(2, activation=tf.nn.softmax) ]) model.compile(optimizer=tf.train.AdamOptimizer(), loss='sparse_categorical_crossentropy', metrics=['accuracy']) model.fit(trainingimagesarr, trainingimagesarrlabel, epochs=1, callbacks=[tbCallBack]) 


рдкреНрд░рд╢рд┐рдХреНрд╖рдг рд╕реЗ рдкрд╣рд▓реЗ, рддрдВрддреНрд░рд┐рдХрд╛ рдиреЗрдЯрд╡рд░реНрдХ рдХреЗ рдЗрдирдкреБрдЯ рдХреЛ 0 рд╕реЗ 1 рддрдХ рдХреА рд╕реАрдорд╛ рдореЗрдВ рд╕рдВрдЦреНрдпрд╛ рджреЗрдиреЗ рдХреЗ рд▓рд┐рдП рдкреВрд░реЗ рдЦрд╕рд░рд╛ рдореИрдЯреНрд░рд┐рдХреНрд╕ рдХреЛ 255 рд╕реЗ рд╡рд┐рднрд╛рдЬрд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ред

 trainingimagesarr = trainingimagesarr / 255.0 trainingimagesarrlabel = np.array(trainingimagesarrlabel)-1 

рдЕрдм рдореИрдВ рдлрд╝рдВрдХреНрд╢рди рдХреЛ рдХреЙрд▓ рдХрд░ рд╕рдХрддрд╛ рд╣реВрдВ:

 def realtest(): cap = cv.VideoCapture() cap.open('http://**.**.***.***:***/*****CG?container=mjpeg&stream=main') hasFrame, frame = cap.read() frame = frame[100:200, 300:750] quantframe = frame[0:100,275:325] quantframe = contoursfinder(quantframe) return model.predict(np.array([quantframe]))[0][1]>0.60 

рдкрд╛рд░реНрдХрд┐рдВрдЧ рдореЗрдВ рдХрд╛рд░ рдХреА рдЙрдкрд╕реНрдерд┐рддрд┐ рдкрд░ рдбреЗрдЯрд╛ рдкреНрд░рд╛рдкреНрдд рдХрд░реЗрдВред

рдЬреНрдпрд╛рджрд╛ рдордд рдорд╛рд░реЛ, рд▓реЗрдХрд┐рди рдереЛрдбрд╝рд╛ рд╕рд╛ :-)

рдзрдиреНрдпрд╡рд╛рдж!

Source: https://habr.com/ru/post/hi440608/


All Articles