Raspberry Pi 'เจคเฉ‡ เจ•เจฒเจพเจ‰เจก เจ†เจฌเจœเฉˆเจ•เจŸ เจกเจฟเจŸเฉˆเจ•เจŸเจฐ เจฆเจพ เจตเฉ€เจกเฉ€เจ“

เจชเฉเจฐเฉ‹เจฒเฉ‹เจ—

เจ‡เฉฑเจ• เจตเฉ€เจกเฉ€เจ“ เจนเฉเจฃ เจ‡เฉฐเจŸเจฐเจจเฉˆเฉฑเจŸ 'เจคเฉ‡ เจ˜เฉเฉฐเจฎ เจฐเจฟเจนเจพ เจนเฉˆ เจœเจฟเจธ เจตเจฟเฉฑเจš เจฆเจฟเจ–เจพเจ‡เจ† เจ—เจฟเจ† เจนเฉˆ เจ•เจฟ เจŸเฉ‡เจธเจฒเจพ เจฆเจพ เจ†เจŸเฉ‹เจชเจพเจ‡เจฒเจŸ เจธเฉœเจ• เจจเฉ‚เฉฐ เจ•เจฟเจตเฉ‡เจ‚ เจฆเฉ‡เจ–เจฆเจพ เจนเฉˆเฅค

เจฎเฉˆเจจเฉ‚เฉฐ เจ‡เฉฑเจ• เจกเจฟเจŸเฉˆเจ•เจŸเจฐ เจจเจพเจฒ เจญเจฐเจชเฉ‚เจฐ เจตเฉ€เจกเฉ€เจ“ เจชเฉเจฐเจธเจพเจฐเจฟเจค เจ•เจฐเจจ เจฒเจˆ เจฒเฉฐเจฌเฉ‡ เจธเจฎเฉ‡เจ‚ เจคเฉ‹เจ‚ เจ–เฉเจœเจฒเฉ€ เจนเฉ‹ เจฐเจนเฉ€ เจนเฉˆ, เจ…เจคเฉ‡ เจ…เจธเจฒ เจธเจฎเฉ‡เจ‚ เจตเจฟเฉฑเจšเฅค

Raspberry Pi 'เจคเฉ‡ เจ•เจฒเจพเจ‰เจก เจ†เจฌเจœเฉˆเจ•เจŸ เจกเจฟเจŸเฉˆเจ•เจŸเจฐ เจฆเจพ เจตเฉ€เจกเฉ€เจ“

เจธเจฎเฉฑเจธเจฟเจ† เจ‡เจน เจนเฉˆ เจ•เจฟ เจฎเฉˆเจ‚ เจฐเจพเจธเจฌเฉ‡เจฐเฉ€ เจคเฉ‹เจ‚ เจตเฉ€เจกเฉ€เจ“ เจชเฉเจฐเจธเจพเจฐเจฟเจค เจ•เจฐเจจเจพ เจšเจพเจนเฉเฉฐเจฆเจพ เจนเจพเจ‚, เจ…เจคเฉ‡ เจ‡เจธ 'เจคเฉ‡ เจจเจฟเจŠเจฐเจฒ เจจเฉˆเจŸเจตเจฐเจ• เจกเจฟเจŸเฉˆเจ•เจŸเจฐ เจฆเฉ€ เจ•เจพเจฐเจ—เฉเจœเจผเจพเจฐเฉ€ เจฒเฉ‹เฉœเฉ€เจ‚เจฆเฉ‡ เจนเฉ‹เจฃ เจฒเจˆ เจฌเจนเฉเจค เจ•เฉเจ เจ›เฉฑเจกเจฆเฉ€ เจนเฉˆเฅค

เจ‡เฉฐเจŸเฉ‡เจฒ เจจเจฟเจŠเจฐเจฒ เจ•เฉฐเจชเจฟเจŠเจŸเจฐ เจธเจŸเจฟเจ•

เจฎเฉˆเจ‚ เจตเฉฑเจ–-เจตเฉฑเจ– เจนเฉฑเจฒเจพเจ‚ 'เจคเฉ‡ เจตเจฟเจšเจพเจฐ เจ•เฉ€เจคเจพเฅค

ะ’ เจ†เจ–เจฐเฉ€ เจฒเฉ‡เจ– Intel Neural Computer Stick เจจเจพเจฒ เจชเฉเจฐเจฏเฉ‹เจ— เจ•เฉ€เจคเจพเฅค เจนเจพเจฐเจกเจตเฉ‡เจ…เจฐ เจธเจผเจ•เจคเฉ€เจธเจผเจพเจฒเฉ€ เจนเฉˆ, เจชเจฐ เจ‡เจธเจฆเฉ‡ เจ†เจชเจฃเฉ‡ เจจเฉˆเฉฑเจŸเจตเจฐเจ• เจซเจพเจฐเจฎเฉˆเจŸ เจฆเฉ€ เจฒเฉ‹เฉœ เจนเฉˆเฅค

เจนเจพเจฒเจพเจ‚เจ•เจฟ เจ‡เฉฐเจŸเฉ‡เจฒ เจตเฉฑเจกเฉ‡ เจซเจฐเฉ‡เจฎเจตเจฐเจ• เจฒเจˆ เจ•เจจเจตเจฐเจŸเจฐ เจชเฉเจฐเจฆเจพเจจ เจ•เจฐเจฆเจพ เจนเฉˆ, เจ‡เฉฑเจฅเฉ‡ เจฌเจนเฉเจค เจธเจพเจฐเฉ€เจ†เจ‚ เจ•เจฎเฉ€เจ†เจ‚ เจนเจจเฅค

เจ‰เจฆเจพเจนเจฐเจจ เจฒเจˆ, เจฒเฉ‹เฉœเฉ€เจ‚เจฆเฉ‡ เจจเฉˆเฉฑเจŸเจตเจฐเจ• เจฆเจพ เจซเจพเจฐเจฎเฉˆเจŸ เจ…เจธเฉฐเจ—เจค เจนเฉ‹ เจธเจ•เจฆเจพ เจนเฉˆ, เจ…เจคเฉ‡ เจœเฉ‡เจ•เจฐ เจ‡เจน เจ…เจจเฉเจ•เฉ‚เจฒ เจนเฉˆ, เจคเจพเจ‚ เจ•เฉเจ เจฒเฉ‡เจ…เจฐเจพเจ‚ เจกเจฟเจตเจพเจˆเจธ 'เจคเฉ‡ เจธเจฎเจฐเจฅเจฟเจค เจจเจนเฉ€เจ‚ เจนเฉ‹ เจธเจ•เจฆเฉ€เจ†เจ‚ เจนเจจ, เจ…เจคเฉ‡ เจœเฉ‡เจ•เจฐ เจ‰เจน เจธเจฎเจฐเจฅเจฟเจค เจนเจจ, เจคเจพเจ‚ เจชเจฐเจฟเจตเจฐเจคเจจ เจชเฉเจฐเจ•เจฟเจฐเจฟเจ† เจฆเฉŒเจฐเจพเจจ เจ—เจฒเจคเฉ€เจ†เจ‚ เจนเฉ‹ เจธเจ•เจฆเฉ€เจ†เจ‚ เจนเจจ, เจœเจฟเจธ เจฆเฉ‡ เจจเจคเฉ€เจœเฉ‡ เจตเจœเฉ‹เจ‚ เจธเจพเจจเฉ‚เฉฐ เจ†เจ‰เจŸเจชเฉเฉฑเจŸ 'เจคเฉ‡ เจ•เฉเจ เจ…เจœเฉ€เจฌ เจšเฉ€เจœเจผเจพเจ‚ เจฎเจฟเจฒเจฆเฉ€เจ†เจ‚ เจนเจจเฅค

เจ†เจฎ เจคเฉŒเจฐ 'เจคเฉ‡, เจœเฉ‡เจ•เจฐ เจคเฉเจธเฉ€เจ‚ เจ•เจฟเจธเฉ‡ เจ•เจฟเจธเจฎ เจฆเจพ เจ†เจฐเจฌเจฟเจŸเจฐเจฐเฉ€ เจจเจฟเจŠเจฐเจฒ เจจเฉˆเฉฑเจŸเจตเจฐเจ• เจšเจพเจนเฉเฉฐเจฆเฉ‡ เจนเฉ‹, เจคเจพเจ‚ เจ‡เจน 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

เจ…เฉฑเจ—เฉ‡ เจซเจฒเจพเจธเจ• เจฆเฉเจ†เจฐเจพ เจ‡เจธ เจ•เจพเจฐเจตเจพเจˆ เจจเฉ‚เฉฐ เจจเจฟเจฐเจฏเจพเจค เจ•เจฐเฉ‹(เจ‡เจจเจชเฉเจŸ เจ‡เฉฑเจ• เจคเจธเจตเฉ€เจฐ เจนเฉˆ, เจ†เจ‰เจŸเจชเฉเฉฑเจŸ json เจตเจฟเฉฑเจš เจกเจฟเจŸเฉˆเจ•เจŸเจฐ เจฆเฉ‡ เจจเจคเฉ€เจœเฉ‡ เจนเจจ)เฅค

เจ‡เฉฑเจ• เจตเจฟเจ•เจฒเจชเจฟเจ• เจตเจฟเจ•เจฒเจช, เจœเจฟเจธ เจตเจฟเฉฑเจš เจตเจงเฉ‡เจฐเฉ‡ เจ•เฉฐเจฎ เจจเฉ‚เฉฐ เจธเจฐเจตเจฐ เจตเจฟเฉฑเจš เจคเจฌเจฆเฉ€เจฒ เจ•เฉ€เจคเจพ เจœเจพเจ‚เจฆเจพ เจนเฉˆ: เจ‡เจน เจ†เจชเจฃเฉ‡ เจ†เจช เจฒเฉฑเจญเฉ€เจ†เจ‚ เจตเจธเจคเฉ‚เจ†เจ‚ เจจเฉ‚เฉฐ เจšเฉฑเจ•เจฐ เจฆเจฟเฉฐเจฆเจพ เจนเฉˆ เจ…เจคเฉ‡ เจฎเฉเจ•เฉฐเจฎเจฒ เจšเจฟเฉฑเจคเจฐ เจจเฉ‚เฉฐ เจตเจพเจชเจธ เจ•เจฐเจฆเจพ เจนเฉˆเฅค

เจ‡เจน เจตเจฟเจ•เจฒเจช เจตเจงเฉ€เจ† เจนเฉˆ เจœเจฟเฉฑเจฅเฉ‡ เจ…เจธเฉ€เจ‚ เจธเจฐเจตเจฐ 'เจคเฉ‡ opencv เจจเฉ‚เฉฐ เจ–เจฟเฉฑเจšเจฃเจพ เจจเจนเฉ€เจ‚ เจšเจพเจนเฉเฉฐเจฆเฉ‡ เจนเจพเจ‚เฅค

เจกเฉŒเจ•เจฐ

เจ…เจธเฉ€เจ‚ เจšเจฟเฉฑเจคเจฐ เจจเฉ‚เฉฐ เจ‡เจ•เฉฑเจ เจพ เจ•เจฐเจฆเฉ‡ เจนเจพเจ‚.

เจ•เฉ‹เจก เจจเฉ‚เฉฐ เจ•เฉฐเจฌเจก เจ…เจคเฉ‡ เจชเฉ‹เจธเจŸ เจ•เฉ€เจคเจพ เจ—เจฟเจ† เจนเฉˆ Github, docker เจ‡เจธ เจจเฉ‚เฉฐ เจ‰เฉฑเจฅเฉ‹เจ‚ เจธเจฟเฉฑเจงเจพ เจฒเฉˆ เจœเจพเจตเฉ‡เจ—เจพเฅค

เจ‡เฉฑเจ• เจชเจฒเฉ‡เจŸเจซเจพเจฐเจฎ เจฆเฉ‡ เจคเฉŒเจฐ 'เจคเฉ‡, เจ…เจธเฉ€เจ‚ เจฐเจพเจธเจฌเฉ‡เจฐเฉ€ เจตเจพเจ‚เจ— เจนเฉ€ เจกเฉ‡เจฌเฉ€เจ…เจจ เจธเจŸเฉเจฐเฉˆเจš เจฒเจตเจพเจ‚เจ—เฉ‡ - เจ…เจธเฉ€เจ‚ เจชเฉเจฐเจฎเจพเจฃเจฟเจค เจคเจ•เจจเฉ€เจ•เฉ€ เจธเจŸเฉˆเจ• เจคเฉ‹เจ‚ เจญเจŸเจ•เจฃ เจจเจนเฉ€เจ‚ เจœเจพเจตเจพเจ‚เจ—เฉ‡เฅค

เจคเฉเจนเจพเจจเฉ‚เฉฐ flask, protobuf, เจฌเฉ‡เจจเจคเฉ€เจ†เจ‚, 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"]

เจธเจงเจพเจฐเจจ เจกเจฟเจŸเฉˆเจ•เจŸเจฐ เจ•เจฒเจพเจ‡เฉฐเจŸ เจฌเฉ‡เจจเจคเฉ€เจ†เจ‚ เจฆเฉ‡ เจ†เจงเจพเจฐ 'เจคเฉ‡เฅค

เจกเฉŒเจ•เจฐ เจนเฉฑเจฌ 'เจคเฉ‡ เจชเฉเจฐเจ•เจพเจธเจผเจฟเจค เจ•เฉ€เจคเจพ เจœเจพ เจฐเจฟเจนเจพ เจนเฉˆ

เจกเฉŒเจ•เจฐ เจฐเจœเจฟเจธเจŸเจฐเฉ€เจ†เจ‚ เจ•เจฒเจพเจ‰เจก เจกเจฟเจŸเฉˆเจ•เจŸเจฐเจพเจ‚ เจคเฉ‹เจ‚ เจ˜เฉฑเจŸ เจจเจนเฉ€เจ‚ เจ—เจคเฉ€ เจจเจพเจฒ เจ—เฉเจฃเจพ เจ•เจฐ เจฐเจนเฉ€เจ†เจ‚ เจนเจจ.

เจชเจฐเฉ‡เจธเจผเจพเจจ เจจเจพ เจ•เจฐเจจ เจฒเจˆ, เจ…เจธเฉ€เจ‚ เจฐเฉ‚เฉœเฉเจนเฉ€เจตเจพเจฆเฉ€ เจคเฉŒเจฐ 'เจคเฉ‡ เจฒเฉฐเจ˜เจพเจ‚เจ—เฉ‡ DockerHub.

  1. เจฐเจœเจฟเจธเจŸเจฐ
  2. เจฒเจพเจ—เจฟเจจ:
    เจกเฉŒเจ•เจฐ เจฒเฉŒเจ—เจ‡เจจ
  3. เจ†เจ“ เจ‡เฉฑเจ• เจ…เจฐเจฅเจชเฉ‚เจฐเจจ เจจเจพเจฎ เจฆเฉ‡ เจจเจพเจฒ เจ†เจ“:
    เจกเฉŒเจ•เจฐ เจŸเฉˆเจ— opencv-detect tprlab/opencv-detect-ssd
  4. เจธเจฐเจตเจฐ เจคเฉ‡ เจšเจฟเฉฑเจคเจฐ เจ…เฉฑเจชเจฒเฉ‹เจก เจ•เจฐเฉ‹:
    เจกเฉŒเจ•เจฐ เจชเฉเจธเจผ tprlab/opencv-detect-ssd

เจ…เจธเฉ€เจ‚ เจ•เจฒเจพเจ‰เจก เจตเจฟเฉฑเจš เจฒเจพเจ‚เจš เจ•เจฐเจฆเฉ‡ เจนเจพเจ‚

เจ•เฉฐเจŸเฉ‡เจจเจฐ เจ•เจฟเฉฑเจฅเฉ‡ เจšเจฒเจพเจ‰เจฃเจพ เจนเฉˆ เจฆเฉ€ เจšเฉ‹เจฃ เจตเฉ€ เจ•เจพเจซเจผเฉ€ เจšเฉŒเฉœเฉ€ เจนเฉˆเฅค

เจธเจพเจฐเฉ‡ เจตเฉฑเจกเฉ‡ เจ–เจฟเจกเจพเจฐเฉ€ (เจ—เฉ‚เจ—เจฒ, โ€‹โ€‹เจฎเจพเจˆเจ•เจฐเฉ‹เจธเจพเจซเจŸ, เจเจฎเจพเจœเจผเจพเจจ) เจชเจนเจฟเจฒเฉ‡ เจธเจพเจฒ เจฒเจˆ เจ‡เฉฑเจ• เจฎเจพเจˆเจ•เจฐเฉ‹-เจ‡เฉฐเจธเจŸเฉˆเจ‚เจธ เจฎเฉเจซเจผเจค เจตเจฟเฉฑเจš เจชเฉ‡เจธเจผ เจ•เจฐเจฆเฉ‡ เจนเจจเฅค
เจฎเจพเจˆเจ•เฉเจฐเฉ‹เจธเจพเจซเจŸ เจ…เจœเจผเฉเจฐ เจ…เจคเฉ‡ เจ—เฉ‚เจ—เจฒ เจ•เจฒเจพเจ‰เจก เจจเจพเจฒ เจชเฉเจฐเจฏเฉ‹เจ— เจ•เจฐเจจ เจคเฉ‹เจ‚ เจฌเจพเจ…เจฆ, เจฎเฉˆเจ‚ เจฌเจพเจ…เจฆ เจตเจฟเฉฑเจš เจธเฉˆเจŸเจฒ เจนเฉ‹ เจ—เจฟเจ† เจ•เจฟเจ‰เจ‚เจ•เจฟ เจ‡เจน เจคเฉ‡เจœเจผเฉ€ เจจเจพเจฒ เจฌเฉฐเจฆ เจนเฉ‹ เจ—เจฟเจ† เจธเฉ€เฅค

เจฎเฉˆเจ‚ เจ‡เฉฑเจฅเฉ‡ เจนเจฆเจพเจ‡เจคเจพเจ‚ เจจเจนเฉ€เจ‚ เจฒเจฟเจ–เฉ€เจ†เจ‚, เจ•เจฟเจ‰เจ‚เจ•เจฟ เจ‡เจน เจนเจฟเฉฑเจธเจพ เจšเฉเจฃเฉ‡ เจนเฉ‹เจ เจชเฉเจฐเจฆเจพเจคเจพ เจฒเจˆ เจฌเจนเฉเจค เจ–เจพเจธ เจนเฉˆเฅค

เจฎเฉˆเจ‚ เจตเฉฑเจ–-เจตเฉฑเจ– เจนเจพเจฐเจกเจตเฉ‡เจ…เจฐ เจตเจฟเจ•เจฒเจชเจพเจ‚ เจฆเฉ€ เจ•เฉ‹เจธเจผเจฟเจธเจผ เจ•เฉ€เจคเฉ€,
เจ˜เฉฑเจŸ เจชเฉฑเจงเจฐ (เจธเจพเจ‚เจเจพ เจ…เจคเฉ‡ เจธเจฎเจฐเจชเจฟเจค) - 0.4 - 0.5 เจธเจ•เจฟเฉฐเจŸเฅค
เจตเจงเฉ‡เจฐเฉ‡ เจธเจผเจ•เจคเฉ€เจธเจผเจพเจฒเฉ€ เจ•เจพเจฐเจพเจ‚ - 0.25 - 0.3.
เจ–เฉˆเจฐ, เจธเจญ เจคเฉ‹เจ‚ เจฎเจพเฉœเฉ‡ เจนเจพเจฒเจพเจค เจตเจฟเฉฑเจš เจตเฉ€, เจœเจฟเฉฑเจคเจพเจ‚ เจคเจฟเฉฐเจจ เจตเจพเจฐ เจนเจจ, เจคเฉเจธเฉ€เจ‚ เจ•เฉ‹เจธเจผเจฟเจธเจผ เจ•เจฐ เจธเจ•เจฆเฉ‡ เจนเฉ‹เฅค

เจตเฉ€เจกเฉ€เจ“

เจ…เจธเฉ€เจ‚ Raspberry 'เจคเฉ‡ เจ‡เฉฑเจ• เจธเจงเจพเจฐเจจ OpenCV เจตเฉ€เจกเฉ€เจ“ เจธเจŸเฉเจฐเฉ€เจฎเจฐ เจฒเจพเจ‚เจš เจ•เจฐเจฆเฉ‡ เจนเจพเจ‚, 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 เจซเจฐเฉ‡เจฎเจพเจ‚ เจฆเจพ เจชเจคเจพ เจฒเจ—เจพ เจธเจ•เจฆเฉ‡ เจนเฉ‹, เจชเจฐ เจ‡เจน เจ…เฉฐเจคเจฐ เจ…เฉฑเจ– เจฒเจˆ เจฒเจ—เจญเจ— เจ…เจฆเจฟเฉฑเจ– เจนเฉˆ, เจ‡เจน เจ…เจœเฉ‡ เจตเฉ€ เจนเฉŒเจฒเฉ€ เจนเฉˆเฅค

Raspberry Pi 'เจคเฉ‡ เจ•เจฒเจพเจ‰เจก เจ†เจฌเจœเฉˆเจ•เจŸ เจกเจฟเจŸเฉˆเจ•เจŸเจฐ เจฆเจพ เจตเฉ€เจกเฉ€เจ“

เจ•เจฒเจพเจ‰เจก เจ…เจคเฉ‡ เจ†เจตเจพเจœเจพเจˆ เจฆเฉ‡ เจ–เจฐเจšเจฟเจ†เจ‚ เจฆเจพ เจ‡เจธ เจจเจพเจฒ เจ•เฉ‹เจˆ เจฒเฉˆเจฃเจพ-เจฆเฉ‡เจฃเจพ เจจเจนเฉ€เจ‚ เจนเฉˆ, เจกเจฟเจŸเฉˆเจ•เจŸเจฐ เจ†เจฎ เจนเจพเจฐเจกเจตเฉ‡เจ…เจฐ 'เจคเฉ‡ เจšเฉฑเจฒเจฆเจพ เจนเฉˆ เจ…เจคเฉ‡ เจ‡เฉฐเจจเฉ€ เจ—เจคเฉ€ เจจเจพเจฒ เจ•เฉฐเจฎ เจ•เจฐเจฆเจพ เจนเฉˆเฅค

เจจเจฟเจŠเจฐเจฒ เจ•เฉฐเจชเจฟเจŠเจŸเจฐ เจธเจŸเจฟเจ•

เจฎเฉˆเจ‚ เจตเจฟเจฐเฉ‹เจง เจจเจนเฉ€เจ‚ เจ•เจฐ เจธเจ•เจฟเจ† เจ…เจคเฉ‡ NCS 'เจคเฉ‡ เจฌเฉˆเจ‚เจšเจฎเจพเจฐเจ• เจจเฉ‚เฉฐ เจšเจฒเจพเจ‡เจ†เฅค

เจกเจฟเจŸเฉˆเจ•เจŸเจฐ เจฆเฉ€ เจ—เจคเฉ€ 0.1 เจธเฉˆเจ•เจฟเฉฐเจก เจคเฉ‹เจ‚ เจฅเฉ‹เฉœเฉเจนเฉ€ เจนเฉŒเจฒเฉ€ เจธเฉ€, เจ•เจฟเจธเฉ‡ เจตเฉ€ เจธเจฅเจฟเจคเฉ€ เจตเจฟเฉฑเจš เจ‡เฉฑเจ• เจ•เจฎเจœเจผเฉ‹เจฐ เจฎเจธเจผเฉ€เจจ 'เจคเฉ‡ เจฌเฉฑเจฆเจฒ เจจเจพเจฒเฉ‹เจ‚ 2-3 เจ—เฉเจฃเจพ เจคเฉ‡เจœเจผ, เจญเจพเจต 8-9 เจซเจฐเฉ‡เจฎ เจชเฉเจฐเจคเฉ€ เจธเจ•เจฟเฉฐเจŸเฅค

Raspberry Pi 'เจคเฉ‡ เจ•เจฒเจพเจ‰เจก เจ†เจฌเจœเฉˆเจ•เจŸ เจกเจฟเจŸเฉˆเจ•เจŸเจฐ เจฆเจพ เจตเฉ€เจกเฉ€เจ“

เจจเจคเฉ€เจœเจฟเจ†เจ‚ เจตเจฟเฉฑเจš เจ…เฉฐเจคเจฐ เจ‡เจธ เจคเฉฑเจฅ เจฆเฉเจ†เจฐเจพ เจธเจฎเจเจพเจ‡เจ† เจ—เจฟเจ† เจนเฉˆ เจ•เจฟ เจฎเฉ‹เจฌเจพเจˆเจฒ SSD เจธเฉฐเจธเจ•เจฐเจฃ 2018_01_28 NCS 'เจคเฉ‡ เจฒเจพเจ‚เจš เจ•เฉ€เจคเจพ เจ—เจฟเจ† เจธเฉ€เฅค

เจชเฉ€.เจเฉฑเจธ. เจ‡เจธ เจคเฉ‹เจ‚ เจ‡เจฒเจพเจตเจพ, เจชเฉเจฐเจฏเฉ‹เจ—เจพเจ‚ เจจเฉ‡ เจฆเจฟเจ–เจพเจ‡เจ† เจนเฉˆ เจ•เจฟ เจ‡เฉฑเจ• I7 เจชเฉเจฐเฉ‹เจธเฉˆเจธเจฐ เจตเจพเจฒเฉ€ เจ‡เฉฑเจ• เจ•เจพเจซเจผเฉ€ เจธเจผเจ•เจคเฉ€เจธเจผเจพเจฒเฉ€ เจกเฉˆเจธเจ•เจŸเฉŒเจช เจฎเจธเจผเฉ€เจจ เจฅเฉ‹เฉœเฉ‡ เจตเจงเฉ€เจ† เจจเจคเฉ€เจœเฉ‡ เจฆเจฟเจ–เจพเจ‰เจ‚เจฆเฉ€ เจนเฉˆ เจ…เจคเฉ‡ เจ‡เจน เจชเฉเจฐเจคเฉ€ เจธเจ•เจฟเฉฐเจŸ 10 เจซเจฐเฉ‡เจฎเจพเจ‚ เจจเฉ‚เฉฐ เจจเจฟเจšเฉ‹เฉœเจจเจพ เจธเฉฐเจญเจต เจธเจพเจฌเจค เจนเฉ‹เจ‡เจ† เจนเฉˆเฅค

เจ•เจฒเฉฑเจธเจŸเจฐ

เจชเฉเจฐเจฏเฉ‹เจ— เจนเฉ‹เจฐ เจ…เฉฑเจ—เฉ‡ เจ—เจฟเจ† เจ…เจคเฉ‡ เจฎเฉˆเจ‚ เจ—เฉ‚เจ—เจฒ เจ•เฉเจฌเจฐเจจเฉ‡เจŸเจธ เจตเจฟเฉฑเจš เจชเฉฐเจœ เจจเฉ‹เจกเจพเจ‚ 'เจคเฉ‡ เจกเจฟเจŸเฉˆเจ•เจŸเจฐ เจธเจฅเจพเจชเจค เจ•เฉ€เจคเจพเฅค
เจชเฉŒเจก เจ†เจชเจฃเฉ‡ เจ†เจช เจตเจฟเฉฑเจš เจ•เจฎเจœเจผเฉ‹เจฐ เจธเจจ เจ…เจคเฉ‡ เจ‰เจนเจจเจพเจ‚ เจตเจฟเฉฑเจšเฉ‹เจ‚ เจนเจฐ เจ‡เฉฑเจ• 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

เจ‡เฉฑเจฅเฉ‡ เจ•เฉ€ เจนเฉ‹เจ‡เจ† เจนเฉˆ:

Raspberry Pi 'เจคเฉ‡ เจ•เจฒเจพเจ‰เจก เจ†เจฌเจœเฉˆเจ•เจŸ เจกเจฟเจŸเฉˆเจ•เจŸเจฐ เจฆเจพ เจตเฉ€เจกเฉ€เจ“

NCS เจฆเฉ‡ เจฎเฉเจ•เจพเจฌเจฒเฉ‡ เจฅเฉ‹เฉœเจพ เจ˜เฉฑเจŸ เจคเฉ‡เจœเจผ, เจชเจฐ เจ‡เฉฑเจ• เจธเจŸเฉเจฐเฉ€เจฎ เจจเจพเจฒเฉ‹เจ‚ เจตเจงเฉ‡เจฐเฉ‡ เจœเจผเฉ‹เจฐเจฆเจพเจฐเฅค

เจฒเจพเจญ, เจฌเฉ‡เจธเจผเจ•, เจฐเฉ‡เจ–เจฟเจ• เจจเจนเฉ€เจ‚ เจนเฉˆ - เจ“เจชเจจเจธเฉ€เจตเฉ€ เจšเจฟเฉฑเจคเจฐเจพเจ‚ เจฆเฉ€ เจธเจฎเจ•เจพเจฒเฉ€เจ•เจฐเจจ เจ…เจคเฉ‡ เจกเฉ‚เฉฐเจ˜เฉ€ เจจเจ•เจฒ เจฒเจˆ เจ“เจตเจฐเจฒเฉ‡เจ… เจนเจจเฅค

เจธเจฟเฉฑเจŸเจพ

เจ•เฉเฉฑเจฒ เจฎเจฟเจฒเจพ เจ•เฉ‡, เจชเฉเจฐเจฏเฉ‹เจ— เจธเจพเจจเฉ‚เฉฐ เจ‡เจน เจธเจฟเฉฑเจŸเจพ เจ•เฉฑเจขเจฃ เจฆเฉ€ เจ‡เจœเจพเจœเจผเจค เจฆเจฟเฉฐเจฆเจพ เจนเฉˆ เจ•เจฟ เจœเฉ‡เจ•เจฐ เจคเฉเจธเฉ€เจ‚ เจ•เฉ‹เจธเจผเจฟเจธเจผ เจ•เจฐเจฆเฉ‡ เจนเฉ‹, เจคเจพเจ‚ เจคเฉเจธเฉ€เจ‚ เจ‡เฉฑเจ• เจธเจงเจพเจฐเจจ เจ•เจฒเจพเจ‰เจก เจจเจพเจฒ เจฆเฉ‚เจฐ เจนเฉ‹ เจธเจ•เจฆเฉ‡ เจนเฉ‹เฅค

เจชเจฐ เจ‡เฉฑเจ• เจธเจผเจ•เจคเฉ€เจธเจผเจพเจฒเฉ€ เจกเฉˆเจธเจ•เจŸเจพเจช เจœเจพเจ‚ เจธเจฅเจพเจจเจ• เจนเจพเจฐเจกเจตเฉ‡เจ…เจฐ เจคเฉเจนเจพเจจเฉ‚เฉฐ เจฌเจฟเจนเจคเจฐ เจจเจคเฉ€เจœเฉ‡ เจชเฉเจฐเจพเจชเจค เจ•เจฐเจจ เจฆเฉ€ เจ‡เจœเจพเจœเจผเจค เจฆเจฟเฉฐเจฆเจพ เจนเฉˆ, เจ…เจคเฉ‡ เจฌเจฟเจจเจพเจ‚ เจ•เจฟเจธเฉ‡ เจšเจพเจฒ เจฆเฉ‡เฅค

เจนเจตเจพเจฒเฉ‡

เจธเจฐเฉ‹เจค: www.habr.com

เจ‡เฉฑเจ• เจŸเจฟเฉฑเจชเจฃเฉ€ เจœเฉ‹เฉœเฉ‹