Программка для видео наблюдения
Хочу написать программу для видео наблюдения за своим двором.
У меня есть веб камера (конечно качество снимков оставляет желать лучшего) и я хочу ее как ни будь задействовать. Функции у программы очень простые: снимать и фиксировать отдельные снимки (делать скриншоты). Интерфейс программы предельно прост: слева набор снимков, которые можно прокручивать (по вертикали), в центре большое окно для вывода видео, а под ним кнопка для фиксации отдельных снимков, при нажатии на которую делается скриншот и добавляется в набор снимков слева.
Вопрос следующий:
1) как сделать прокручивающийся диалог с набором снимков, при этом должна быть возможность выбора отдельного снимка.
2) Как сделать захват с веб камеры? (такой же (или похожий) как в MovieMaker )
3) Как лучше хранить сделанные снимки, просто в открытом виде на диске или их можно как то в базу данных засунуть (ну например если я буду снимать людей, чтобы можно было дать им описание, а потом по названию или описанию конкретного человека вызывалась его фотка).
Вот в принципе и все, может, кто ни будь, знает где можно почить на данную тематику?
Заранее всем спасибо!
Привет всем!
Хочу написать программу для видео наблюдения за своим двором.
У меня есть веб камера (конечно качество снимков оставляет желать лучшего) и я хочу ее как ни будь задействовать. Функции у программы очень простые: снимать и фиксировать отдельные снимки (делать скриншоты). Интерфейс программы предельно прост: слева набор снимков, которые можно прокручивать (по вертикали), в центре большое окно для вывода видео, а под ним кнопка для фиксации отдельных снимков, при нажатии на которую делается скриншот и добавляется в набор снимков слева.
Вопрос следующий:
1) как сделать прокручивающийся диалог с набором снимков, при этом должна быть возможность выбора отдельного снимка.
2) Как сделать захват с веб камеры? (такой же (или похожий) как в MovieMaker )
3) Как лучше хранить сделанные снимки, просто в открытом виде на диске или их можно как то в базу данных засунуть (ну например если я буду снимать людей, чтобы можно было дать им описание, а потом по названию или описанию конкретного человека вызывалась его фотка).
Вот в принципе и все, может, кто ни будь, знает где можно почить на данную тематику?
Заранее всем спасибо!
Список со снимками, думаю должен иметь формат .html, может кто занимался таким форматом подскажет...
Список со снимками, думаю должен иметь формат .html, может кто занимался таким форматом подскажет...
Ага=))))))))))))):D :D :D :D :D
Прям в точку.
Список со снимками, думаю должен иметь формат .html, может кто занимался таким форматом подскажет...
да, согласен, HTML тоже можно и очень даже просто, но мне хотелось бы разобраться с прокруткой диалога и элементов управления на нем, может когда ни будь пригодится
да, согласен, HTML тоже можно и очень даже просто, но мне хотелось бы разобраться с прокруткой диалога и элементов управления на нем, может когда ни будь пригодится
...Вот ...Начиналось нужна програмка для видеонаблюдения......
А теперь хотелось бы разобраться....
Если нужна то делай разбирайся ищи информацию по теме, а если рабоюраться с прокруткой диалога да заодним программирование подтянуть выучить нормально язык С++, освоить среду Visual Studio, научиться пограммировать для сетевых протоколов.... ты так 10 лет будешь енту программу писать. Good luck!
1) как сделать прокручивающийся диалог с набором снимков, при этом должна быть возможность выбора отдельного снимка.
Оно надо ?? Правильно разложенные снимки по каталогам с датами - проще и удобнее
2) Как сделать захват с веб камеры? (такой же (или похожий) как в MovieMaker )
Зачем ?? Делай Photo Capture каждые 3 секунды например, этого вполне достаточно для наблюдения.
Я так делал на http://bike.novsu.ac.ru/
char szDeviceVersion[80];
int cameranum=0;
hCapWnd=capCreateCaptureWindow("My Capture Window",
WS_CHILD|WS_VISIBLE,0,0,640,480,
Form1->Handle, cameranum);
bool result=capDriverConnect(hCapWnd,1);
if (!result) {ShowMessage("Can not connect to video device");}
BITMAPINFO binfo;
capGetVideoFormat(hCapWnd,&binfo,sizeof(BITMAPINFO));
binfo.bmiHeader.biWidth=640;
binfo.bmiHeader.biHeight=480;
capSetVideoFormat(hCapWnd,&binfo,sizeof(BITMAPINFO));
CAPTUREPARMS CapParams;
capCaptureGetSetup(hCapWnd,&CapParams,sizeof(CapParams));
CapParams.fStepCaptureAt2x=true;
capCaptureSetSetup(hCapWnd,&CapParams,sizeof(CapParams));
capGrabFrame(hCapWnd);
capFileSaveDIB(hCapWnd,imagename.c_str());
capDriverDisconnect(hCapWnd);
DestroyWindow(hCapWnd);
3) Как лучше хранить сделанные снимки, просто в открытом виде на диске или их можно как то в базу данных засунуть (ну например если я буду снимать людей, чтобы можно было дать им описание, а потом по названию или описанию конкретного человека вызывалась его фотка).
Странный у тебя двор. Я бы хранил так:
C:\root\dir\photos\2005\09\06\11\2005-09-06 11:23:12.jpg
Очень удобно. Нужный кадр можно быстро найти с помощью любой ACDSee и т.п.
Оно надо ?? Правильно разложенные снимки по каталогам с датами - проще и удобнее
Зачем ?? Делай Photo Capture каждые 3 секунды например, этого вполне достаточно для наблюдения.
Я так делал на http://bike.novsu.ac.ru/
char szDeviceVersion[80];
int cameranum=0;
hCapWnd=capCreateCaptureWindow("My Capture Window",
WS_CHILD|WS_VISIBLE,0,0,640,480,
Form1->Handle, cameranum);
bool result=capDriverConnect(hCapWnd,1);
if (!result) {ShowMessage("Can not connect to video device");}
BITMAPINFO binfo;
capGetVideoFormat(hCapWnd,&binfo,sizeof(BITMAPINFO));
binfo.bmiHeader.biWidth=640;
binfo.bmiHeader.biHeight=480;
capSetVideoFormat(hCapWnd,&binfo,sizeof(BITMAPINFO));
CAPTUREPARMS CapParams;
capCaptureGetSetup(hCapWnd,&CapParams,sizeof(CapParams));
CapParams.fStepCaptureAt2x=true;
capCaptureSetSetup(hCapWnd,&CapParams,sizeof(CapParams));
capGrabFrame(hCapWnd);
capFileSaveDIB(hCapWnd,imagename.c_str());
capDriverDisconnect(hCapWnd);
DestroyWindow(hCapWnd);
Странный у тебя двор. Я бы хранил так:
C:\root\dir\photos\2005\09\06\11\2005-09-06 11:23:12.jpg
Очень удобно. Нужный кадр можно быстро найти с помощью любой ACDSee и т.п.
Большое спасибо, щас буду разбираться, но с прокруткой ты наверно не совсем понял. Например: я вчера наснимал всех кто ко мне приходил, а сегодня запустил программу и смотрю список людей с фотками, и при желании могу любого человека выбрать щелкнув на нужной мне фотке. С помощью HTML это все делается просто, но я хотел бы это сделать с помощью диалога, который можно прокручивать для того чтобы были видны фотки которые не поместились.
Большое спасибо, щас буду разбираться, но с прокруткой ты наверно не совсем понял. Например: я вчера наснимал всех кто ко мне приходил, а сегодня запустил программу и смотрю список людей с фотками, и при желании могу любого человека выбрать щелкнув на нужной мне фотке. С помощью HTML это все делается просто, но я хотел бы это сделать с помощью диалога, который можно прокручивать для того чтобы были видны фотки которые не поместились.
Ты наверное несовсем понял, есть еще HtmlDialog в котором и попробуй разместить фотки, добавь его как дочернее окно на форму приложения, а можно и проще поступить, если фотка под какимто именем, то создать список имен, и потом функцией WinExec или ShellExecute открывать файлы, запустится программа по умолчанию.
А может кто знает, как в MDI приложении открыть несколько окон, и чтоб в каждом была картинка с камеры в реалтайме? Причем в одном окне - оригинал, а в остальных - картинки обработанные разными фильтрами. Знаю только что надо это все мутить через ФильтрГраф, а как замутить - непонятно. Ктонить работал тут с DirectShow?
Видеозахват можно сделать с помощью DirectShow.
А может кто знает, как в MDI приложении открыть несколько окон, и чтоб в каждом была картинка с камеры в реалтайме? Причем в одном окне - оригинал, а в остальных - картинки обработанные разными фильтрами. Знаю только что надо это все мутить через ФильтрГраф, а как замутить - непонятно. Ктонить работал тут с DirectShow?
в MSDN все есть, я нашел пример, все реально работает, называется VideoCapture
BOOL CVideoCapDlg::OnInitDialog()
{
CDialog::OnInitDialog();
HWND ghWndCap ;
ghWndCap = capCreateCaptureWindow((LPTSTR)TEXT("Capture Window"),
WS_CHILD | WS_VISIBLE,
0, 0, 160, 120,
this->m_hWnd, (int) 0) ;
capDriverConnect(ghWndCap, 0);
StartNewVideoChannel(ghWndCap, 0);
// второй параметр у этих 2х функций номер драйвера видеокамеры, поэтому если их две //необходимо сделать перебор.
return TRUE;
}
void CVideoCapDlg::StartNewVideoChannel(HWND hWndC, WORD wIndex)
{
////////////////////////////////////////////////////////////////////////
// hWndC: Capture window handle
// wIndex: Selected capture driver index
////////////////////////////////////////////////////////////////////////
#define MS_FOR_15FPS 66
CAPSTATUS gCapStatus ;
CAPDRIVERCAPS gCapDriverCaps ;
// Get capture driver settings and update menu
capDriverGetCaps(hWndC, &gCapDriverCaps, sizeof(CAPDRIVERCAPS)) ;
// Get video format and adjust capture window
capGetStatus(hWndC, &gCapStatus, sizeof(CAPSTATUS)) ;
::SetWindowPos(hWndC, NULL, 0, 0, gCapStatus.uiImageWidth,
gCapStatus.uiImageHeight, SWP_NOZORDER | SWP_NOMOVE) ;
// Start preview by default
capPreviewRate(hWndC, MS_FOR_15FPS) ;
capPreview(hWndC, TRUE) ;
}