Перейти к содержимому
Compvision.ru
cfif

caffe и real-time video

Recommended Posts

начал разбираться с caffe. разобрался с тем как распознавать объекты на изображениях. хочу перейти к распознаванию объектов на видео в реальном времени, но не пойму с какого бока к этому вопросу подходить. погуглил, на форуме поискал - не смог найти материалы(( как нужно скармливать видео натренированной модели? в параметрах коммандной строки указывается путь к картинке, а мне нужно указать видеопоток с web-камеры. Я так понимаю, что тут нужно оболочку на питоне писать? может есть уже готовые примеры? подскажите в какую степь гуглить - я в этом деле новичок))) пробовал разобраться с моделью SegNet - но в примерах у них идет обработка изображений((, а как туда видеопоток засунуть - тоже нет информации.

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

хотелось бы получить что-то похожее на это

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Начните с этого примера: https://github.com/BVLC/caffe/blob/master/examples/cpp_classification/classification.cpp там тоже изображения, но можно ведь просто подавать изображения с видео и классифицировать.

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

разобрался я с программированием python и opencv. Там у меня получилось взять видеопоток от вебкамеры. Далее я запускаю для каждого кадра анализ. Получаю результат - вот только не могу разобраться в данных, которые присылает caffe.

Если я правильно понял, то запуск анализа происходит так: 

inputs = [caffe.io.load_image(args.input_file)] - загрузка файла картинки

после чего идёт такая строка

scores = classifier.predict(inputs, not args.center_only).flatten() - сам анализ изображения

и вот теперь не могу разобраться где и в каком виде хранит результат своей работы caffe. Я так понимаю, что должен получиться массив данных. там должны быть перечислены вероятности и названия найденного объекта. Ну и, наверное, координаты квадрата, где находится этот объект.

Подскажите пожалуйста структуру этого массива или где можно про это почитать.

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Вот нашел кусок одного проекта:

import numpy as np
import caffe
import cv2
import scipy.io as sio

caffe.set_mode_gpu()
caffe.set_device(1)

model = './model/det1.prototxt'
weights = './model/det1.caffemodel'

PNet = caffe.Net(model, weights, caffe.TEST) # create net and load weights

print ("\n\n----------------------------------------")
print ("------------- Network loaded -----------")
print ("----------------------------------------\n")

img = np.float32(cv2.imread( 'F:/ImagesForTest/test1.jpg' ))
img=cv2.cvtColor(img,cv2.COLOR_BGR2RGB)

avg = np.array([127.5,127.5,127.5])
img = img - avg
img = img*0.0078125;
img = img.transpose((2,0,1)) 
img = img[None,:] # add singleton dimension

PNet.blobs['data'].reshape(1,3,img.shape[2],img.shape[3])
out = PNet.forward_all( data = img )

#sh1=PNet.blobs['conv1'].data.shape
#sh2=PNet.params['conv1'][0].data.shape
#sh3=PNet.params['conv1'][1].data.shape
#print PNet.params['PReLU1'][0].data.shape

cv2.imshow('out',out['prob1'][0][1])
cv2.waitKey()

Просто задаете какой блоб нужно прочитать ('prob1' в данном случае) и какой его слой.

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

второй день воюю с этими блобами - не выходит каменный цветок((

хочу разобраться с моделью из примеров в caffe - где нужно распознать кота на картинке (модель - bvlc_reference_caffenet).

Кота он распознает - теперь нужно его в рамку обвести.

Сделал картинку структуры этой модели

caffenet.thumb.png.c6ed724ce5057c49e343cf60d1148280.png

 

теперь нужно выяснить в какой блоб она сохраняет данные о местоположении этого кота - я прав?

вот тут я и застрял. Полез в отладчик PyCharm чтобы просмотреть что хранится в переменных - не понял((

нашел в инете код, где выводится рамка (то что мне нужно) но повторить не получилось((( и модель из этого кода в инете не нашел, чтобы покопаться в кишках основательно.

вот такой код нашел: https://github.com/jssmile/Distance_Estimation/blob/master/caffe/examples/detect.py

# Forward pass.
  detections = net.forward()['detection_out']
   
  # Parse the outputs.
  det_label = detections[0,0,:,1]
  det_conf = detections[0,0,:,2]
  det_xmin = detections[0,0,:,3]
  det_ymin = detections[0,0,:,4]
  det_xmax = detections[0,0,:,5]
  det_ymax = detections[0,0,:,6]
   
  # Get detections with confidence higher than 0.6.
  top_indices = [i for i, conf in enumerate(det_conf) if conf >= 0.6]
   
  top_conf = det_conf[top_indices]
  top_label_indices = det_label[top_indices].tolist()
  top_labels = get_labelname(labelmap, top_label_indices)
  top_xmin = det_xmin[top_indices]
  top_ymin = det_ymin[top_indices]
  top_xmax = det_xmax[top_indices]
  top_ymax = det_ymax[top_indices]
  colors = plt.cm.hsv(np.linspace(0, 1, 21)).tolist()
   
  for i in xrange(top_conf.shape[0]):
          xmin = int(round(top_xmin * image.shape[1]))

                                 ymin = int(round(top_ymin * image.shape[0]))  

                                 xmax = int(round(top_xmax * image.shape[1]))  

                                ymax = int(round(top_ymax * image.shape[0]))  

                                score = top_conf  

                               label = int(top_label_indices)  

                               label_name = top_labels      

                               if label_name == 'car':  

                                         cv2.rectangle(frame, (xmin,ymin), (xmax,ymax), (150,0,255), 2)    

тут мне непонятна строка: detections = net.forward()['detection_out']

пытаюсь вставить в свой код - выдает ошибку. Что такое detection_out? или это слой в его модели?

далее он из detections извлекает det_xmin = detections[0,0,:,3] и т.д и потом из этих данных находит координаты для выделения объекта. Не могу осилить этот пример(((

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

кажется я начинаю понимать - чтобы объект был выделен рамкой, нужно тренировать модель на изображениях с рамками. Т.е. если модель обучали на простых картинках (без рамок на объектах), то рамку я уже не смогу нарисовать - я прав? И тогда получается в модель нужно вносить изменения - нужны дополнительные данные для хранения координат рамок - так?

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Точно.

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

можете попробовать YOLO, если не брезгуете завязываться на darknet(или поискать реимплементацию), там есть секция Real-Time Detection on a Webcam

https://pjreddie.com/darknet/yolo/

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Создайте учётную запись или войдите для комментирования

Вы должны быть пользователем, чтобы оставить комментарий

Создать учётную запись

Зарегистрируйтесь для создания учётной записи. Это просто!

Зарегистрировать учётную запись

Войти

Уже зарегистрированы? Войдите здесь.

Войти сейчас


  • Сейчас на странице   0 пользователей

    Нет пользователей, просматривающих эту страницу

×