Pull to refresh

Comments 11

На первой картинке мы видим питона, который проглатывает кота… Да и вообще вся статья о том, как кортить питона котиками :)
Критерий котиков для определения качества работы нейросети. Как только нейросеть достигнет того уровня прогресса, который позволит безошибочно определять котиков на фото, она будет признана совершенной.
Коты оказались интересными объектами для проверки нейросети. Почему-то на них она сильно ошибается. Но, если честно, скорее всего ошибается и на других объектах, просто кот оказался ближе остальных )
Macbook Air 2017, max ~20 fps, avg 14
image
Код адаптирован под Macbook (камеру) ниже.

import cv2
import numpy as np
import time
from time import sleep
import datetime as dt

cap = cv2.VideoCapture(0)

prototxt = 'models/solver.prototxt'
model = 'models/squeezenet_v1.1.caffemodel'
labels = 'models/synset_words.txt'

rows = open(labels).read().strip().split("\n")
classes = [r[r.find(" ") + 1:].split(",")[0] for r in rows]

# 
net = cv2.dnn.readNetFromCaffe(prototxt, model)

# reset FPS meter
t0 = time.time()

while(True):

    # take each frame
    _, frame = cap.read()
    hsv = cv2.cvtColor(frame, cv2.COLOR_BGR2HSV)

    # only for the colors:
    lower_blue = np.array([0,0,0])
    upper_blue = np.array([255,255,255])

    # threshold the HSV image to get only blue colors
    mask = cv2.inRange(hsv, lower_blue, upper_blue)

    # putting frame into blob
    res = cv2.bitwise_and(frame,frame, mask= mask)
    blob = cv2.dnn.blobFromImage(res, 1, (224, 224), (104, 117, 124))

    # measuring the FPS 
    FPS = 1/(time.time() - t0)
    t0 = time.time()

    # trying to find the object
    net.setInput(blob)
    preds = net.forward()
    preds = preds.reshape((1, len(classes)))
    idxs = int(np.argsort(preds[0])[::-1][:1])

    # creating text for label
    text = "Label: {}, p = {:.2f}%, fps = {:.2f}".format(classes[idxs], preds[0][idxs] * 100, FPS)
    # putting text on frame
    cv2.putText(res, text, (5, 25), cv2.FONT_HERSHEY_SIMPLEX, 0.7, (0, 0, 255), 2)

    # prewiev
    cv2.imshow('res',res)

    # saving results 1-image for ~2.5 secconds
    # fname = 'pic_' + dt.datetime.now().strftime('%Y-%m-%d_%H-%M-%S') + '.jpg'
    # cv2.imwrite(fname, res)

    # exit from frame capturing
    k = cv2.waitKey(5) & 0xFF
    if k == 27:
        break

cv2.destroyAllWindows()


Спасибо, обладатели Macbook точно оценят!
Кот на белом фоне. Постоянный белый фон на разных изображениях вероятнее всего — снег. На фоне снега гораздо вероятнее увидеть собаку чем кота, а еще вероятнее северную ездовую собаку. Все очень логично, хотя и не совсем верно)
Да, аргумент резонный. Кстати, Imagenet, на котором была обучена описываемая сеть, лежит в открытом доступе. Можно посмотреть исходные изображения здесь: image-net.org/synset?wnid=n02084071#
Лучше сделать распознавание объектов(именно объектов) а после определение их класса.
Работает прикольней, визуализирует интересней.



Данные о движении объектов можно записывать в базу.
Например перемещение котиков по комнате.
Добрый день! Идея статьи была в оценке качества классификации на нейронке с широким набором классов. Да, можно поставить SSD детектор на Raspberry, например MobileNet SSD (на примере с картинки, похоже, именно оно и есть). С рамочками изображение гораздо информативнее, плюс детектируются сразу несколько объектов в кадре. Но, надо заметить, что классов значительно меньше (в районе 20). Работает такой детектор также ощутимо медленнее. На CPU RPI B+ будет примерно 0,5...1 FPS. На PRI B+ с Movidius NCS в USB слоте получается 4 с небольшим FPS.
4 FPS… это конечно, очень печалит. можете код поправить, чтобы, raspberry просто выдавала в сеть поток, а более мощное железо использовало магию? у меня есть проект www.youtube.com/watch?v=Ia-2RAGq-mc, где можно поездить. построен на базу rpi-webcam interface. было бы интересно прикрутить к нему распознавание объектов.
кстати, для raspberry есть камера день/ночь c автоматическим переключением. пробовал, неплоха — ru.aliexpress.com/item/32845421674.html
Sign up to leave a comment.

Articles