Prologue
แแธแแแขแผแแฝแแแแแปแแ แแถแ แแแ แแพแขแแธแแแบแแทแ แแแแแแแ แถแแแธแแแแแแแแขแแแแแพแแแแแแแแแ Tesla แแพแแแพแแแแแผแแ
แแแแปแโแแถแโแแแถแแโแแถโแแผแโแแโแ แพแโแแแแปแโแแถแโแ แถแแโแแแแถแโแแธแแแขแผโแแแโแแแแผแโแแแโแงแแแแแโแ แถแแโแแแแแถ แ แพแโแแแแปแโแแแโแแถแแแแแแแแ
แแแแ แถแแบแแถแแแแปแแ
แแแ
แถแแแแแแถแแแธแแแขแผแแธ Raspberry แ แพแแแถแแแแแแแแแแแแงแแแแแแ
แถแแแแแแแถแแแแแแแแแแถแแแ
แแพแแถแแปแแฑแแแแถแแแถแแ
แแแแถแแ
แแแพแแ
Intel Neural Computer Stick
แแแแปแแแถแแแทแ แถแแแถแแแแแแแแแถแแแแแแแแ
ะ
แแแแแธแแถ Intel แแแแแแงแแแแแแแแแแแแแแแแแถแแแแแแแแแแแแแแแถแแแแแแแแ แแถแแถแแงแแแแแแแฝแแ แแแฝแแ
แงแแถแ แแแ แแแแแแแแแถแแแแแแแแถแแแแแแแแผแแแถแแขแถแ แแทแแแแแผแแแแแถ แ แพแแแแแแทแแแพแแถแแแแผแแแแแถ แแแแแแแแถแแแแฝแแ แแแฝแแแแแ แแแแถแแทแแแแแผแแแถแแแถแแแแแแ แแพแงแแแแแแแแแแ แ แพแแแแแแทแแแพแแฝแแแถแแแแผแแแถแแแถแแแแ แแแแแแ แปแแขแถแ แแพแแกแพแแแแแปแแขแแกแปแแแแแแแแพแแแถแแแแแแแแ แแแแแถแแแแแแ แแพแแแแฝแแแถแแแแแแ แแแแแแแแแแแ แฏแแทแแแแแแ
แแถแแผแแ แแแแแทแแแพแขแแแแ แแแแถแแแแแแถแแแแแแแแแแถแแแถแแขแแแพแ แทแแแแแฝแแ แแแฝแ แแแแแถแแแแ แแแแถแแทแแแแแพแแแถแแแถแแฝแ NCS แแแ แแผแ แแแแแ แพแ แแแแปแแแถแแแแแแแ แ แทแแแแแแแถแแถแแแแแแแแถแแแแแ แถแแแแแแแพแงแแแแแแแแแแธแแแถแแแถแแแแแปแ แแทแแขแถแ แ แผแแแแแพแแถแแ
แแแ
แแแแแพแแแถแแแแแแแแ แแแแแแแแแแแแแถแแแแแแแแนแแแแแปแแแแแปแแแบแแแแผแแ แผแแแ แแถแแแแแแ
แแแแแพแแแแแแแแแแแฝแ แแถแแแแแ - แแแแแแแแแแแแแปแแแแแแแแแ
แขแแแแแนแแแถแแแถแแแขแแแ
... แ แพแแแแปแแแแแถแแแแทแแแถแแแแแแแทแแแผแแแแแถแแแ
แแถแแแแแพแแแพแแแแแปแแ แแแแแแผแแแแแแบแแทแแแถแแแแแฝแแแถแแแแแแแแ
แ แพแแแแแปแแแถแแแแแแแ แ แทแแแแแทแแแแแพแแแพแ แแแปแแแแแแพแแแแธแแปแแแแแแแแถแแแแแถแแแถแแ แถแแแแแแแขแแ แแพ OpenCV แแ แแแแปแ Docker แ แพแแแแแพแแแถแแแถแแ แแแแปแแแแแ
แขแแแแแแแแแแแแแแแทแแธแแถแแแแแแแแแแบแแถแแแแแแแแแทแแแถแแแแแแแแแแ - แขแแแแขแถแ แแแแถแแแแแแผแแแแแแถแแแแแแแแแแถแ, แแแแ แแ, แแแถแแแธแแแ - แแถแแผแแ , whim แแถแแฝแแ
แแแถแแแธแแแ
แ แผแแ แถแแแแแแพแแแถแแฝแแแนแแแแแผแแแแปแแแแแปแแ
แแถแแแแแแแธแแแแปแแแแแพ Flask แแแแแถแแ REST API, OpenCV แแทแแแแแแถแ MobileSSD แ
แแแแแถแแแแกแพแแแแแแแ แแ แปแแแแแแแแ แแพ Docker แแแแปแแแถแแแแแพแแแถ OpenCV 4.1.2 แแทแแแแแพแแแถแแแถแแฝแ Mobile 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)
แแ แแพ docker แแแแปแแแแแปแ (แแ แแพแแปแแแแแผแแแแแฝแแแแแแแแทแแแแแแแแแแถแแ) แแถแ แแแถแแแแ 0.3 แแทแแถแแธแแ แแพ Raspberry - 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()
Docker - 0.2 แแท, Raspberry - 1.7 แ
แแแแแ tensor exhaust แแ แแถ 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 แแ แแถแแแแแถแแแธแแแแ
Docker
แแพแแแแแแผแแแผแแแถแแ
แแผแโแแแแผแโแแถแโแแทแโแ แพแโแแแแ แแ
แแถแแแแทแแถแแฝแ แแพแแแนแแแ Debian Stretch แแผแ แแ แแพ Raspberry - แแพแแแนแแแทแแแถแแ แแแแธแแแแแ แแ แแแแทแแแแถแแแแแถแแแแแแถแแแแแแแแ
แขแแแแแแแผแแแแกแพแ flask, protobuf, แแแแพ, opencv_python, แแถแแแ Mobile SSD, server code แแธ Github แ แพแแ แถแแแแแแพแ serverแ
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"]
แแแแแแถ
แแถแแแแแแแแถแแแ Docker Hub
แแถแแ แปแแแแแแ Docker แแแแปแแแพแแกแพแแแแแปแแแแแฟแแแทแแแทแ แแถแแงแแแแแแแถแแแแแแแแแ
แแพแแแแธแแปแแฑแแแแแแถแแแพแแแนแแขแแทแแแแ
- แ แปแแแแแแ
- แ
แผแ:
แ แผแ docker - แแแแแแแแแถแแแแแแแแแแแแถแแขแแแแแแแ
แแแแถแ docker opencv-detect tprlab/opencv-detect-ssd - แแแแ แแแแผแแแถแแแ
แแแถแแแธแแแแ
docker แแปแ tprlab/opencv-detect-ssd
แแพแแแพแแแแแพแแแถแแแพแแแ
แแแแแพแแแแแแแแแแแแแแแแผแแแแแพแแแถแแแปแแแบแแแแแแแแแผแแถแแแแแแแ
แขแแแแแแแแแแแถแแแขแแ (Google, Microsoft, Amazon) แแแแแแแผแ micro-instance แแแแฅแแแทแแแแแแแแแแถแแแแแแถแแแแแผแแ
แแแแแถแแแแธแแถแแแถแแแแแแแถแแฝแ Microsoft Azure แแทแ Google Cloud แแแแปแแแถแแแแแแแแถแแแ
แแแแแแแแ แแแแแแแถแแแแพแแแถแแแฟแแแถแแแปแแ
แแแแปแโแแทแโแแถแโแแแแแโแแถแแแแแถแโแแ โแแธแแแโแแ แแแแแถแโแแแแแโแแแโแแบโแแถแแแแถแแโแ แแแแโแขแแแโแแแแแโแแแแถโแแแโแแถแโแแแแพแแแพแแ
แแแแปแแแถแแแถแแแแแแแแแแพแแแแแแแแนแแแแแแแแแแแถ
แแแแแทแแแถแ (แ
แแแแแแแ แแทแแงแแแแทแ) - 0.4 - 0.5 แแทแแถแแธแ
แแแแแแแแแแแถแแแถแแแแ
แแแพแแแถแแแแ - 0.25 - 0.3 แ
แแถแแถแแแแแแพแแแถแแ แแผแแแแธแแแแ
แแแแปแแแแแถแแธแแแผแแแขแถแแแแแแแแแปแ แแถแแแแแแแบแแธแแ แขแแแแขแถแ
แแถแแแแแแแถแแ
ะะธะดะตะพ
แแพแแแพแแแแแพแแแถแแแแแแแทแแธแแแแถแแแธแแแขแผ OpenCV แแถแแแแแแ
แแพ Raspberry แแแแแแแพแแแถแแแแ Google Cloudแ
แแแแแถแแโแแถแโแแทแแแแแ แฏแแแถแโแแธแแแขแผโแแแแผแโแแถแโแแแแพโแแแโแแแแถแแโแแโแแ
โแ
แแแปแ
โแแแแแแแโแ
แแแแแแ
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")
แแถแแฝแแแนแแงแแแแแแ
แถแแแแพแแแแฝแแแถแแแทแแแพแแแธแแธแ แแแแแแแแแแปแแแฝแแแทแแถแแธ แขแแแธแแแแแพแแแถแแแบแแแถแแแ
แแแแแทแแแพแขแแแแแแแแถแแแธแแแแแถแแฅแแแแทแแแ
แผแแแ
แแแแปแ GCloud แขแแแแขแถแ
แแแแพแ 4-5 แ แแแแแแแแแแปแแแฝแแแทแแถแแธ แแแปแแแแแแถแแแปแแแแแถแแบแแแแพแแแแแพแแแทแแแพแแแแแแแแแ แแถแแ
แแแแบแแ
แแแ แแทแแแแแแแนแแแแแแผแแแทแแแถแแแถแแแแถแแแแแแแแแถแแฝแแแถแแ แงแแแแแแ
แถแแแแแแพแแแถแแแพแแแแแแแนแแแแแแแถ แ แพแแแแแพแแแถแแแแแปแแแแแฟแแแแแ
Neural Computer Stick
แแแแปแโแแทแโแขแถแ โแแแแแแโแแทแโแแถแโแแแแพแแแถแโแแแโแแ โแแพ NCS แแแ
แแแแฟแแแแแแงแแแแแแ แถแแแแบแแบแแแถแ 0.1 แแทแแถแแธ แแแแปแแแแแธแแถแแแแแ 2-3 แแแแฟแแแถแแแแแแ แแพแแแถแแแธแแแแแแ แแแแแบ 8-9 แ แแแแแแแแแแปแแแฝแแแทแแถแแธแ
แแถแแแปแแแแแถแแแแแแแแแแแแผแแแถแแแแแแแแแแแแถแแแทแแแแแแถ NCS แแแแปแแแแแพแแแถแ Mobile SSD แแแแ 2018_01_28แ
P.S. แแพแแแธแแแแแแแแถแแแทแแแแแแแถแแแแแ แถแแแถแแแถแแแธแแแปแแแแแผแแแแแพแแปแแแแแถแแแถแแแแแแแถแแแแถแแฝแแแแแแแแแแแแแพแแแถแ I7 แแแแ แถแแแแแแแแแแแแพแแแถแแแปแแแแแแทแ แ แพแแแถแแถแแแแแแแ แแถแขแถแ แแแแพแแ แแถแแแพแแแแธแ แแแแถแ แแ แแ 10 แ แแแแแแแแแแปแแแฝแแแทแแถแแธแ
แ แแแแแ
แแถแแแทแแแแแแแถแแแแแแแ
แแปแแแแ แ แพแแแแแปแแแถแแแแกแพแแงแแแแแแ
แถแแแแ
แแพแแแแถแแแ
แแแฝแแแแแถแแแ
แแแแปแ Google Kubernetes แ
แแพแแแแแฝแแฏแแแแแแ แ แพแแแฝแแแถแแธแแฝแแแแทแแขแถแ
แแแแพแแแถแแแพแแแธ 2 แ แแแแแแแแแแปแแแฝแแแทแแถแแธแแถแแแแ
แแแปแแแแแแแแแทแแแพแขแแแแแแแพแแแถแแ
แแแแแแแถแแฝแ N nodes แแทแ parse frames แแแแปแ N threads แแแแแถแแแแแแถแแฝแแแนแแ
แแแฝแ nodes แแแแแแแแแถแแ (5) แขแแแแขแถแ
แแแแแแ
แแถแ 10 frames แแแแ
แแแแถแแแแแปแแแฝแแแทแแถแแธแ
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 แแแแแทแ
แแแปแแแแแแแแถแแแแถแแแ
แแแแปแแแแแแแธแแแฝแแ
แแถแแถแแแทแแแถแแแแถแแแแฝแแแถแแแทแแแแแแถแแธแแแขแแแแแ - แแถแแแถแแแแแฝแแแพแแแแถแแแแแถแแแแถแแแแแพแแแแถแแแแแแแทแแแถแแ แแแแแแแถแแแแธแแแแแ แแแแผแแแถแ opencv แ
แแแ แแแแธแแแแแทแแแแถแ
แแแปแแแ แแถแแแทแแแแแแขแแปแแแแถแแฑแแแแพแแแแแแทแแแแถแแแถ แแแแแทแแแพแขแแแแแแแถแแถแ แขแแแแขแถแ แแฝแ แแปแแแธแแแแแแแถแแแแแแฝแแ
แแแปแแแแแแแแแแปแแแแถแแขแถแแปแแถแ แฌแแแแแแแนแแแแแปแแแแแแแขแแปแแแแถแแฑแแแขแแแแแแแแแ แแถแแแแแแแแแแแแพแแแถแแแปแ แแทแแแแแแแแถแแแแแทแ แแถแแฝแแกแพแแ
แแแ แแแแธแแแ
แแผแแแ แแพ Github แแผแแแถแ Docker แแ แแพ DockerHub แแแถแแแธแแแแแธแแแขแผแแ แแพ OpenCV & Python
แแแแแ: www.habr.com