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

Поиск по сайту

Showing results for tags 'python'.



More search options

  • Search By Tags

    Введите теги через запятую.
  • Search By Author

Тип содержимого


Категории и разделы

  • Пакет OpenCV
    • OpenCV
    • Новости
    • Вопросы взаимодействия OpenCV + GDI, GDI+
  • Дополненная реальность (ARToolkit и др.)
    • ARToolkit
  • Нейросети
    • Вопросы по нейросетям и ИИ
  • Общие вопросы
    • Обсуждение общих вопросов
  • Другое

Найдено 16 результатов

  1. Здравствуйте , подскажите как добавить координаты на линии сгибов контура отмеченные желтыми стрелками, что бы в дальнейшем измерять евклидово расстояние между координатами Пока только получилось найти экстремальные точки
  2. помогите пожалуйста с выводом информации над контуром рамки, как отобразить размер рамки, если известно что размер товара 670 пикселей, длина физ 4,1 мм, и как провести центр оси на объект? opencv версии 4.7.0.68, отредактируйте код. ажение текста над рамкой Задать вопрос спросил Cегодня Изменено сегодня Просмотрено 15 раз -1 помогите пожалуйста с выводом информации над контуром рамки, как отобразить размер рамки, если известно что размер товара 670 пикселей, длина физ 4,1 мм, и как провести центр оси на объект? opencv версии 4.7.0.68, отредактируйте код. import numpy as np import cv2 cap = cv2.VideoCapture ( 1 ) kernel = np.ones ( (2 , 2) , np.uint8 ) while (True): # Capture frame-by-frame ret , frame = cap.read () # Our operations on the frame come here gray = cv2.cvtColor ( frame , cv2.COLOR_BGR2GRAY ) gray = cv2.GaussianBlur ( gray , (7 , 7) , 0 ) gray = cv2.medianBlur ( gray , 5 ) # to remove salt and paper noise # to binary ret , thresh = cv2.threshold ( gray , 128 , 128 , 128 ) # to detect white objects # to get outer boundery only thresh = cv2.morphologyEx ( thresh , cv2.MORPH_GRADIENT , kernel ) # to strength week pixels thresh = cv2.dilate ( thresh , kernel , iterations = 1 ) im2 = contours , hierarchy = cv2.findContours ( thresh , cv2.RETR_EXTERNAL , cv2.CHAIN_APPROX_SIMPLE ) if len ( contours ) > 0: cv2.drawContours ( frame , contours , -1 , (0 , 255 , 0) , 3 ) # find the biggest countour (c) by the area c = max ( contours , key = cv2.contourArea ) x , y , w , h = cv2.boundingRect ( c ) # draw the biggest contour (c) in green cv2.rectangle ( frame , (x , y) , (x + w , y + h) , (255 , 0 , 0) , 2 ) # Display the resulting frame cv2.imshow ( 'frame' , frame ) if cv2.waitKey ( 27 ) & 0xFF == ord ( 'q' ): break # When everything done, release the capture cap.release () cv2.destroyAllWindows ()
  3. С помощью функции cv::filter2D() нужно создать фильтр, который находит в изображении только прямые, наклоненные под углом 60 градусов. Примените его к достаточно интересной сцене и выведите результат car = cv2.imread("car.jpg") kernel = np.ones((3,3)) #cv2.filter2D(src, ddepth, kernel[, dst[, anchor[, delta[, borderType]]]]) DST=cv2.filter2D(car, 14, kernel) cv2.imshow("DST",DST) cv2.waitKey(0) cv2.destroyAllWindows() Я немного не осилил documentation и до меня не дошло, как задать именно 60 градусов в данной функции. Буду рад, если кто-нибудь поможет с реализацией и объяснит,как работает якорь в данной функции.
  4. Здравствуйте. Меня зовут Сергей. Я использую камеры HIWATCH DS-T101 подключенные к регистратору HIWATCH DS-104. У меня следующий вопрос: на данный момент я экспериментирую с компьютерным зрением . Программу пишу на python используя библиотеку opencv. В интернете я нашел много информации по получению видео потока с IP камер, к примеру: #receiving video from IP camera import cv2######################ip camers stream = cv2.VideoCapture('access protocol://login_cam:password_cam@IP') while True: r, f = stream.read() cv2.imshow('IP Camera stream',f) if cv2.waitKey(1) & 0xFF == ord('q'): break cv2.destroyAllWindows() Как мне сделать то же самое но с регистратором ?
  5. Я сделал простенькую нейросеть для анализа временных рядов. Вот ее структура: Однако в процессе обучения такая ситуация: На вход сети подаю 4 набора по 100 значений в батче, 1 графика разложенного по фурье на 4 На обучающий выход подаю следующее после 100 значение графика. Вот сами графики, фиолетовый-оригинал, остальное-то что заливаю в сеть А вот и сама инициализация сети: Подскажите пожалуйста, я только начинаю заниматься этим направлением и не могу понять причину.
  6. Здравствуйте. Есть вот такая картинка: Необходимо определить область каждой клетки, отделить ее от соседней, обвести контуром. Некоторые клетки находятся в процессе деления, их необходимо выделить особенно (другим цветом). Также надо посчитать количество клеток. Каждая клетка должна превратится в некий объект для дальнейшего анализа. Вот такая задача сегментации. Пытаюсь решать ее с помощью opencv и python. В opencv я совсем новичок, поэтому для начала попробовал алгоритм из документации для сегментации монет: https://docs.opencv.org/3.3.1/d3/db4/tutorial_py_watershed.html Но для моей картинки это не подходит, контуры плохо выделяются, получается каша. Видимо это из-за того что внутренности клетки примерно одно цвета с фоном. Пробовал играться с параметрами, но безуспешно. Добился вот такой картинки: На этом этапе и застрял. Сомневаюсь что я двигаюсь в правильном направлении. Мой вопрос: 1. Какой алгоритм подошел бы мне? 2. С чего начинать? 3. Что почитать на этот счет? Заранее благодарю.
  7. Доброго времени суток.Помоги написать программу на Питоне 3.6, либо на ++.Которая бы: детектировала лицо (сделано),далее находила AU's (ЕД, Пол Экман),на основе этих AU'sов предполагала эмоцию.На счет кода почти неважно чей он будет (e.c, copypast github) и по какой концепции будет реализован, главное чтобы можно было разобраться с распознаванием AU'sов.Есть пару проектов с гита по теме, но у меня они плюются ошибками:) Дедлайн по теме 15 января.
  8. Добрый день! Есть обычное трафик видео. Задача состоит в том чтобы на выходе получить сжатое видео в котором объекты накладываются большим количеством на статический задний фон. Чтобы накладывать объекты большим количеством надо каждый объект (его координаты и значения пикселей) записывать в отдельный массив, либо создавать маски numpy для каждого, и затем уже накладывать. Пытаюсь через контуры, фильтрую изображение, получаю белые блобы, нахожу контуры, но не понимаю как данные каждого контура записывать в отельные массивы. Вот кусочек кода начиная после нахождения контуров: # Находим координаты контура mask = np.zeros(thresh.shape,np.uint8) cont2 = cv2.drawContours(mask,contours,0,255,-1) pixelpoints = np.transpose(np.nonzero(mask)) # Находим значения пикселей for k in range(0,(len(pixelpoints))): a = (frame[pixelpoints[k][0]][pixelpoints[k][1]]) pix_list.append(a)
  9. День добрый. Возникло желание прикрутить к caffe Jaccard index: Jaccard Тренирую сеть для задачи семантической сегментации, используя датасет с 5 классами. Непременно нужно прикрутить jaccard в python layer. Для этих целей я переделал код, который реализует dice loss: https://github.com/NVIDIA/DIGITS/tree/digits-5.0/examples/medical-imaging Получается, что я не совсем понимаю как устроены блобы в Caffe. Есть подозрение, что необходимо по-другому передавать axis, при суммировании всех предсказаний и масок: def forward(self, bottom, top): smooth = 1e-12 label = bottom[1].data[:,0,:,:] # compute prediction prediction = np.argmax(bottom[0].data, axis=1) # area of predicted contour a_p = np.sum(prediction, axis=self.sum_axes) # area of contour in label a_l = np.sum(label, axis=self.sum_axes) # area of intersection a_pl = np.sum(prediction * label, axis=self.sum_axes) # dice coefficient dice_coeff = np.mean((2.*a_pl+smooth)/(a_p + a_l+smooth)) top[0].data[...] = dice_coeff Получилась следующая реализация: import random import numpy as np import caffe import math class Jaccard(caffe.Layer): """ A layer that calculates the Jaccard coefficient """ def setup(self, bottom, top): if len(bottom) != 2: raise Exception("Need two inputs to compute Jaccard coefficient.") # compute sum over all axes but the batch and channel axes self.sum_axes = tuple(range(1, bottom[0].data.ndim - 1)) def reshape(self, bottom, top): # check input dimensions match if bottom[0].count != 2*bottom[1].count: raise Exception("Prediction must have twice the number of elements of the input.") # loss output is scalar top[0].reshape(1) def forward(self, bottom, top): smooth = 1e-12 label = bottom[1].data[:,0,:,:] # compute prediction prediction = np.argmax(bottom[0].data, axis=1) # area of predicted contour a_p = np.sum(prediction, axis=self.sum_axes) # area of contour in label a_l = np.sum(label, axis=self.sum_axes) # area of intersection a_pl = np.sum(prediction * label, axis=self.sum_axes) # jaccard coef jaccard_coef = np.mean((a_pl+smooth) / (a_p + a_l - a_pl + smooth)) jaccard_coef=0 top[0].data[...] = jaccard_coef def backward(self, top, propagate_down, bottom): if propagate_down[1]: raise Exception("label not diff") elif propagate_down[0]: #crossentropy loss_crossentropy = 0 for i in range(len(prediction)): loss_crossentropy = loss_crossentropy - prediction[i] * (label[i] - (prediction[i] >= 0)) - math.log(1 + math.exp(prediction[i] - 2 * prediction[i] * (prediction[i] >= 0))) bottom[0].diff[...] = -(math.log(jaccard_coef) + loss_crossentropy) else: raise Exception("no diff") Код ошибки error code 1. Если установить кол-во классов равное 2 и использовать код dice loss из вышеприведенной ссылки, все прекрасно заходит. Ошибка в индексах. Есть какие-нибудь соображения?
  10. Установка opencv на python

    Что делать если после установки opencv на python, при наборе а командной строке import cv2 возникает ошибка? При это если набирать в idle ошибки нет.
  11. Работа с float изображением

    День добрый. Ситуация поставила меня в тупик: # имеем изображение cv2.LUT(img_3ch,label_colours,result) result = result.astype(float)/255 #теперь, чтобы работать с изображением его необходимо перевести в int result_int = result.astype(int) #в конечном итоге, какими бы преобразованиями я не пользовался, np заполняем массив нулями result_int = result.astype(np.int64) #конечной целью служит выделить контур на изображении gray_image = cv2.cvtColor(result_int, cv2.COLOR_BGR2GRAY) ret, thresh = cv2.threshold(gray_image, 127, 255, 0) im2, contours, hierarchy = cv2.findContours(thresh, cv2.RETR_TREE, cv2.CHAIN_APPROX_SIMPLE)
  12. Реализация функции с python на с++

    Добрый день ! Задача стоит реализовать замену лиц, столкнулся с проблемой переноса цвета кожи и бликов. Нашел данную статью тут , исходники. Пишу на c++, к сожалению с python не работал ни разу, поэтому сложно переносить код на с++. На данный момент мне нужно только функция "correct_colours" вот она на python : def correct_colours(im1, im2, landmarks1): print RIGHT_EYE_POINTS; a1 = landmarks1[LEFT_EYE_POINTS]; blur_amount = COLOUR_CORRECT_BLUR_FRAC * numpy.linalg.norm( numpy.mean(landmarks1[LEFT_EYE_POINTS], axis=0) - numpy.mean(landmarks1[RIGHT_EYE_POINTS], axis=0)) blur_amount = int(blur_amount) if blur_amount % 2 == 0: blur_amount += 1 im1_blur = cv2.GaussianBlur(im1, (blur_amount, blur_amount), 0) im2_blur = cv2.GaussianBlur(im2, (blur_amount, blur_amount), 0) cv2.imwrite('im1_blur.jpg', im1_blur) cv2.imwrite('im2_blur.jpg', im2_blur) # Avoid divide-by-zero errors. im2_blur += (128 * (im2_blur <= 1.0)).astype(im2_blur.dtype) return (im2.astype(numpy.float64) * im1_blur.astype(numpy.float64) / im2_blur.astype(numpy.float64)) Вот как я ее реализовал на с++: void correct_colours(Mat &im1,Mat &im2,vector<Point2f> points2) { arma::mat leftEye(EYE_POINTS_COUNT,2); for(int i = 0; i < EYE_POINTS_COUNT; i++) { leftEye(i,0) = (double)points2[LEFT_EYE_POINTS].x; leftEye(i,1) = (double)points2[LEFT_EYE_POINTS].y; } arma::mat rightEye(EYE_POINTS_COUNT,2); for(int i = 0; i < EYE_POINTS_COUNT; i++) { rightEye(i,0) = (double)points2[RIGHT_EYE_POINTS].x; rightEye(i,1) = (double)points2[RIGHT_EYE_POINTS].y; } arma::mat B = arma::mean(leftEye,0); arma::mat C = arma::mean(rightEye,0); arma::mat D = C-B; int A = COLOUR_CORRECT_BLUR_FRAC*arma::norm(D); if (A % 2 == 0) { A += 1; } cv::Mat im1_blur; cv::Mat im2_blur; cv::Size size(A,A); cv::GaussianBlur(im1, im1_blur,size, 0); cv::GaussianBlur(im2, im2_blur,size, 0); //imshow("im1_blur", im1_blur); //imshow("im2_blur", im2_blur); Mat rezult = im2_blur.clone(); uchar *p1,*p2,*p3,*p4; for(int row = 0; row < im2_blur.rows; ++row) { p1 = im1_blur.ptr(row); p2 = im2_blur.ptr(row); p3 = im2.ptr(row); p4 = rezult.ptr(row); for(int col = 0; col < im2_blur.cols; ++col) { if( (*p2) <= 1 ) { *p2 = (*p2)+128; } (*p4) = (*p3) * (*p1) / (*p2); } } imshow("rez", rezult); Но полученный результат на с++ не такой какой должен быть. Подскажите пожалуйста, что я делаю не так ? Думаю проблема иденну в последних двух строчках кода на python : im2_blur += (128 * (im2_blur <= 1.0)).astype(im2_blur.dtype) return (im2.astype(numpy.float64) * im1_blur.astype(numpy.float64) / im2_blur.astype(numpy.float64)) Но 3 день не могу сообразить что не так.
  13. Наткнулся на симпатичную либу для отображения разных данных: http://www.pyqtgraph.org/
  14. В компанию "Ситроникс" (sitronics-cams.com) требуется программист С/С++ для разработки приложений систем машинного зрения. Требования: - хорошее знание С/С++, openCV для windows или linux систем. - опыт использования любой системы контроля версий - примеры кода для ознакомления Плюсом будут: - знание Python, Java, matlab - опыт самостоятельной разработки алгоритмов машинного зрения Условия: - офис рядом с м. Петровско-Разумовская - полное соблюдение ТК РФ Компенсация обсуждается индивидуально с каждым кандидатом..
  15. Сайт проекта мозга мухи дрозофилы на GitHub. https://neurokernel.github.io/
  16. SURF в cv2

    Как поставить cv2 для питона так, чтобы в нем были feature-detector-ы (SURF, FAST и т.д.). Ставлю на debian sid, >>> import cv2 >>> cv2.__version__ '2.4.9.1' >>> surf = cv2.SURF Traceback (most recent call last): File "<stdin>", line 1, in <module> AttributeError: 'module' object has no attribute 'SURF'
×