Простая программа для просмотра вебкамеры на С++
Unit1.cpp
//————————————————————————— #include #include //Подлючаем библиотеку VFW (Video for Windows) HWND MyWebCam; //Подключаем дискриптор форточек (окон) #pragma hdrstop #include «Unit1.h» //————————————————————————— #pragma package(smart_init) #pragma resource «*.dfm» TForm1 *Form1; //————————————————————————— __fastcall TForm1::TForm1(TComponent* Owner) : TForm(Owner) < >//————————————————————————— void __fastcall TForm1::Button1Click(TObject *Sender) < MyWebCam=capCreateCaptureWindowA(«Name My WEB Cam»,WS_CHILD | WS_VISIBLE | WS_CAPTION, 0,0,650,480,Handle,0); capDriverConnect (MyWebCam,0); //Подключаемся capPreviewRate (MyWebCam,60); //Выставили частоту кадров capPreview (MyWebCam,True); //Смотрим >//—————————————————————————
Unit1.h
Python + Web camera = Love
//————————————————————————— #ifndef Unit1H #define Unit1H //————————————————————————— #include #include #include #include //————————————————————————— class TForm1 : public TForm < __published: // IDE-managed Components TButton *Button1; void __fastcall Button1Click(TObject *Sender); private: // User declarations public: // User declarations __fastcall TForm1(TComponent* Owner); >; //————————————————————————— extern PACKAGE TForm1 *Form1; //————————————————————————— #endif
- C++ Builder
- Button
- Form
- Windows Application
- RAD Studio 10
- capCreateCaptureWindow
- capDriverConnect
- capPreviewRate
- capPreview
- HWND
- Вы здесь:
- Главная
- Уроки и примеры по программированию С++
- Уроки и примеры программирования на C++ в Embarcadero RAD Studio 10 | C++ Builder 10
- Примеры с видео
- Простая программа для просмотра вебкамеры на С++
Меню
- Главная
- Уроки и примеры по программированию С++
- Уроки и примеры программирование на C++ в Builder 6
- Уроки и примеры программирования на C++ в Embarcadero RAD Studio 10 | C++ Builder 10
- Примеры FireMonkey
- Примеры с аудио
- Примеры с видео
- Примеры Microsoft Excel
- Примеры Microsoft Word
- Примеры часов и таймеров
- Примеры с архивами
- Настройка C++ Builder 6
- Настройка Embarcadero RAD Studio 10 | C++ Builder 10
- Настройка Qt
Источник: cpptutor.ru
Пишем программу для камеры хранения с функцией распознавания лица
Распознавания лиц уже захватило весь мир. Во всех крупных странах уже пользуются этой полезной фишкой. Почему не сделать жизнь людей еще удобнее и не встроить распознавание лиц в камеру хранения?
Для этого нам потребуется
- скачанная нейронная сеть facenet
- компьютер
- keras
- opencv
from keras.models import load_model import numpy as np from keras.utils import plot_model import math import glob import os import cv2 import serial
Затем загружаем сетку и указываем путь для детектора лиц model_path = ‘facenet_keras.h5’ model = load_model(model_path) cascade_path = ‘haarcascade_frontalface_alt2.xml’
Функция, которая форматирует картинку и прогоняет ее через нейросеть
def calc_embs(imgs, margin, batch_size): fram1e = cv2.resize(imgs,(160,160)) ofg2 = np.array(fram1e) aligned_images = prewhiten(ofg2) pd = [] x_train = np.array([aligned_images]) embs1 = model.predict_on_batch(x_train) embs1.reshape(1,-1) embs = l2_normalize(np.concatenate(embs1)) return embs
Функция, которая при нажатии кнопки в первый раз сохраняет лицо человека, прошедшее через нейросеть, а во второй раз уже, прогнав через сеть новое лицо, сравнивает его с сохраненным
def reco_face(frame, i): #frame = cv2.cvtColor(frame, cv2.COLOR_BGR2RGB) img = frame #i = 0 h = 0 v = 0 u = 0 name_out = ‘я тебя незнаю’ #print(ofg.shape) #img = search_face(img, frame, face_cascade) #frame = cv2.cvtColor(frame, cv2.COLOR_BGR2RGB) faces = face_cascade.detectMultiScale(frame, 1.3, 5) print(faces) if faces == (): v = 5 # Loop through all the faces detected and determine whether or not they are in the database identities = [] for (x, y, w, h) in faces: x1 = x-PADDING y1 = y-PADDING x2 = x+w+PADDING y2 = y+h+PADDING frame = cv2.rectangle(frame,(x1, y1),(x2, y2),(255,0,0),2) height, width, channels = frame.shape # The padding is necessary since the OpenCV face detector creates the bounding box around the face and not the head part_image = frame[max(0, y1):min(height, y2), max(0, x1):min(width, x2)] if i == 1: pre[0:] = calc_embs(part_image,10,1) while u!=1: u = ser.write( b’P’) u=0 else: ofg = calc_embs(part_image,10,1) #print(ofg) #i = i + 1 if i > 1: for m in pre: dot = np.sum(np.multiply(m, ofg), axis=0) norm = np.linalg.norm(m, axis=0) * np.linalg.norm(ofg, axis=0) similarity = dot / norm dist1 = np.arccos(similarity) / math.pi if dist1
Ну и мэйн. Все начинается с ардуино, когда через уарт подается буква B, что означает что кнопка нажата. Далее на ардуино подается команда для открытия ящика и запускается функция по распознанию и сохранению лица. Затем, если с ардуино опять пришла команда о нажатии кнопки, мы опять запускаем функцию по распознанию и если лица сошлись, то открываем ящик.
ser = serial.Serial(‘COM3’, 9600, write_timeout=1, timeout=0.1) print(ser.name) # check which port was really used ##sio = io.TextIOWrapper(io.BufferedRWPair(ser, ser)) #ser.close() cap = cv2.VideoCapture(0) zz = 0 while(True): # Capture frame-by-frame ret, frame = cap.read() frame1 = search_face(frame) cv2.imshow(‘ffff’, frame1) ff=ser.read(1) if(ff == b’B’): print(«press_button») ff = b’u’ zz = zz + 1 mmm, f = reco_face(frame, zz) if f == 5: zz = 0 print(mmm) if mmm == 1: print(«otkrivaio») while u!=1: u = ser.write( b’P’) u=0 h = 0 zz = 0 if cv2.waitKey(33) == ord(‘q’): break cap.release() cv2.destroyAllWindows()
Как отличить лицо человека от фотографии лица человека — я еще пока не думал.
Источник: habr.com
Трансляция видео из системы видеонаблюдения в Raspberry Pi с помощью OpenCV
В настоящее время системы видеонаблюдения с каждым годом получают все большее распространения. Но персоналу, наблюдающему изображение с множества камер на мониторе, часто вручную бывает достаточно трудно отследить все действия, которые необходимо отслеживать. В связи с этим в последнее время все большее распространение получают умные системы видеонаблюдения, которые автоматически распознают определенные действия (взят товар с полки, человек бежит и т. п.) и подсвечивают их на изображении. Подобную умную систему видеонаблюдения мы и постараемся разработать в данном проекте на основе платы Raspberry Pi.
В этой статье мы рассмотрим как транслировать видеопоток с видеорегистратора (в нашем случае видеорегистратора Hikvision) с помощью протокола RTSP (real time streaming protocol – потоковый протокол реального времени) на плату Raspberry Pi с использованием Python и OpenCV. И как только у нас получится это, мы сможем использовать все потрясающие возможности библиотеки OpenCV на этом видеопотоке, например, обнаружение определенного объекта, считывание номерного знака транспортного средства, распознавание лиц и многое другое.
Для данного проекта его автор (ссылка на оригинал есть в конце статьи) использовал 4 канала видеорегистратора (DVR) Hikvision, входящего в состав системы видеонаблюдения (CCTV), установленного на здании. Мы будем транслировать все 4 экрана (канала) камеры на плату Raspberry Pi и отображать их на 5-дюймовом сенсорном дисплее, где пользователь сможет переключаться между каждым каналом по мере необходимости. В дальнейшем на нашем сайте мы опубликуем еще серию статей в продолжение данного проекта, где задействуем при обработке видеопотока с видеорегистратора ряд возможностей библиотеки OpenCV: обнаружение движения, оповещение о видео-сигналах, отслеживание людей и т. д.
Подготовка видеорегистратора к трансляции видеопотока по протоколу RTSP
Прежде чем приступать к написанию программы на python для Raspberry Pi необходимо убедиться в том поддерживает ли видеорегистратор (DVR) протокол RTSP (потоковый протокол реального времени) и как его настроить для работы по данному протоколу. Для каждого видеорегистратора эта процедура настройки будет отличаться, но если вы освоите ее хотя бы для одной модели видеорегистратора, то освоение ее на других моделях видеорегистраторах не должно вызвать у вас серьезных проблем.
Первым делом в этом процессе мы должны узнать имя пользователя (username) и пароль (password) видеорегистратора, с которыми он выходит в сеть интернет. В данной статье мы будем рассматривать трансляцию видеопотока (streaming) по протоколу RTSP только в локальной сети – но если у вас есть статический IP, то вы можете настроить перенаправление порта (port forwarding) в вашем роутере и осуществлять трансляцию видеопотока в другие сети.
Для подготовки видеорегистратора к трансляции видеопотока по протоколу RTSP выполните следующую последовательность шагов.
Шаг 1. Определите IP адрес вашего видеорегистратора. Если видеорегистратор подключен к сети Интернет, то ему должен быть назначен его собственный IP адрес. Вы можете узнать этот IP адрес либо в настройках роутера (если он к нему подключен), либо непосредственно с экрана видеорегистратора (будем предполагать что у нас к видеорегистратору подключен монитор). IP адрес нашего роутера — http://192.168.11.110/ (изменен для статьи в целях безопасности).
Шаг 2. Откройте любой веб-браузер и введите в нем этот IP адрес, нажмите enter. После этого вас перебросит на страницу входа в панель настроек вашего видеорегистратора. На ней вы должны ввести имя пользователя (username) и пароль (password) вашего видеорегистратора. По умолчанию имя пользователя должно быть admin, но пароль для каждой модели видеорегистратора может отличаться – вам его необходимо знать.
Шаг 3. После успешного входа (логина) в панель настроек видеорегистратора посмотрите в них номер порта RTSP вашего видеорегистратора, по умолчанию он должен быть равен 554, но иногда он может отличаться. Также вы должны посмотреть имеется ли возможность включения протокола RTSP. На этом этапе вам необходимо уделить некоторое количество времени на то, чтобы разобраться с этими настройками для вашего видеорегистратора – для разных моделей видеорегистраторов эти настройки будут отличаться.
Шаг 4. Подготовка вашей ссылки для работы с протоколом RTSP, в общем случае эта ссылка имеет следующий формат:
Источник: microkontroller.ru