āĻĒā§āĻ°āĻ¸ā§āĻ¤āĻžāĻŦāĻ¨āĻž
āĻā§āĻ¸āĻ˛āĻžāĻ° āĻ āĻā§āĻĒāĻžāĻāĻ˛āĻ āĻā§āĻāĻžāĻŦā§ āĻ°āĻžāĻ¸ā§āĻ¤āĻž āĻĻā§āĻā§āĻ¨ āĻ¤āĻž āĻĻā§āĻāĻžāĻ¨ā§ āĻāĻāĻāĻŋ āĻāĻŋāĻĄāĻŋāĻ āĻāĻāĻ¨ āĻāĻ¨ā§āĻāĻžāĻ°āĻ¨ā§āĻā§ āĻĒā§āĻ°āĻāĻžāĻ°āĻŋāĻ¤ āĻšāĻā§āĻā§āĨ¤
āĻāĻŽāĻŋ āĻāĻāĻāĻŋ āĻĄāĻŋāĻā§āĻā§āĻāĻ° āĻĻāĻŋāĻ¯āĻŧā§ āĻ¸āĻŽā§āĻĻā§āĻ§ āĻāĻŋāĻĄāĻŋāĻ āĻ¸āĻŽā§āĻĒā§āĻ°āĻāĻžāĻ° āĻāĻ°āĻ¤ā§ āĻ āĻ¨ā§āĻ āĻĻāĻŋāĻ¨ āĻ§āĻ°ā§ āĻā§āĻ˛āĻāĻžāĻā§āĻāĻŋ, āĻāĻŦāĻ āĻŦāĻžāĻ¸ā§āĻ¤āĻŦ āĻ¸āĻŽāĻ¯āĻŧā§āĨ¤
āĻ¸āĻŽāĻ¸ā§āĻ¯āĻž āĻšāĻ˛ āĻ¯ā§ āĻāĻŽāĻŋ āĻ°āĻžāĻ¸ā§āĻĒāĻŦā§āĻ°āĻŋ āĻĨā§āĻā§ āĻāĻŋāĻĄāĻŋāĻ āĻ¸āĻŽā§āĻĒā§āĻ°āĻāĻžāĻ° āĻāĻ°āĻ¤ā§ āĻāĻžāĻ, āĻāĻŦāĻ āĻāĻ¤ā§ āĻ¨āĻŋāĻāĻ°āĻžāĻ˛ āĻ¨ā§āĻāĻāĻ¯āĻŧāĻžāĻ°ā§āĻ āĻĄāĻŋāĻā§āĻā§āĻāĻ°ā§āĻ° āĻāĻžāĻ°ā§āĻ¯āĻāĻžāĻ°āĻŋāĻ¤āĻž āĻĒāĻāĻ¨ā§āĻĻā§āĻ° āĻ
āĻ¨ā§āĻ āĻāĻŋāĻā§ āĻā§āĻĄāĻŧā§ āĻĻā§āĻ¯āĻŧāĨ¤
āĻāĻ¨ā§āĻā§āĻ˛ āĻ¨āĻŋāĻāĻ°āĻžāĻ˛ āĻāĻŽā§āĻĒāĻŋāĻāĻāĻžāĻ° āĻ¸ā§āĻāĻŋāĻ
āĻāĻŽāĻŋ āĻŦāĻŋāĻāĻŋāĻ¨ā§āĻ¨ āĻ¸āĻŽāĻžāĻ§āĻžāĻ¨ āĻŦāĻŋāĻŦā§āĻāĻ¨āĻž āĻāĻ°ā§āĻāĻŋāĨ¤
Đ
āĻ¯āĻĻāĻŋāĻ āĻāĻ¨ā§āĻā§āĻ˛ āĻĒā§āĻ°āĻ§āĻžāĻ¨ āĻĢā§āĻ°ā§āĻŽāĻāĻ¯āĻŧāĻžāĻ°ā§āĻā§āĻ° āĻāĻ¨ā§āĻ¯ āĻ°ā§āĻĒāĻžāĻ¨ā§āĻ¤āĻ°āĻāĻžāĻ°ā§ āĻ¸āĻ°āĻŦāĻ°āĻžāĻš āĻāĻ°ā§, āĻ¸ā§āĻāĻžāĻ¨ā§ āĻ āĻ¨ā§āĻāĻā§āĻ˛āĻŋ āĻ¤ā§āĻ°ā§āĻāĻŋ āĻ°āĻ¯āĻŧā§āĻā§āĨ¤
āĻāĻĻāĻžāĻšāĻ°āĻŖāĻ¸ā§āĻŦāĻ°ā§āĻĒ, āĻĒā§āĻ°āĻ¯āĻŧā§āĻāĻ¨ā§āĻ¯āĻŧ āĻ¨ā§āĻāĻāĻ¯āĻŧāĻžāĻ°ā§āĻā§āĻ° āĻŦāĻŋāĻ¨ā§āĻ¯āĻžāĻ¸āĻāĻŋ āĻŦā§āĻŽāĻžāĻ¨āĻžāĻ¨ āĻšāĻ¤ā§ āĻĒāĻžāĻ°ā§, āĻāĻŦāĻ āĻ¯āĻĻāĻŋ āĻāĻāĻŋ āĻ¸āĻžāĻŽāĻā§āĻāĻ¸ā§āĻ¯āĻĒā§āĻ°ā§āĻŖ āĻšāĻ¯āĻŧ, āĻ¤āĻŦā§ āĻāĻŋāĻā§ āĻ¸ā§āĻ¤āĻ° āĻĄāĻŋāĻāĻžāĻāĻ¸ā§ āĻ¸āĻŽāĻ°ā§āĻĨāĻŋāĻ¤ āĻ¨āĻžāĻ āĻšāĻ¤ā§ āĻĒāĻžāĻ°ā§, āĻāĻŦāĻ āĻ¯āĻĻāĻŋ āĻ¸ā§āĻā§āĻ˛āĻŋ āĻ¸āĻŽāĻ°ā§āĻĨāĻŋāĻ¤ āĻšāĻ¯āĻŧ, āĻ¤āĻžāĻšāĻ˛ā§ āĻ°ā§āĻĒāĻžāĻ¨ā§āĻ¤āĻ° āĻĒā§āĻ°āĻā§āĻ°āĻŋāĻ¯āĻŧāĻž āĻāĻ˛āĻžāĻāĻžāĻ˛ā§āĻ¨ āĻ¤ā§āĻ°ā§āĻāĻŋ āĻāĻāĻ¤ā§ āĻĒāĻžāĻ°ā§, āĻ¯āĻžāĻ° āĻĢāĻ˛āĻ¸ā§āĻŦāĻ°ā§āĻĒ āĻāĻŽāĻ°āĻž āĻāĻāĻāĻĒā§āĻā§ āĻāĻŋāĻā§ āĻ āĻĻā§āĻā§āĻ¤ āĻāĻŋāĻ¨āĻŋāĻ¸ āĻĒā§āĻ¤ā§.
āĻ¸āĻžāĻ§āĻžāĻ°āĻŖāĻāĻžāĻŦā§, āĻāĻĒāĻ¨āĻŋ āĻ¯āĻĻāĻŋ āĻāĻŋāĻā§ āĻ§āĻ°āĻŖā§āĻ° āĻ¨āĻŋāĻ°ā§āĻŦāĻŋāĻāĻžāĻ°ā§ āĻ¨āĻŋāĻāĻ°āĻžāĻ˛ āĻ¨ā§āĻāĻāĻ¯āĻŧāĻžāĻ°ā§āĻ āĻāĻžāĻ¨ āĻ¤āĻŦā§ āĻāĻāĻŋ NCS āĻāĻ° āĻ¸āĻžāĻĨā§ āĻāĻžāĻ āĻ¨āĻžāĻ āĻāĻ°āĻ¤ā§ āĻĒāĻžāĻ°ā§āĨ¤ āĻ āĻ¤āĻāĻŦ, āĻāĻŽāĻŋ āĻ¸āĻŦāĻā§āĻ¯āĻŧā§ āĻŦāĻŋāĻ¸ā§āĻ¤ā§āĻ¤ āĻāĻŦāĻ āĻ ā§āĻ¯āĻžāĻā§āĻ¸ā§āĻ¸āĻ¯ā§āĻā§āĻ¯ āĻ¸āĻ°āĻā§āĻāĻžāĻŽāĻā§āĻ˛āĻŋ āĻŦā§āĻ¯āĻŦāĻšāĻžāĻ° āĻāĻ°ā§ āĻ¸āĻŽāĻ¸ā§āĻ¯āĻžāĻāĻŋ āĻ¸āĻŽāĻžāĻ§āĻžāĻ¨ āĻāĻ°āĻžāĻ° āĻā§āĻˇā§āĻāĻž āĻāĻ°āĻžāĻ° āĻ¸āĻŋāĻĻā§āĻ§āĻžāĻ¨ā§āĻ¤ āĻ¨āĻŋāĻ¯āĻŧā§āĻāĻŋāĨ¤
āĻŽā§āĻ
āĻāĻāĻāĻŋ āĻ¸ā§āĻĨāĻžāĻ¨ā§āĻ¯āĻŧ āĻšāĻžāĻ°ā§āĻĄāĻāĻ¯āĻŧā§āĻ¯āĻžāĻ° āĻ¸āĻŽāĻžāĻ§āĻžāĻ¨ā§āĻ° āĻ¸ā§āĻ¸ā§āĻĒāĻˇā§āĻ āĻŦāĻŋāĻāĻ˛ā§āĻĒ āĻšāĻ˛ āĻā§āĻ˛āĻžāĻāĻĄā§ āĻ¯āĻžāĻāĻ¯āĻŧāĻžāĨ¤
āĻĒā§āĻ°āĻ¸ā§āĻ¤ā§āĻ¤ āĻŦāĻŋāĻāĻ˛ā§āĻĒ - āĻāĻŽāĻžāĻ° āĻā§āĻ āĻŦāĻ¨ā§āĻ¯ āĻ°āĻžāĻ¨.
āĻ¸āĻāĻ˛ āĻ¨ā§āĻ¤āĻž:
... āĻāĻŦāĻ āĻāĻ¯āĻŧā§āĻ āĻĄāĻāĻ¨ āĻāĻŽ āĻĒāĻ°āĻŋāĻāĻŋāĻ¤ āĻŦā§āĻļā§.
āĻāĻ āĻŦā§āĻāĻŋāĻ¤ā§āĻ°ā§āĻ¯ā§āĻ° āĻŽāĻ§ā§āĻ¯ā§ āĻ¨āĻŋāĻ°ā§āĻŦāĻžāĻāĻ¨ āĻāĻ°āĻž āĻŽā§āĻā§āĻ āĻ¸āĻšāĻ āĻ¨āĻ¯āĻŧāĨ¤
āĻāĻŦāĻ āĻāĻŽāĻŋ āĻŦā§āĻā§ āĻ¨āĻž āĻ¨ā§āĻāĻ¯āĻŧāĻžāĻ° āĻ¸āĻŋāĻĻā§āĻ§āĻžāĻ¨ā§āĻ¤ āĻ¨āĻŋāĻ¯āĻŧā§āĻāĻŋ, āĻ¤āĻŦā§ āĻĄāĻāĻžāĻ°ā§ āĻāĻĒā§āĻ¨āĻ¸āĻŋāĻāĻŋāĻ¤ā§ āĻāĻžāĻ˛ āĻĒā§āĻ°āĻžāĻ¨ā§ āĻāĻžāĻā§āĻ° āĻ¸ā§āĻāĻŋāĻŽāĻāĻŋ āĻŽā§āĻĄāĻŧāĻžāĻ¨ā§ āĻāĻŦāĻ āĻā§āĻ˛āĻžāĻāĻĄā§ āĻāĻžāĻ˛āĻžāĻ¨ā§āĻ° āĻ¸āĻŋāĻĻā§āĻ§āĻžāĻ¨ā§āĻ¤ āĻ¨āĻŋāĻ¯āĻŧā§āĻāĻŋāĨ¤
āĻāĻ āĻĒāĻĻā§āĻ§āĻ¤āĻŋāĻ° āĻ¸ā§āĻŦāĻŋāĻ§āĻž āĻš'āĻ˛ āĻ¨āĻŽāĻ¨ā§āĻ¯āĻŧāĻ¤āĻž āĻāĻŦāĻ āĻ¨āĻŋāĻ¯āĻŧāĻ¨ā§āĻ¤ā§āĻ°āĻŖ - āĻāĻĒāĻ¨āĻŋ āĻ¨āĻŋāĻāĻ°āĻžāĻ˛ āĻ¨ā§āĻāĻāĻ¯āĻŧāĻžāĻ°ā§āĻ, āĻšā§āĻ¸ā§āĻāĻŋāĻ, āĻ¸āĻžāĻ°ā§āĻāĻžāĻ° āĻĒāĻ°āĻŋāĻŦāĻ°ā§āĻ¤āĻ¨ āĻāĻ°āĻ¤ā§ āĻĒāĻžāĻ°ā§āĻ¨ - āĻ¸āĻžāĻ§āĻžāĻ°āĻŖāĻāĻžāĻŦā§, āĻ¯ā§ āĻā§āĻ¨āĻ āĻŦāĻžāĻ¤āĻŋāĻāĨ¤
āĻ¸āĻžāĻ°ā§āĻāĻžāĻ°
āĻāĻāĻāĻŋ āĻ¸ā§āĻĨāĻžāĻ¨ā§āĻ¯āĻŧ āĻĒā§āĻ°ā§āĻā§āĻāĻžāĻāĻĒ āĻĻāĻŋāĻ¯āĻŧā§ āĻļā§āĻ°ā§ āĻāĻ°āĻž āĻ¯āĻžāĻāĨ¤
āĻāĻ¤āĻŋāĻšā§āĻ¯āĻāĻ¤āĻāĻžāĻŦā§ āĻāĻŽāĻŋ REST API, OpenCV āĻāĻŦāĻ MobileSSD āĻ¨ā§āĻāĻāĻ¯āĻŧāĻžāĻ°ā§āĻā§āĻ° āĻāĻ¨ā§āĻ¯ āĻĢā§āĻ˛āĻžāĻ¸ā§āĻ āĻŦā§āĻ¯āĻŦāĻšāĻžāĻ° āĻāĻ°āĻŋāĨ¤
āĻĄāĻāĻžāĻ°ā§ āĻŦāĻ°ā§āĻ¤āĻŽāĻžāĻ¨ āĻ¸āĻāĻ¸ā§āĻāĻ°āĻŖāĻā§āĻ˛āĻŋ āĻāĻ¨āĻ¸ā§āĻāĻ˛ āĻāĻ°āĻžāĻ° āĻĒāĻ°ā§, āĻāĻŽāĻŋ āĻāĻŦāĻŋāĻˇā§āĻāĻžāĻ° āĻāĻ°ā§āĻāĻŋ āĻ¯ā§ OpenCV 4.1.2 āĻŽā§āĻŦāĻžāĻāĻ˛ SSD v1_coco_2018_01_28 āĻāĻ° āĻ¸āĻžāĻĨā§ āĻāĻžāĻ āĻāĻ°ā§ āĻ¨āĻž āĻāĻŦāĻ āĻāĻŽāĻžāĻā§ āĻĒā§āĻ°āĻŽāĻžāĻŖāĻŋāĻ¤ 11/06_2017-āĻ āĻĢāĻŋāĻ°ā§ āĻ¯ā§āĻ¤ā§ āĻšāĻ¯āĻŧā§āĻāĻŋāĻ˛āĨ¤
āĻĒāĻ°āĻŋāĻˇā§āĻŦāĻžāĻ° āĻļā§āĻ°ā§āĻ¤ā§, āĻāĻŽāĻ°āĻž āĻā§āĻ˛āĻžāĻ¸ā§āĻ° āĻ¨āĻžāĻŽ āĻāĻŦāĻ āĻ¨ā§āĻāĻāĻ¯āĻŧāĻžāĻ°ā§āĻ āĻ˛ā§āĻĄ āĻāĻ°āĻŋ:
def init():
tf_labels.initLabels(dnn_conf.DNN_LABELS_PATH)
return cv.dnn.readNetFromTensorflow(dnn_conf.DNN_PATH, dnn_conf.DNN_TXT_PATH)
āĻāĻāĻāĻŋ āĻ¸ā§āĻĨāĻžāĻ¨ā§āĻ¯āĻŧ āĻĄāĻāĻžāĻ°ā§ (āĻā§āĻŦ āĻāĻŽ āĻŦāĻ¯āĻŧāĻ¸ā§ āĻ˛ā§āĻ¯āĻžāĻĒāĻāĻĒā§) āĻāĻāĻŋ 0.3 āĻ¸ā§āĻā§āĻ¨ā§āĻĄ āĻ¸āĻŽāĻ¯āĻŧ āĻ¨ā§āĻ¯āĻŧ, āĻ°āĻžāĻ¸ā§āĻĒāĻŦā§āĻ°āĻŋāĻ¤ā§ - 3.5āĨ¤
āĻāĻ¸ā§āĻ¨ āĻāĻŖāĻ¨āĻž āĻļā§āĻ°ā§ āĻāĻ°āĻž āĻ¯āĻžāĻ:
def inference(img):
net.setInput(cv.dnn.blobFromImage(img, 1.0/127.5, (300, 300), (127.5, 127.5, 127.5), swapRB=True, crop=False))
return net.forward()
āĻĄāĻāĻžāĻ° - 0.2 āĻ¸ā§āĻā§āĻ¨ā§āĻĄ, āĻ°āĻžāĻ¸ā§āĻĒāĻŦā§āĻ°āĻŋ - 1.7āĨ¤
āĻā§āĻ¨āĻ¸āĻ° āĻ¨āĻŋāĻˇā§āĻāĻžāĻļāĻ¨āĻā§ āĻĒāĻžāĻ āĻ¯ā§āĻā§āĻ¯ json-āĻ āĻĒāĻ°āĻŋāĻŖāĻ¤ āĻāĻ°āĻž:
def build_detection(data, thr, rows, cols):
ret = []
for detection in data[0,0,:,:]:
score = float(detection[2])
if score > thr:
cls = int(detection[1])
a = {"class" : cls, "name" : tf_labels.getLabel(cls), "score" : score}
a["x"] = int(detection[3] * cols)
a["y"] = int(detection[4] * rows)
a["w"] = int(detection[5] * cols ) - a["x"]
a["h"] = int(detection[6] * rows) - a["y"]
ret.append(a)
return ret
āĻ
āĻ§āĻŋāĻāĻ¤āĻ°
āĻāĻāĻāĻŋ āĻŦāĻŋāĻāĻ˛ā§āĻĒ āĻŦāĻŋāĻāĻ˛ā§āĻĒ, āĻ¯ā§āĻāĻžāĻ¨ā§ āĻāĻ°āĻ āĻāĻžāĻ āĻ¸āĻžāĻ°ā§āĻāĻžāĻ°ā§ āĻ¸ā§āĻĨāĻžāĻ¨āĻžāĻ¨ā§āĻ¤āĻ°āĻŋāĻ¤ āĻšāĻ¯āĻŧ: āĻāĻāĻŋ āĻ¨āĻŋāĻā§āĻ āĻĒāĻžāĻāĻ¯āĻŧāĻž āĻŦāĻ¸ā§āĻ¤ā§āĻā§āĻ˛āĻŋāĻā§ āĻŦā§āĻ¤ā§āĻ¤ āĻāĻ°ā§ āĻāĻŦāĻ āĻ¸āĻŽāĻžāĻĒā§āĻ¤ āĻāĻŋāĻ¤ā§āĻ°āĻāĻŋ āĻĢā§āĻ°āĻ¤ āĻĻā§āĻ¯āĻŧāĨ¤
āĻāĻ āĻŦāĻŋāĻāĻ˛ā§āĻĒāĻāĻŋ āĻāĻžāĻ˛ āĻ¯ā§āĻāĻžāĻ¨ā§ āĻāĻŽāĻ°āĻž āĻ¸āĻžāĻ°ā§āĻāĻžāĻ°ā§ opencv āĻā§āĻ¨ā§ āĻāĻ¨āĻ¤ā§ āĻāĻžāĻ āĻ¨āĻžāĨ¤
āĻĄāĻāĻžāĻ°
āĻāĻŽāĻ°āĻž āĻāĻŦāĻŋāĻāĻŋ āĻ¸āĻāĻā§āĻ°āĻš āĻāĻ°āĻŋāĨ¤
āĻā§āĻĄ combed āĻāĻŦāĻ āĻĒā§āĻ¸ā§āĻ āĻāĻ°āĻž āĻšāĻ¯āĻŧ
āĻāĻāĻāĻŋ āĻĒā§āĻ˛ā§āĻ¯āĻžāĻāĻĢāĻ°ā§āĻŽ āĻšāĻŋāĻ¸āĻžāĻŦā§, āĻāĻŽāĻ°āĻž āĻ°āĻžāĻ¸ā§āĻĒāĻŦā§āĻ°āĻŋāĻ° āĻŽāĻ¤ā§ āĻāĻāĻ āĻĄā§āĻŦāĻŋāĻ¯āĻŧāĻžāĻ¨ āĻ¸ā§āĻā§āĻ°ā§āĻ āĻ¨ā§āĻŦ - āĻāĻŽāĻ°āĻž āĻĒā§āĻ°āĻŽāĻžāĻŖāĻŋāĻ¤ āĻĒā§āĻ°āĻ¯ā§āĻā§āĻ¤āĻŋ āĻ¸ā§āĻā§āĻ¯āĻžāĻ āĻĨā§āĻā§ āĻŦāĻŋāĻā§āĻ¯ā§āĻ¤ āĻšāĻŦ āĻ¨āĻžāĨ¤
āĻāĻĒāĻ¨āĻžāĻā§ āĻĢā§āĻ˛āĻžāĻ¸ā§āĻ, āĻĒā§āĻ°ā§āĻā§āĻŦāĻžāĻĢ, āĻ°āĻŋāĻā§āĻ¯āĻŧā§āĻ¸ā§āĻ, opencv_python āĻāĻ¨āĻ¸ā§āĻāĻ˛ āĻāĻ°āĻ¤ā§ āĻšāĻŦā§, Github āĻĨā§āĻā§ āĻŽā§āĻŦāĻžāĻāĻ˛ SSD, āĻ¸āĻžāĻ°ā§āĻāĻžāĻ° āĻā§āĻĄ āĻĄāĻžāĻāĻ¨āĻ˛ā§āĻĄ āĻāĻ°āĻ¤ā§ āĻšāĻŦā§ āĻāĻŦāĻ āĻ¸āĻžāĻ°ā§āĻāĻžāĻ° āĻāĻžāĻ˛ā§ āĻāĻ°āĻ¤ā§ āĻšāĻŦā§āĨ¤
FROM python:3.7-stretch
RUN pip3 install flask
RUN pip3 install protobuf
RUN pip3 install requests
RUN pip3 install opencv_python
ADD http://download.tensorflow.org/models/object_detection/ssd_mobilenet_v1_coco_11_06_2017.tar.gz /
RUN tar -xvf /ssd_mobilenet_v1_coco_11_06_2017.tar.gz
ADD https://github.com/tprlab/docker-detect/archive/master.zip /
RUN unzip /master.zip
EXPOSE 80
CMD ["python3", "/docker-detect-master/detect-app/app.py"]
āĻ¸āĻšāĻ
āĻĄāĻāĻžāĻ° āĻšāĻžāĻŦā§ āĻĒā§āĻ°āĻāĻžāĻļ āĻāĻ°āĻž āĻšāĻā§āĻā§
āĻĄāĻāĻžāĻ° āĻ°ā§āĻāĻŋāĻ¸ā§āĻā§āĻ°āĻŋāĻā§āĻ˛āĻŋ āĻā§āĻ˛āĻžāĻāĻĄ āĻĄāĻŋāĻā§āĻā§āĻāĻ°ā§āĻ° āĻā§āĻ¯āĻŧā§ āĻāĻŽ āĻāĻ¤āĻŋāĻ¤ā§ āĻ¸āĻāĻā§āĻ¯āĻžāĻŦā§āĻĻā§āĻ§āĻŋ āĻāĻ°āĻā§āĨ¤
āĻ¯āĻžāĻ¤ā§ āĻŦāĻŋāĻ°āĻā§āĻ¤ āĻ¨āĻž āĻšāĻ¯āĻŧ, āĻāĻŽāĻ°āĻž āĻ°āĻā§āĻˇāĻŖāĻļā§āĻ˛āĻāĻžāĻŦā§ āĻŽāĻžāĻ§ā§āĻ¯āĻŽā§ āĻ¯ā§āĻ¤ā§ āĻšāĻŦā§
- āĻ¨āĻŋāĻŦāĻ¨ā§āĻ§āĻ¨
- āĻĒā§āĻ°āĻŦā§āĻļ āĻāĻ°ā§āĻ¨:
āĻĄāĻāĻžāĻ° āĻ˛āĻāĻāĻ¨ - āĻāĻ¸ā§āĻ¨ āĻāĻāĻāĻŋ āĻ
āĻ°ā§āĻĨāĻĒā§āĻ°ā§āĻŖ āĻ¨āĻžāĻŽ āĻ¨āĻŋāĻ¯āĻŧā§ āĻāĻ¸āĻž āĻ¯āĻžāĻ:
āĻĄāĻāĻžāĻ° āĻā§āĻ¯āĻžāĻ opencv-detect tprlab/opencv-detect-ssd - āĻ¸āĻžāĻ°ā§āĻāĻžāĻ°ā§ āĻāĻŦāĻŋāĻāĻŋ āĻāĻĒāĻ˛ā§āĻĄ āĻāĻ°ā§āĻ¨:
āĻĄāĻāĻžāĻ° āĻĒā§āĻļ tprlab/opencv-detect-ssd
āĻāĻŽāĻ°āĻž āĻŽā§āĻā§ āĻ˛āĻā§āĻ āĻāĻ°āĻŋ
āĻāĻ¨ā§āĻā§āĻāĻ¨āĻžāĻ° āĻā§āĻĨāĻžāĻ¯āĻŧ āĻāĻžāĻ˛āĻžāĻŦā§āĻ¨ āĻ¤āĻžāĻ° āĻĒāĻāĻ¨ā§āĻĻāĻ āĻŦā§āĻļ āĻĒā§āĻ°āĻļāĻ¸ā§āĻ¤āĨ¤
āĻ¸āĻŽāĻ¸ā§āĻ¤ āĻŦāĻĄāĻŧ āĻĒā§āĻ˛ā§āĻ¯āĻŧāĻžāĻ° (āĻā§āĻāĻ˛, āĻŽāĻžāĻāĻā§āĻ°ā§āĻ¸āĻĢā§āĻ, āĻ
ā§āĻ¯āĻžāĻŽāĻžāĻāĻ¨) āĻĒā§āĻ°āĻĨāĻŽ āĻŦāĻāĻ°ā§āĻ° āĻāĻ¨ā§āĻ¯ āĻŦāĻŋāĻ¨āĻžāĻŽā§āĻ˛ā§āĻ¯ā§ āĻāĻāĻāĻŋ āĻŽāĻžāĻāĻā§āĻ°ā§-āĻāĻ¨āĻ¸ā§āĻā§āĻ¯āĻžāĻ¨ā§āĻ¸ āĻ
āĻĢāĻžāĻ° āĻāĻ°ā§āĨ¤
āĻŽāĻžāĻāĻā§āĻ°ā§āĻ¸āĻĢā§āĻ Azure āĻāĻŦāĻ Google āĻā§āĻ˛āĻžāĻāĻĄā§āĻ° āĻ¸āĻžāĻĨā§ āĻĒāĻ°ā§āĻā§āĻˇāĻž āĻāĻ°āĻžāĻ° āĻĒāĻ°ā§, āĻāĻŽāĻŋ āĻĒāĻ°āĻŦāĻ°ā§āĻ¤ā§āĻ¤ā§ āĻ¸ā§āĻĨāĻŋāĻ° āĻšāĻ¯āĻŧā§āĻāĻŋ āĻāĻžāĻ°āĻŖ āĻāĻāĻŋ āĻĻā§āĻ°ā§āĻ¤ āĻŦāĻ¨ā§āĻ§ āĻšāĻ¯āĻŧā§ āĻā§āĻā§āĨ¤
āĻāĻŽāĻŋ āĻāĻāĻžāĻ¨ā§ āĻ¨āĻŋāĻ°ā§āĻĻā§āĻļāĻžāĻŦāĻ˛ā§ āĻ˛āĻŋāĻāĻŋāĻ¨āĻŋ, āĻ¯ā§āĻšā§āĻ¤ā§ āĻāĻ āĻ āĻāĻļāĻāĻŋ āĻ¨āĻŋāĻ°ā§āĻŦāĻžāĻāĻŋāĻ¤ āĻĒā§āĻ°āĻĻāĻžāĻ¨āĻāĻžāĻ°ā§āĻ° āĻāĻ¨ā§āĻ¯ āĻā§āĻŦ āĻ¨āĻŋāĻ°ā§āĻĻāĻŋāĻˇā§āĻāĨ¤
āĻāĻŽāĻŋ āĻŦāĻŋāĻāĻŋāĻ¨ā§āĻ¨ āĻšāĻžāĻ°ā§āĻĄāĻāĻ¯āĻŧā§āĻ¯āĻžāĻ° āĻŦāĻŋāĻāĻ˛ā§āĻĒ āĻā§āĻˇā§āĻāĻž āĻāĻ°ā§āĻāĻŋ,
āĻ¨āĻŋāĻŽā§āĻ¨ āĻ¸ā§āĻ¤āĻ° (āĻāĻžāĻ āĻāĻ°āĻž āĻāĻŦāĻ āĻāĻ¤ā§āĻ¸āĻ°ā§āĻā§āĻā§āĻ¤) - 0.4 - 0.5 āĻ¸ā§āĻā§āĻ¨ā§āĻĄāĨ¤
āĻāĻ°āĻ āĻļāĻā§āĻ¤āĻŋāĻļāĻžāĻ˛ā§ āĻāĻžāĻĄāĻŧāĻŋ - 0.25 - 0.3āĨ¤
āĻ āĻŋāĻ āĻāĻā§, āĻāĻŽāĻ¨āĻāĻŋ āĻ¸āĻŦāĻā§āĻ¯āĻŧā§ āĻāĻžāĻ°āĻžāĻĒ āĻĒāĻ°āĻŋāĻ¸ā§āĻĨāĻŋāĻ¤āĻŋāĻ¤ā§āĻ, āĻāĻ¯āĻŧ āĻ¤āĻŋāĻ¨āĻŦāĻžāĻ°, āĻāĻĒāĻ¨āĻŋ āĻā§āĻˇā§āĻāĻž āĻāĻ°āĻ¤ā§ āĻĒāĻžāĻ°ā§āĻ¨āĨ¤
āĻāĻŋāĻĄāĻŋāĻ
āĻāĻŽāĻ°āĻž āĻ°āĻžāĻ¸ā§āĻĒāĻŦā§āĻ°āĻŋāĻ¤ā§ āĻāĻāĻāĻŋ āĻ¸āĻžāĻ§āĻžāĻ°āĻŖ OpenCV āĻāĻŋāĻĄāĻŋāĻ āĻ¸ā§āĻā§āĻ°ā§āĻŽāĻžāĻ° āĻ˛āĻā§āĻ āĻāĻ°āĻŋ, Google āĻā§āĻ˛āĻžāĻāĻĄā§āĻ° āĻŽāĻžāĻ§ā§āĻ¯āĻŽā§ āĻ¸āĻ¨āĻžāĻā§āĻ¤ āĻāĻ°ā§ā§ˇ
āĻĒāĻ°ā§āĻā§āĻˇāĻžāĻ° āĻāĻ¨ā§āĻ¯, āĻāĻāĻāĻŋ āĻāĻŋāĻĄāĻŋāĻ āĻĢāĻžāĻāĻ˛ āĻŦā§āĻ¯āĻŦāĻšāĻžāĻ° āĻāĻ°āĻž āĻšāĻ¯āĻŧā§āĻāĻŋāĻ˛ āĻ¯āĻž āĻāĻāĻŦāĻžāĻ° āĻ°ā§āĻ¯āĻžāĻ¨ā§āĻĄāĻŽ āĻā§āĻĻ āĻ āĻāĻŋāĻ¤ā§āĻ°āĻžāĻ¯āĻŧāĻŋāĻ¤ āĻšāĻ¯āĻŧā§āĻāĻŋāĻ˛āĨ¤
def handle_frame(frame):
return detect.detect_draw_img(frame)
def generate():
while True:
rc, frame = vs.read()
outFrame = handle_frame(frame)
if outFrame is None:
(rc, outFrame) = cv.imencode(".jpg", frame)
yield(b'--framern' b'Content-Type: image/jpegrnrn' + bytearray(outFrame) + b'rn')
@app.route("/stream")
def video_feed():
return Response(generate(), mimetype = "multipart/x-mixed-replace; boundary=frame")
āĻĄāĻŋāĻā§āĻā§āĻāĻ°ā§āĻ° āĻ¸āĻžāĻšāĻžāĻ¯ā§āĻ¯ā§ āĻāĻŽāĻ°āĻž āĻĒā§āĻ°āĻ¤āĻŋ āĻ¸ā§āĻā§āĻ¨ā§āĻĄā§ āĻ¤āĻŋāĻ¨āĻāĻŋ āĻĢā§āĻ°ā§āĻŽā§āĻ° āĻŦā§āĻļāĻŋ āĻĒāĻžāĻ āĻ¨āĻž, āĻ¸āĻŦāĻāĻŋāĻā§ āĻā§āĻŦ āĻ§ā§āĻ°ā§ āĻ§ā§āĻ°ā§ āĻ¯āĻžāĻ¯āĻŧāĨ¤
āĻāĻĒāĻ¨āĻŋ āĻ¯āĻĻāĻŋ āĻāĻŋāĻā§āĻ˛āĻžāĻāĻĄā§ āĻāĻāĻāĻŋ āĻļāĻā§āĻ¤āĻŋāĻļāĻžāĻ˛ā§ āĻŽā§āĻļāĻŋāĻ¨ āĻ¨āĻŋāĻ¯āĻŧā§ āĻ¯āĻžāĻ¨, āĻāĻĒāĻ¨āĻŋ āĻĒā§āĻ°āĻ¤āĻŋ āĻ¸ā§āĻā§āĻ¨ā§āĻĄā§ 4-5 āĻĢā§āĻ°ā§āĻŽ āĻ¸āĻ¨āĻžāĻā§āĻ¤ āĻāĻ°āĻ¤ā§ āĻĒāĻžāĻ°ā§āĻ¨, āĻ¤āĻŦā§ āĻĒāĻžāĻ°ā§āĻĨāĻā§āĻ¯āĻāĻŋ āĻā§āĻā§āĻ° āĻāĻžāĻā§ āĻĒā§āĻ°āĻžāĻ¯āĻŧ āĻ
āĻĻā§āĻļā§āĻ¯, āĻāĻāĻŋ āĻāĻāĻ¨āĻ āĻ§ā§āĻ°āĨ¤
āĻā§āĻ˛āĻžāĻāĻĄ āĻāĻŦāĻ āĻĒāĻ°āĻŋāĻŦāĻšāĻ¨ āĻāĻ°āĻ āĻāĻ° āĻ¸āĻžāĻĨā§ āĻāĻŋāĻā§āĻ āĻāĻ°āĻžāĻ° āĻ¨ā§āĻ; āĻĄāĻŋāĻā§āĻā§āĻāĻ° āĻ¸āĻžāĻ§āĻžāĻ°āĻŖ āĻšāĻžāĻ°ā§āĻĄāĻāĻ¯āĻŧā§āĻ¯āĻžāĻ°ā§ āĻāĻ˛ā§ āĻāĻŦāĻ āĻāĻāĻ°āĻāĻŽ āĻāĻ¤āĻŋāĻ¤ā§ āĻāĻžāĻ āĻāĻ°ā§āĨ¤
āĻ¨āĻŋāĻāĻ°āĻžāĻ˛ āĻāĻŽā§āĻĒāĻŋāĻāĻāĻžāĻ° āĻ¸ā§āĻāĻŋāĻ
āĻāĻŽāĻŋ āĻĒā§āĻ°āĻ¤āĻŋāĻ°ā§āĻ§ āĻāĻ°āĻ¤ā§ āĻĒāĻžāĻ°āĻŋāĻ¨āĻŋ āĻāĻŦāĻ āĻāĻ¨āĻ¸āĻŋāĻāĻ¸-āĻ āĻŦā§āĻā§āĻāĻŽāĻžāĻ°ā§āĻ āĻāĻžāĻ˛āĻžāĻ¤ā§ āĻĒāĻžāĻ°āĻŋāĻ¨āĻŋāĨ¤
āĻĄāĻŋāĻā§āĻā§āĻāĻ°ā§āĻ° āĻāĻ¤āĻŋ 0.1 āĻ¸ā§āĻā§āĻ¨ā§āĻĄā§āĻ° āĻā§āĻ¯āĻŧā§ āĻāĻŋāĻā§āĻāĻž āĻ§ā§āĻ°, āĻ¯ā§ āĻā§āĻ¨āĻ āĻā§āĻˇā§āĻ¤ā§āĻ°ā§ āĻāĻāĻāĻŋ āĻĻā§āĻ°ā§āĻŦāĻ˛ āĻŽā§āĻļāĻŋāĻ¨ā§ āĻŽā§āĻā§āĻ° āĻā§āĻ¯āĻŧā§ 2-3 āĻā§āĻŖ āĻĻā§āĻ°ā§āĻ¤, āĻ āĻ°ā§āĻĨāĻžā§ āĻĒā§āĻ°āĻ¤āĻŋ āĻ¸ā§āĻā§āĻ¨ā§āĻĄā§ 8-9 āĻĢā§āĻ°ā§āĻŽāĨ¤
āĻĢāĻ˛āĻžāĻĢāĻ˛ā§āĻ° āĻĒāĻžāĻ°ā§āĻĨāĻā§āĻ¯ āĻāĻ āĻ¸āĻ¤ā§āĻ¯ āĻĻā§āĻŦāĻžāĻ°āĻž āĻŦā§āĻ¯āĻžāĻā§āĻ¯āĻž āĻāĻ°āĻž āĻšāĻ¯āĻŧā§āĻā§ āĻ¯ā§ NCS āĻŽā§āĻŦāĻžāĻāĻ˛ SSD āĻ¸āĻāĻ¸ā§āĻāĻ°āĻŖ 2018_01_28 āĻāĻ˛āĻāĻŋāĻ˛āĨ¤
āĻĒā§āĻ¨āĻļā§āĻ. āĻāĻāĻžāĻĄāĻŧāĻžāĻ, āĻĒāĻ°ā§āĻā§āĻˇāĻžāĻā§āĻ˛āĻŋ āĻĻā§āĻāĻŋāĻ¯āĻŧā§āĻā§ āĻ¯ā§ āĻāĻāĻāĻŋ I7 āĻĒā§āĻ°āĻ¸ā§āĻ¸āĻ° āĻ¸āĻš āĻāĻāĻāĻŋ āĻŽā§āĻāĻžāĻŽā§āĻāĻŋ āĻļāĻā§āĻ¤āĻŋāĻļāĻžāĻ˛ā§ āĻĄā§āĻ¸ā§āĻāĻāĻĒ āĻŽā§āĻļāĻŋāĻ¨ āĻāĻŋāĻā§āĻāĻž āĻāĻžāĻ˛ āĻĢāĻ˛āĻžāĻĢāĻ˛ āĻĻā§āĻāĻžāĻ¯āĻŧ āĻāĻŦāĻ āĻāĻāĻŋ āĻĒā§āĻ°āĻ¤āĻŋ āĻ¸ā§āĻā§āĻ¨ā§āĻĄā§ 10 āĻĢā§āĻ°ā§āĻŽ āĻāĻāĻ āĻāĻ°āĻž āĻ¸āĻŽā§āĻāĻŦ āĻŦāĻ˛ā§ āĻĒā§āĻ°āĻŽāĻžāĻŖāĻŋāĻ¤ āĻšāĻ¯āĻŧā§āĻā§āĨ¤
āĻā§āĻā§āĻ
āĻĒāĻ°ā§āĻā§āĻˇāĻžāĻāĻŋ āĻāĻ°āĻ āĻāĻāĻŋāĻ¯āĻŧā§ āĻā§āĻ˛ āĻāĻŦāĻ āĻāĻŽāĻŋ Google Kubernetes-āĻ āĻĒāĻžāĻāĻāĻāĻŋ āĻ¨ā§āĻĄā§ āĻĄāĻŋāĻā§āĻā§āĻāĻ° āĻāĻ¨āĻ¸ā§āĻāĻ˛ āĻāĻ°ā§āĻāĻŋāĨ¤
āĻĒāĻĄāĻā§āĻ˛āĻŋ āĻ¨āĻŋāĻā§āĻ°āĻžāĻ āĻĻā§āĻ°ā§āĻŦāĻ˛ āĻāĻŋāĻ˛ āĻāĻŦāĻ āĻ¤āĻžāĻĻā§āĻ° āĻĒā§āĻ°āĻ¤ā§āĻ¯ā§āĻāĻāĻŋ āĻĒā§āĻ°āĻ¤āĻŋ āĻ¸ā§āĻā§āĻ¨ā§āĻĄā§ 2 āĻĢā§āĻ°ā§āĻŽā§āĻ° āĻŦā§āĻļāĻŋ āĻĒā§āĻ°āĻā§āĻ°āĻŋāĻ¯āĻŧāĻž āĻāĻ°āĻ¤ā§ āĻĒāĻžāĻ°ā§āĻ¨āĻŋāĨ¤
āĻāĻŋāĻ¨ā§āĻ¤ā§ āĻāĻĒāĻ¨āĻŋ āĻ¯āĻĻāĻŋ N āĻ¨ā§āĻĄ āĻ¸āĻš āĻāĻāĻāĻŋ āĻā§āĻ˛āĻžāĻ¸ā§āĻāĻžāĻ° āĻāĻžāĻ˛āĻžāĻ¨ āĻāĻŦāĻ N āĻĨā§āĻ°ā§āĻĄā§ āĻĒāĻžāĻ°ā§āĻ¸ āĻĢā§āĻ°ā§āĻŽ āĻāĻ°ā§āĻ¨, āĻ¤āĻžāĻšāĻ˛ā§ āĻĒāĻ°ā§āĻ¯āĻžāĻĒā§āĻ¤ āĻ¸āĻāĻā§āĻ¯āĻ āĻ¨ā§āĻĄ (5) āĻĻāĻŋāĻ¯āĻŧā§ āĻāĻĒāĻ¨āĻŋ āĻĒā§āĻ°āĻ¤āĻŋ āĻ¸ā§āĻā§āĻ¨ā§āĻĄā§ āĻāĻžāĻā§āĻāĻŋāĻ¤ 10āĻāĻŋ āĻĢā§āĻ°ā§āĻŽ āĻ
āĻ°ā§āĻāĻ¨ āĻāĻ°āĻ¤ā§ āĻĒāĻžāĻ°ā§āĻ¨āĨ¤
def generate():
while True:
rc, frame = vs.read()
if frame is not None:
future = executor.submit(handle_frame, (frame.copy()))
Q.append(future)
keep_polling = len(Q) > 0
while(keep_polling):
top = Q[0]
if top.done():
outFrame = top.result()
Q.popleft()
if outFrame:
yield(b'--framern' b'Content-Type: image/jpegrnrn' + bytearray(outFrame) + b'rn')
keep_polling = len(Q) > 0
else:
keep_polling = len(Q) >= M
āĻāĻāĻžāĻ¨ā§ āĻāĻŋ āĻāĻā§āĻā§:
NCS-āĻāĻ° āĻ¤ā§āĻ˛āĻ¨āĻžāĻ¯āĻŧ āĻāĻāĻā§ āĻāĻŽ āĻĻā§āĻ°ā§āĻ¤, āĻāĻŋāĻ¨ā§āĻ¤ā§ āĻāĻāĻāĻŋ āĻ¸ā§āĻā§āĻ°āĻŋāĻŽā§āĻ° āĻ¤ā§āĻ˛āĻ¨āĻžāĻ¯āĻŧ āĻāĻ°āĻ āĻā§āĻ°āĻžāĻ˛ā§ā§ˇ
āĻ˛āĻžāĻ, āĻ āĻŦāĻļā§āĻ¯āĻ, āĻ°ā§āĻāĻŋāĻ āĻ¨āĻ¯āĻŧ - āĻāĻĒā§āĻ¨āĻ¸āĻŋāĻāĻŋ āĻāĻŽā§āĻāĻā§āĻ˛āĻŋāĻ° āĻ¸āĻŋāĻā§āĻā§āĻ°ā§āĻ¨āĻžāĻāĻā§āĻļāĻ¨ āĻāĻŦāĻ āĻāĻā§āĻ° āĻ āĻ¨ā§āĻ˛āĻŋāĻĒāĻŋ āĻāĻ°āĻžāĻ° āĻāĻ¨ā§āĻ¯ āĻāĻāĻžāĻ°āĻ˛ā§ āĻ°āĻ¯āĻŧā§āĻā§āĨ¤
āĻāĻĒāĻ¸āĻāĻšāĻžāĻ°
āĻ¸āĻžāĻŽāĻā§āĻ°āĻŋāĻāĻāĻžāĻŦā§, āĻĒāĻ°ā§āĻā§āĻˇāĻžāĻāĻŋ āĻāĻŽāĻžāĻĻā§āĻ° āĻāĻ āĻāĻĒāĻ¸āĻāĻšāĻžāĻ°ā§ āĻĒā§āĻāĻāĻžāĻ¨ā§āĻ° āĻ āĻ¨ā§āĻŽāĻ¤āĻŋ āĻĻā§āĻ¯āĻŧ āĻ¯ā§ āĻāĻĒāĻ¨āĻŋ āĻ¯āĻĻāĻŋ āĻā§āĻˇā§āĻāĻž āĻāĻ°ā§āĻ¨ āĻ¤āĻŦā§ āĻāĻĒāĻ¨āĻŋ āĻāĻāĻāĻŋ āĻ¸āĻžāĻ§āĻžāĻ°āĻŖ āĻŽā§āĻā§āĻ° āĻ¸āĻžāĻĨā§ āĻĻā§āĻ°ā§ āĻ¯ā§āĻ¤ā§ āĻĒāĻžāĻ°ā§āĻ¨āĨ¤
āĻāĻŋāĻ¨ā§āĻ¤ā§ āĻāĻāĻāĻŋ āĻļāĻā§āĻ¤āĻŋāĻļāĻžāĻ˛ā§ āĻĄā§āĻ¸ā§āĻāĻāĻĒ āĻŦāĻž āĻ¸ā§āĻĨāĻžāĻ¨ā§āĻ¯āĻŧ āĻšāĻžāĻ°ā§āĻĄāĻāĻ¯āĻŧā§āĻ¯āĻžāĻ° āĻāĻĒāĻ¨āĻžāĻā§ āĻāĻ°āĻ āĻāĻžāĻ˛ āĻĢāĻ˛āĻžāĻĢāĻ˛ āĻ āĻ°ā§āĻāĻ¨ āĻāĻ°āĻ¤ā§ āĻĻā§āĻ¯āĻŧ āĻāĻŦāĻ āĻā§āĻ¨ā§ āĻā§āĻļāĻ˛ āĻāĻžāĻĄāĻŧāĻžāĻāĨ¤
āĻ°ā§āĻĢāĻžāĻ°ā§āĻ¨ā§āĻ¸
Github-āĻ āĻā§āĻĄ āĻĄāĻāĻžāĻ°āĻšāĻžāĻŦā§ āĻĄāĻāĻžāĻ° āĻāĻŽā§āĻ OpenCV āĻāĻŦāĻ Python-āĻ āĻāĻŋāĻĄāĻŋāĻ āĻ¸āĻžāĻ°ā§āĻāĻžāĻ°
āĻāĻ¤ā§āĻ¸: www.habr.com