Вдохновленный великой работой Акшая Бахадура, в этой статье вы увидите несколько проектов, применяющих компьютерное зрение и глубокое обучение, с реализациями и деталями, чтобы вы могли воспроизвести их на своем компьютере.

Сообщество LinkedIn Data Science

Акшай Бахадур - один из прекрасных примеров, которые подало сообщество Data Science в LinkedIn. Есть отличные люди на других платформах, таких как Quora, StackOverflow, Youtube, здесь и на многих форумах и платформах, помогая друг другу во многих областях науки, философии, математики, языка и, конечно же, Data Science и ее компаньонов.

Но я думаю, что за последние ~ 3 года сообщество LinkedIn преуспело в обмене отличным контентом в области Data Science, от обмена опытом до подробных сообщений о том, как использовать машинное обучение или глубокое обучение в реальном мире. Я всегда рекомендую людям, входящим в эту область, быть частью сообщества, и LinkedIn в лучшем случае, вы всегда найдете меня там :).

Начиная с глубокого обучения и компьютерного зрения

Исследования в области глубокого обучения по классификации вещей на изображениях, их обнаружению и действиям, когда они «видят» что-то, были очень важны в этом десятилетии, с потрясающими результатами, такими как превосходство в производительности на человеческом уровне при решении некоторых проблем.

В этой статье я покажу вам все публикации Акшая Бахадура в области компьютерного зрения (CV) и глубокого обучения (DL). Если вы не знакомы с какими-либо из этих терминов, вы можете узнать о них больше здесь:



« Странное введение в глубокое обучение
Есть потрясающие введения, курсы и сообщения в блогах о глубоком обучении. Но это знакомство другого типа. todatascience.com »









1. Движение рук с использованием OpenCV



Из Акшая:

Для отслеживания видео алгоритм анализирует последовательные видеокадры и выводит перемещение целей между кадрами. Существует множество алгоритмов, у каждого из которых есть свои сильные и слабые стороны. При выборе алгоритма важно учитывать предполагаемое использование. Система визуального отслеживания состоит из двух основных компонентов: представление цели и локализация, а также фильтрация и ассоциация данных.

Видео слежение - это процесс обнаружения движущегося объекта (или нескольких объектов) с течением времени с помощью камеры. Он имеет множество применений, в том числе: взаимодействие человека с компьютером, безопасность и наблюдение, видеосвязь и сжатие, дополненная реальность, управление движением, обработка медицинских изображений и редактирование видео.

Это весь код, который вам нужен для его воспроизведения:

import numpy as np
import cv2
import argparse
from collections import deque


cap=cv2.VideoCapture(0)

pts = deque(maxlen=64)

Lower_green = np.array([110,50,50])
Upper_green = np.array([130,255,255])
while True:
	ret, img=cap.read()
	hsv=cv2.cvtColor(img,cv2.COLOR_BGR2HSV)
	kernel=np.ones((5,5),np.uint8)
	mask=cv2.inRange(hsv,Lower_green,Upper_green)
	mask = cv2.erode(mask, kernel, iterations=2)
	mask=cv2.morphologyEx(mask,cv2.MORPH_OPEN,kernel)
	#mask=cv2.morphologyEx(mask,cv2.MORPH_CLOSE,kernel)
	mask = cv2.dilate(mask, kernel, iterations=1)
	res=cv2.bitwise_and(img,img,mask=mask)
	cnts,heir=cv2.findContours(mask.copy(),cv2.RETR_EXTERNAL,cv2.CHAIN_APPROX_SIMPLE)[-2:]
	center = None
 
	if len(cnts) > 0:
		c = max(cnts, key=cv2.contourArea)
		((x, y), radius) = cv2.minEnclosingCircle(c)
		M = cv2.moments(c)
		center = (int(M["m10"] / M["m00"]), int(M["m01"] / M["m00"]))
 
		if radius > 5:
			cv2.circle(img, (int(x), int(y)), int(radius),(0, 255, 255), 2)
			cv2.circle(img, center, 5, (0, 0, 255), -1)
		
	pts.appendleft(center)
	for i in xrange (1,len(pts)):
		if pts[i-1]is None or pts[i] is None:
			continue
		thick = int(np.sqrt(len(pts) / float(i + 1)) * 2.5)
		cv2.line(img, pts[i-1],pts[i],(0,0,225),thick)
		
	
	cv2.imshow("Frame", img)
	cv2.imshow("mask",mask)
	cv2.imshow("res",res)
	
	
	k=cv2.waitKey(30) & 0xFF
	if k==32:
		break
# cleanup the camera and close any open windows
cap.release()
cv2.destroyAllWindows()

Ага, 54 строки кода. Очень просто, правда? Вам нужно будет установить OpenCV на вашем компьютере, если у вас есть Mac, проверьте это:



Если у вас Ubuntu:



и если у вас Windows:



2. Обнаружение сонливости OpenCV



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

Зависимости

  1. cv2
  2. иммутилы
  3. dlib
  4. странный

Алгоритм

Каждый глаз представлен 6 (x, y) -координатами, начиная с левого угла глаза (как если бы вы смотрели на человека), а затем двигаясь по часовой стрелке вокруг глаза :.

Состояние

Он проверяет 20 последовательных кадров, и если соотношение сторон глаза меньше 0,25, генерируется предупреждение.

Отношение

Подводя итоги

3. Распознавание цифр с использованием регрессии Softmax.



Этот код помогает классифицировать разные цифры с помощью регрессии softmax. Вы можете установить Conda для python, который разрешает все зависимости для машинного обучения.

Описание

Softmax Regression (синонимы: Multinomial Logistic, Maximum Entropy Classifier или просто Multi-class Logistic Regression) - это обобщение логистической регрессии, которое мы можем использовать для классификации нескольких классов (при условии, что классы взаимоисключающие). Напротив, мы используем (стандартную) модель логистической регрессии в задачах двоичной классификации.

Реализация Python

Используемый набор данных был MNIST с изображениями размером 28 X 28, и здесь мы планируем классифицировать цифры от 0 до 9 с использованием логистической регрессии, мелкой сети и глубокой нейронной сети.

Одна из лучших частей здесь заключается в том, что он закодировал три модели с использованием Numpy, включая оптимизацию, прямое и обратное распространение и все остальное.

Для логистической регрессии:

Для мелкой нейронной сети:

И, наконец, с глубокой нейронной сетью:

Исполнение для записи через веб-камеру

Чтобы запустить код, введите python Dig-Rec.py

python Dig-Rec.py

Исполнение для показа изображений через веб-камеру

Чтобы запустить код, введите python Digit-Recognizer.py

python Digit-Recognizer.py

Признание деванагири



Этот код помогает классифицировать различные алфавиты языка хинди (деванагири) с помощью Convnets. Вы можете установить Conda для python, который разрешает все зависимости для машинного обучения.

Используемая техника

Я использовал сверточные нейронные сети. Я использую Tensorflow в качестве фреймворка и Keras API для обеспечения высокого уровня абстракции.

Архитектура

CONV2D → MAXPOOL → CONV2D → MAXPOOL → FC → Softmax → Классификация

Некоторые дополнительные моменты

  1. Вы можете использовать дополнительные сверточные слои.
  2. Добавьте регуляризацию, чтобы предотвратить переоснащение.
  3. Вы можете добавить дополнительные изображения в обучающий набор для повышения точности.

Реализация Python

Набор данных - DHCD (набор символов Devnagari) с изображениями размером 32 X 32 и использованием сверточной сети.

Чтобы запустить код, введите python Dev-Rec.py

python Dev-Rec.py

4. Распознавание лиц с помощью FaceNet



Этот код помогает в распознавании лиц с использованием сетей facenets (https://arxiv.org/pdf/1503.03832.pdf). Концепция facenets была первоначально представлена ​​в исследовательской статье. Основные концепции касались функции тройной потери для сравнения изображений разных людей. В этой концепции используется начальная сеть, взятая из источника, а файл fr_utils.py взят из deeplearning.ai для справки. Я добавил несколько собственных функций для обеспечения стабильности и лучшего обнаружения.

Требования к коду

Вы можете установить Conda для python, который разрешает все зависимости для машинного обучения, и вам понадобятся:

numpy
matplotlib
cv2
keras
dlib
h5py
scipy

Описание

Система распознавания лиц - это технология, способная идентифицировать или подтверждать личность человека по цифровому изображению или видеокадру из видеоисточника. Есть несколько методов, в которых работают системы распознавания лиц, но в целом они работают, сравнивая выбранные черты лица из данного изображения с лицами в базе данных.

Добавлены функции

  1. Обнаружение лица только тогда, когда глаза открыты. (Мера безопасности).
  2. Использование функции выравнивания лиц из dlib для эффективного прогнозирования во время потоковой передачи.

Реализация Python

  1. Используемая сеть - начальная сеть
  2. Оригинальная бумага - Facenet от Google

Процедура

  1. Если вы хотите обучить сеть, запустите Train-inception.py, однако вам не нужно этого делать, поскольку я уже обучил модель и сохранил ее как файл face-rec_Google.h5, который загружается во время выполнения.
  2. Теперь вам нужно иметь изображения в вашей базе данных. Код проверяет папку /images на это. Вы можете либо вставить туда свои изображения, либо щелкнуть по нему с помощью веб-камеры. Для этого запустите create-face.py изображения сохраняются в /incept папке. Вы должны вручную вставить их в /images folder
  3. Запустите rec-feat.py, чтобы запустить приложение.

5. Эмоджинатор



Этот код помогает вам распознавать и классифицировать разные смайлики. На данный момент мы поддерживаем только смайлы для рук.

Требования к коду

Вы можете установить Conda для python, который разрешает все зависимости для машинного обучения, и вам понадобятся:

numpy
matplotlib
cv2
keras
dlib
h5py
scipy

Описание

Смайлы - это идеограммы и смайлы, используемые в электронных сообщениях и на веб-страницах. Эмодзи существуют в разных жанрах, включая выражения лица, обычные предметы, места и типы погоды, а также животных. Они очень похожи на смайлики, но смайлики - это настоящие картинки, а не типографика.

Функциональные возможности

  1. Фильтры для обнаружения рук.
  2. CNN для обучения модели.

Реализация Python

  1. Используемая сеть - сверточная нейронная сеть

Процедура

  1. Во-первых, вам нужно создать базу данных жестов. Для этого запустите CreateGest.py. Введите название жеста, и вы увидите 2 кадра. Посмотрите на контурную рамку и поправьте руку, чтобы убедиться, что вы уловили черты своей руки. Нажмите «c», чтобы сделать снимок. Понадобится 1200 изображений одного жеста. Попробуйте немного пошевелить рукой в ​​кадре, чтобы убедиться, что ваша модель не переоснащается во время тренировки.
  2. Повторите это для всех желаемых функций.
  3. Запустите CreateCSV.py, чтобы преобразовать изображения в файл CSV.
  4. Если вы хотите обучить модель, запустите TrainEmojinator.py.
  5. Наконец, запустите Emojinator.py для тестирования вашей модели через веб-камеру.

Авторы

Акшай Бахадур и Рагхав Патнеча.

Заключительные слова

Могу только сказать, что я невероятно впечатлен этими проектами, все они вы можете запускать на своем компьютере или, что проще, на платформе Deep Cognition, если вы не хотите ничего устанавливать, и они могут работать онлайн.

Я хочу поблагодарить Акшая и его друзей за большой вклад в развитие открытого исходного кода и за все остальные, которые придут. Пробуйте, запускайте и вдохновляйтесь. Это лишь небольшой пример того, на что способны DL и CV, и вы должны превратить это во что-то, что может помочь миру стать лучше.

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

Нам нужно больше заинтересованных людей, больше курсов, больше специализаций, больше энтузиазма. Мы нуждаемся в вас :)

Спасибо, что прочитали это. Надеюсь, вы нашли здесь что-то интересное :)

Если у вас есть вопросы, просто добавьте меня в твиттер:



и LinkedIn:



Увидимся там :)

Я физик и компьютерный инженер, работаю над большими данными, наукой о данных и вычислительной космологией. Я увлекаюсь наукой, философией, программированием и наукой о данных. Прямо сейчас я работаю над наукой о данных, машинным обучением и глубоким обучением в качестве главного специалиста по данным в Oxxo. Я люблю новые задачи, работать в хорошей команде и решать интересные задачи. Я участвую в сотрудничестве с Apache Spark, помогаю в MLLib, Core и документации. Мне нравится применять свои знания и опыт в области науки, анализа данных, визуализации и обработки данных, чтобы помочь миру стать лучше.