cfif 0 Report post Posted March 26, 2017 начал разбираться с caffe. разобрался с тем как распознавать объекты на изображениях. хочу перейти к распознаванию объектов на видео в реальном времени, но не пойму с какого бока к этому вопросу подходить. погуглил, на форуме поискал - не смог найти материалы(( как нужно скармливать видео натренированной модели? в параметрах коммандной строки указывается путь к картинке, а мне нужно указать видеопоток с web-камеры. Я так понимаю, что тут нужно оболочку на питоне писать? может есть уже готовые примеры? подскажите в какую степь гуглить - я в этом деле новичок))) пробовал разобраться с моделью SegNet - но в примерах у них идет обработка изображений((, а как туда видеопоток засунуть - тоже нет информации. Share this post Link to post Share on other sites
cfif 0 Report post Posted March 27, 2017 хотелось бы получить что-то похожее на это Share this post Link to post Share on other sites
Smorodov 578 Report post Posted March 27, 2017 Начните с этого примера: https://github.com/BVLC/caffe/blob/master/examples/cpp_classification/classification.cpp там тоже изображения, но можно ведь просто подавать изображения с видео и классифицировать. Share this post Link to post Share on other sites
cfif 0 Report post Posted March 27, 2017 разобрался я с программированием python и opencv. Там у меня получилось взять видеопоток от вебкамеры. Далее я запускаю для каждого кадра анализ. Получаю результат - вот только не могу разобраться в данных, которые присылает caffe. Если я правильно понял, то запуск анализа происходит так: inputs = [caffe.io.load_image(args.input_file)] - загрузка файла картинки после чего идёт такая строка scores = classifier.predict(inputs, not args.center_only).flatten() - сам анализ изображения и вот теперь не могу разобраться где и в каком виде хранит результат своей работы caffe. Я так понимаю, что должен получиться массив данных. там должны быть перечислены вероятности и названия найденного объекта. Ну и, наверное, координаты квадрата, где находится этот объект. Подскажите пожалуйста структуру этого массива или где можно про это почитать. Share this post Link to post Share on other sites
Smorodov 578 Report post Posted March 27, 2017 Вот нашел кусок одного проекта: 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' в данном случае) и какой его слой. Share this post Link to post Share on other sites
cfif 0 Report post Posted March 30, 2017 второй день воюю с этими блобами - не выходит каменный цветок(( хочу разобраться с моделью из примеров в caffe - где нужно распознать кота на картинке (модель - bvlc_reference_caffenet). Кота он распознает - теперь нужно его в рамку обвести. Сделал картинку структуры этой модели теперь нужно выяснить в какой блоб она сохраняет данные о местоположении этого кота - я прав? вот тут я и застрял. Полез в отладчик 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] и т.д и потом из этих данных находит координаты для выделения объекта. Не могу осилить этот пример((( Share this post Link to post Share on other sites
cfif 0 Report post Posted March 31, 2017 кажется я начинаю понимать - чтобы объект был выделен рамкой, нужно тренировать модель на изображениях с рамками. Т.е. если модель обучали на простых картинках (без рамок на объектах), то рамку я уже не смогу нарисовать - я прав? И тогда получается в модель нужно вносить изменения - нужны дополнительные данные для хранения координат рамок - так? Share this post Link to post Share on other sites
Smorodov 578 Report post Posted March 31, 2017 Точно. Share this post Link to post Share on other sites
mrgloom 242 Report post Posted April 10, 2017 можете попробовать YOLO, если не брезгуете завязываться на darknet(или поискать реимплементацию), там есть секция Real-Time Detection on a Webcam https://pjreddie.com/darknet/yolo/ Share this post Link to post Share on other sites