แแ แแแแแ
แแแขแแ แแแขแจแ แแฎแแ แแ แชแแแแแแ แแแแแ, แกแแแแช แแแฉแแแแแแแ, แแฃ แ แแแแ แฎแแแแแก แขแแกแแแก แแแขแแแแแแขแ แแแแก.
แแแแ แฎแแแแ แแแฌแฃแฎแแแก แแแขแแฅแขแแ แแ แแแแแแแ แแแฃแแ แแแแแแก แแแแแชแแแ แแ แ แแแแฃแ แแ แแจแ.
แแ แแแแแแ แแก แแ แแก, แ แแ แแ แแแแแ แแแแแแก แแแแแชแแแ Raspberry-แแแ แแ แแแกแแ แแแ แแฃแแ แฅแกแแแแก แแแขแแฅแขแแ แแก แจแแกแ แฃแแแแ แกแแกแฃแ แแแแก แขแแแแแก.
Intel Neural Computer Stick
แแแแแแฎแแแ แกแฎแแแแแกแฎแแ แแแแแฌแงแแแขแแแแแแแ.
ะ
แแแฃแฎแแแแแแ แแแแกแ, แ แแ Intel แฃแแ แฃแแแแแงแแคแก แแแแแแ แขแแ แแแก แซแแ แแแแแ แฉแแ แฉแแแแแกแแแแก, แแ แกแแแแแก แแแแแ แ แแแ แฎแแ แแแแแแ.
แแแแแแแแแ, แกแแญแแ แ แฅแกแแแแก แคแแ แแแขแ แจแแแซแแแแ แจแแฃแแแแกแแแแแ แแงแแก แแ แแฃ แแก แแแแกแแแแแแ, แแแจแแ แแแแแแ แแ แคแแแ แจแแแซแแแแ แแ แแงแแก แแฎแแ แแแญแแ แแแ แแแฌแงแแแแแแแแแ, แฎแแแ แแฃ แแกแแแ แแฎแแ แแแญแแ แแแแ, แแแจแแ แจแแแซแแแแ แแแฎแแแก แจแแชแแแแแแ แแแแแแ แขแแชแแแก แแ แแชแแกแจแ, แ แแก แจแแแแแแแแช แฉแแแ แแแฆแแแ แฃแชแแแฃแ แแแแแแแก แแแแแกแแแแแแ.
แแแแแแแ, แแฃ แแกแฃแ แ แ แแแแ แกแแฎแแก แแแแแแแแฃแ แ แแแ แแฃแแ แฅแกแแแ, แแแจแแ แแก แจแแแซแแแแ แแ แแแฃแจแแแก NCS-แแแ. แแแแขแแ, แแแแแแฌแงแแแขแ แแ แแแแแแแก แแแแแญแ แ แงแแแแแแ แแแแ แชแแแแแฃแแ แแ แฎแแแแแกแแฌแแแแแ แแแกแขแ แฃแแแแขแแแแก แแแแแงแแแแแแ.
แฆแ แฃแแแแ
แแแแแแฃแ แ แขแแฅแแแแแก แแแแแฌแงแแแขแแก แแจแแแ แ แแแขแแ แแแขแแแ แฆแ แฃแแแแแ แแแแแกแแแแ.
แแแ แแแ แแแแขแแแ - แแแแแแแ แแแจแขแแ แแแ.
แงแแแแ แแแแแ แ:
... แแ แแแแแแ แแแแแแแแ แชแแแแแแ.
แแ แฏแแจแก แจแแ แแก แแ แฉแแแ แกแฃแแแช แแ แแ แแก แแแแแแ.
แแ แแ แแแแแแฌแงแแแขแ, แ แแ แแ แแแแ แฉแแ, แแ แแแแ แจแแแแแ แ แซแแแแ แแแ แแ แกแแแฃแจแแ แกแฅแแแ OpenCV-แแ Docker-แจแ แแ แแแจแแแแ แฆแ แฃแแแแจแ.
แแ แแแแแแแแก แฃแแแ แแขแแกแแแ แแ แแก แแแฅแแแแแแ แแ แแแแขแ แแแ - แจแแแแซแแแแ แจแแชแแแแแ แแแ แแฃแแ แฅแกแแแ, แฐแแกแขแแแแ, แกแแ แแแ แ - แแแแแแแ, แแแแแกแแแแ แ แแฎแแ แแแ.
แกแแ แแแ แ
แแแแแฌแงแแ แแแแแแแแ แแแ แแ แแขแแขแแแแ.
แแ แขแ แแแแชแแฃแแแ แแแงแแแแ Flask-แก REST API, OpenCV แแ MobileSSD แฅแกแแแแกแแแแก.
Docker-แแ แแแแแแแแ แ แแแ แกแแแแแก แแแแแกแขแแแแ แแแแก แจแแแแแ แแฆแแแแแฉแแแ, แ แแ 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 แฌแแแ, 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()
แแแแแ แ - 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 แกแแ แแแ แแ แแแแแขแแแ.
แแแแแ แ
แฉแแแ แแแแ แแแแแ แกแฃแ แแแก.
แแแแ แแแแแแแแ แแแฃแแแ แแ แแแแแฅแแแงแแแแฃแแแ
แ แแแแ แช แแแแขแคแแ แแ, แฉแแแ แแแแฆแแแ แแแแแ Debian Stretch-แก, แ แแแแ แช Raspberry-แแ - แฉแแแ แแ แแแแแฃแฎแแแแ แแแแแกแขแฃแ แแแฃแ แขแแฅแแแแฃแ แแแกแขแแก.
แแฅแแแ แฃแแแ แแแแแแกแขแแแแ แแ แคแแแแแแ, แแ แแขแแแฃแคแ, แแแแฎแแแแแแ, opencv_python, แฉแแแแขแแแ แแแ แแแแแแฃแ แ SSD, แกแแ แแแ แแก แแแแ Github-แแแ แแ แแแฃแจแแแ แกแแ แแแ แ.
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 tag opencv-detect tprlab/opencv-detect-ssd - แแขแแแ แแแ แกแฃแ แแแ แกแแ แแแ แแ:
docker push tprlab/opencv-detect-ssd
แฉแแแ แแแฌแงแแแ แฆแ แฃแแแแจแ
แแแแขแแแแแ แแก แแแจแแแแแก แแ แฉแแแแแ แแกแแแ แกแแแแแแ แคแแ แแแ.
แงแแแแ แแกแฎแแแแ แแแแแแแจแ (Google, Microsoft, Amazon) แแแแแแแแแ แแแแ แ แแแกแขแแแชแแแก แฃแคแแกแแ แแแ แแแแ แฌแแแก แแแแแแแแแแแจแ.
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 แแแแ แ แฌแแแจแ แแแแแชแแแ, แแแแ แแ แแแแกแฎแแแแแแ แแแแแแกแแแแก แแแแฅแแแก แฃแฎแแแแแแ, แแก แแแแแช แแแแแ.
แฆแ แฃแแแแ แแ แขแ แแแกแแแ แขแแ แแแแก แฎแแ แฏแแแ แแ แแคแแ แจแฃแแจแแ, แแแขแแฅแขแแ แ แแฃแจแแแแก แฉแแแฃแแแแ แแ แแแแ แแขแฃแ แแแ แแ แแฃแจแแแแก แแกแแแ แกแแฉแฅแแ แแ.
แแแ แแฃแแ แแแแแแฃแขแแ แแก แฏแแฎแ
แแ แแแ แแแแฃแซแแแ แฌแแแแแฆแแแแแแแแก แแแฌแแแ แแ NCS-แแก แแแจแแฃแแ แแแแฃแจแแ.
แแแขแแฅแขแแ แแก แกแแฉแฅแแ แ แแแแแ แแแแ แแงแ 0.1 แฌแแแแ, แแแแแกแแแแ แจแแแแฎแแแแแจแ 2-3-แฏแแ แฃแคแ แ แกแฌแ แแคแ แแแแ แ แฆแ แฃแแแแ แกแฃแกแข แแแแฅแแแแแ, แแแฃ 8-9 แแแแ แ แฌแแแจแ.
แจแแแแแแแแก แแแแกแฎแแแแแแ แแแฎแกแแแแ แแแแ, แ แแ NCS แแฃแจแแแแแ แแแแแแฃแ แ SSD แแแ แกแแ 2018_01_28.
P.S. แแแ แแ แแแแกแ, แแฅแกแแแ แแแแแขแแแแ แแฉแแแแ, แ แแ แกแแแแแแ แแซแแแแ แ แแแกแแขแแแแก แแแแ แแขแ 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-แแ, แแแแ แแ แฃแคแ แ แแแแ แแแฃแแ, แแแแ แ แแ แ แแแแแแจแ.
แแแแแแ, แ แ แแฅแแ แฃแแแ, แแ แแ แแก แฌแ แคแแแ - แแ แแก แแแแแคแแ แแแแ แกแแแฅแ แแแแแแชแแแกแแแแก แแ opencv แกแฃแ แแแแแแก แฆแ แแ แแแแแ แแแแกแแแแก.
แแแกแแแแ
แกแแแ แแ แฏแแแจแ, แแฅแกแแแ แแแแแขแ แกแแจแฃแแแแแแก แแแแซแแแแก แแแแแกแแแแแ, แ แแ แแฃ แชแแแแแแ, แจแแแแซแแแแ แแแแ แแแแฆแฌแแแ แฃแแ แแแ แฆแ แฃแแแแก.
แแแแ แแ แซแแแแ แ แแแกแแขแแแแก แแ แแแแแแแแ แแแ แแแแ แแขแฃแ แ แกแแจแฃแแแแแแก แแแซแแแแ แแแแฆแฌแแแ แฃแแแแแก แจแแแแแแแก แแ แงแแแแแแแแ แ แฎแ แแแแแแก แแแ แแจแ.
แแแขแแ แแขแฃแ แ
แแแแ Github-แแ แแแแแ แแก แกแฃแ แแแ DockerHub-แแ แแแแแ แกแแ แแแ แ OpenCV แแ Python-แแ
แฌแงแแ แ: www.habr.com