Incipit prologus
Video nunc in Interreti circumire ostendens quomodo Tesla autopilotus viam videt.
Diu prurivi ut video ditatum detectorem iaci, et in tempore reali.
Problema est quod videre volo ex Raspberry emittere, et detector retiarii neuralis effectus in eo multum desiderandum relinquit.
Intel Neural Computer Stick
Diversas solutiones consideravi.
Π
Etiamsi Intel convertentes ad maiores compages praebet, plures foveae sunt.
Exempli gratia, forma retis inquisiti potest compatitur, et si compatitur, aliquae strata non sustineantur in fabrica, et si sustineantur, tunc errorum evenire potest in processu conversionis, ex quibus effectus est. aliqua extranea nobis in output.
In genere, si vis aliqua retis arbitraria neuralis, tunc cum NCS laborare non potest. Ideo quaestionem solvendam decrevi instrumentorum latissime patentium ac perviae.
nubes
Perspicuum optionem ad solutionem ferramentorum localem adire est ad nubem.
Optiones paratae factae - ferae oculi mei currunt.
Omnes principes;
... Ac justo minorum notarum.
In id varius lorem, non facilisis nulla.
Et decrevi non eligere, sed involvere bonum vetus consilium in OpenCV in Docker et currere in nube.
Commodum accessionis huius est flexibilitas et moderatio - reticulum neurale mutare potes, obnoxius, servitor - generatim, omnem libidinem.
servo
Incipiamus cum loci prototypo.
Traditionaliter utor lagena ad requiem API, OpenCV et MobileSSD ornatum.
Cum versiones hodiernas in Docker instituissem, OpenCV 4.1.2 inveni in Mobile SSD v1_coco_2018_01_28 non laborare, et ad probatum 11/06_2017 revolvere debebam.
In initio officii nomina classium et retis onerant:
def init():
tf_labels.initLabels(dnn_conf.DNN_LABELS_PATH)
return cv.dnn.readNetFromTensorflow(dnn_conf.DNN_PATH, dnn_conf.DNN_TXT_PATH)
In auctor locali (in laptop non admodum puero) capit 0.3 secundis, in Raspberry - 3.5.
Calculum sit amet:
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 sec, Raspberry - 1.7.
Conversus tensor exhaurit in readable 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
ulterior
Vel optio, in qua magis opus est, transfertur servo: ipsa inventa res circuit et imaginem finitam reddit.
Haec optio bona est ubi nolumus opencv trahere servo suo.
Docker
Imaginem colligimus.
Signum est pectinatum et collocatum
Utemur eodem Debian Extende pro suggestu ac in Raspberry - a probatis technicis acervis non discedemus.
Opus est ut vas, protobuf, petitiones, opencv_python instituas, mobile SSD deprime, codicem servo Github e servo incipias.
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"]
simplex
Hub evulgare Docker
Docker registra non minus quam nubes detectores ad celeritatem multiplicantur.
Ut non molestus erimus, conservative perambulamus
- Register
- Log in:
docker login - Eamus cum significativo nomine;
docker tag opencvs deprehendere tprlab/opencv-deprehendere-ssd - Ad upload imaginem servo:
docker dis tprlab/opencv-detect-ssd
Nos in nubem launch
Optio quo fugiat continens, sit et magnam.
Omnes magni scaenici (Google, Microsoft, Amazon) microform gratis pro anno primo offerunt.
Post experimentum Microsoft Azure et Google Cloud, in his consevi quia citius distulit.
Instructiones hic non scripsi, cum haec pars valde specificata sit provisore electo.
Conatus sum diversis bene hardware;
Gradus inferior (communis et dedicatus) - 0.4 - 0.5 secundis.
Potentiores carros - 0.25 - 0.3.
Etiam in gravissimo casu missionis, ter lucrationes, experiri potes.
Video
Simplex OpenCV video streamer in Raspberry deprimimus, detecta per Google Cloud.
Ad experimentum, fasciculus video adhibitus, qui semel in sectione temere cinematographica est.
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")
Cum detectore non plus quam tres tabulas in secundo obtinemus, omnia tardissime cedunt.
Si validam machinam in GCloud accipias, 4-5 tabulas per secundas deprehendere potes, sed differentia paene oculo invisibilis est, adhuc tarda est.
Nubes et vecturae gratuitae nihil ad rem habent: detector in ferramentis ordinariis currit et in tali celeritate operatur.
Neural Computer Stick
Non potui resistere et in NCS Probatio cucurrit.
Celeritas detectoris leviter tardius quam 0.1 secundis fuit, in casu aliquo 2-3 tempore velocior quam nubes in machina infirma, i.e. 8-9 tabulae secundae.
Differentia in eventibus explicatur quod NCS mobile SSD versio 2018_01_28 currit.
P.S. Praeterea experimenta docuerunt satis potentem machinam escriticam cum processore I7 paulo meliores eventus ostendisse et evenisse posse ut 10 tabulas per secundam exprimi posset.
botrum portassent
Experimentum longius processit et detectorem quinque nodis in Google Kubernetes institui.
Ipsae siliquae infirmae sunt et singulae non plus quam 2 tabulae in secundo processu fieri potuerunt.
Sed si glomerulum cum N nodis et tabulae parse in filis N curris, tunc cum sufficienti numero nodis (5) optatas 10 tabulas per secundam consequi potes.
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
Quid hic:
Paulo minus celerius ncs, quam uno flumine acrior.
Lucrum, sane, non est linearis β obducit synchronizationem et altam descriptionem imaginum opencv.
conclusio,
Super experimento colligitur quod si conaris, nube simplici effugere potes.
Sed potens escritorio vel locali ferramento te permittit ut meliores fructus consequi, et sine ullis dolis.
References
Source: www.habr.com