Что нового

Слежение в квартире с помощью Webcamers

DeLeTeSHift

Знающий
Сообщения
46
Репутация
9
Arei , у меня та же проблема была, но после удаления snapshot.bmp она исчезла. Просто замени
Код:
Func quit()
    Exit
 EndFunc
на

Код:
Func quit()
    FileDelete("snapshot.bmp")
    Exit
 EndFunc

и всё
 
Автор
A

Arei

Скриптер
Сообщения
938
Репутация
115
Мне не помог этот способ.


Добавлено:
Сообщение автоматически объединено:

на Windows X64 плохо работает эта библиотека, а на x86 всё нормально.
 

joiner

Модератор
Локальный модератор
Сообщения
3,556
Репутация
628
у меня работает и при повторном запуске без удаления скриншота.
по ссылке скомпилированный скрипт х64. использовал на windows 7 x64
http://autoit-script.ru/index.php?action=downloads;sa=view;down=267
 
Автор
A

Arei

Скриптер
Сообщения
938
Репутация
115
Странно, сейчас попробую.
 

Astel064

Помог мой пост, ставь +!
Сообщения
276
Репутация
51
Из кода WSWR (ответ №11) сделал подобие UDF: BmpMatrix.inc. Думаю, что многим пользователям (и я в их числе) будет удобнее вызывать две функции библиотеки и получать результат: есть изменения или нет, чем подстраивать свой скрипт под код 11 ответа (или наоборот). В общем, думайте сами, решайте сами :smile:
Код:
#CS
=======================================================================================

Функция:		_BmpMatrix_Init($sBmpFile, $iCoefficient)
Описание:		Выполнить инициализацию и преобразование файла изображения в массив, пригодный для дальнейшего работы с ним
Синтаксис:		_BmpMatrix_Init($sBmpFile, $iCoefficient=100)
Параметры:
				$sBmpFile = Файл растрового изображения в формате .BMP
				$iCoefficient = Коэффициент маштабирования. По умолчанию = 100

Return:		При успешном выполнении возвращается массив
@Error:		0=Успех; 1=Ошибка файла изображения.

=======================================================================================

Функция:		_BmpMatrix_Check($aChecksum, $sBmpFile, $iDetectLevel, $iCoefficient)
Описание:		Выводит положительное число, если изображение изменилось с момента последнего вызова _BmpMatrix_Init или _BmpMatrix_Check
Синтаксис:		_BmpMatrix_Check(ByRef $aChecksum, $sBmpFile, $iDetectLevel=6, $iCoefficient=100)
Параметры:
				$aChecksum = Массив, возращенный функцией _BmpMatrix_Init.
				$sBmpFile = Файл растрового изображения в формате .BMP
				$iDetectLevel = Уровень обнаружения (от 5 и выше). По умолчанию = 6
				$iCoefficient = Коэффициент маштабирования. По умолчанию = 100

Return:		Если файл не был изменен, то возвращается 0, иначе - положительное число выше $iDetectLevel.
@Error:		0=Успех; 1=Ошибка файла изображения; 2=Неверное значение $aChecksum.
Примечание:	Функция _BmpMatrix_Check может быть вызвана только после вызова _BmpMatrix_Init.

=======================================================================================
#CE


#include-once
#include <GDIPlus.au3>
#include <WinAPIEx.au3>

;------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

Func _BmpMatrix_Init($sBmpFile, $iCoefficient=100)
Local $aMatrixArray
	If NOT FileExists($sBmpFile) Then Return SetError(1,0,0)
$aMatrixArray = __BmpMatrix__Ext($sBmpFile, $iCoefficient)
	If @Error Then Return SetError(1,0,0)
Return SetError(0,0,$aMatrixArray)
EndFunc

;------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

Func _BmpMatrix_Check(ByRef $aChecksum, $sBmpFile, $iDetectLevel=6, $iCoefficient=100)
Local $i=0, $aMatrix
	If NOT IsArray($aChecksum) Then Return SetError(2,0,0)

$aMatrix = __BmpMatrix__Ext($sBmpFile, $iCoefficient)
	If @Error Then Return SetError(1,0,0)

For $i = 0 To UBound($aMatrix) - 1
	If $aChecksum[$i] <> $aMatrix[$i] Then $i += $i
Next
If $i > $iDetectLevel Then
	$aChecksum = $aMatrix
	Return SetError(0,0,$i)
EndIf

Return SetError(0,-1,0)
EndFunc

;------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

Func __BmpMatrix__Ext($sBmpFile, $iCoefficient)
Local $hImage, $hBitmap, $W, $H, $hSrcDC, $hSrcSv, $hDstDC, $hDib, $hDstSv, $RGB, $Min, $Max, $Q, $ggg
	;_WebcamSnapShot($sTempFile)
	_GDIPlus_Startup()
	$hImage = _GDIPlus_ImageLoadFromFile($sBmpFile)
		If $hImage = 0x00000000 Then Return SetError(1,0,0)

	$hBitmap = _GDIPlus_BitmapCreateHBITMAPFromBitmap($hImage)
	$W = _GDIPlus_ImageGetWidth($hImage)
	$H = _GDIPlus_ImageGetHeight($hImage)
	_GDIPlus_ImageDispose($hImage)
	_GDIPlus_Shutdown()
		If $H < 1 AND $W < 1 Then Return SetError(1,0,0)

	Dim $Matrix[Round($H / $iCoefficient)][Round($W / $iCoefficient)]
	Dim $HLS[3]

	_GDIPlus_ImageDispose($hImage)
	_GDIPlus_Shutdown()

	$hSrcDC = _WinAPI_CreateCompatibleDC(0)
	$hSrcSv = _WinAPI_SelectObject($hSrcDC, $hBitmap)
	$hDstDC = _WinAPI_CreateCompatibleDC(0)
	$hDib = _WinAPI_CreateDIB(1, 1)
	$hDstSv = _WinAPI_SelectObject($hDstDC, $hDib)
	_WinAPI_SetStretchBltMode($hDstDC, 4);	$HALFTONE=4

	For $y = 0 To $H / $iCoefficient - 1
		For $x = 0 To $W / $iCoefficient - 1
		_WinAPI_StretchBlt($hDstDC, 0, 0, 1, 1, $hSrcDC, $x * $iCoefficient, $y * $iCoefficient, $iCoefficient, $iCoefficient, 13369376);	$SRCCOPY=13369376
		$RGB = _WinAPI_GetPixel($hDstDC, 0, 0)
		_WinAPI_ColorRGBToHLS($RGB, $HLS[0], $HLS[1], $HLS[2])
		$Matrix[$y][$x] = $HLS[1]
		Next
	Next

	_WinAPI_SelectObject($hSrcDC, $hSrcSv)
	_WinAPI_DeleteObject($hBitmap)
	_WinAPI_DeleteDC($hSrcDC)
	_WinAPI_SelectObject($hDstDC, $hDstSv)
	_WinAPI_DeleteObject($hDib)
	_WinAPI_DeleteDC($hDstDC)
	;_ArrayDisplay($Matrix, 'Luminance')
	$Min = 240
	$Max = 0

	For $y = 0 To $H / $iCoefficient - 1
		For $x = 0 To $W / $iCoefficient - 1
			If $Min > $Matrix[$y][$x] Then $Min = $Matrix[$y][$x]
			If $Max < $Matrix[$y][$x] Then $Max = $Matrix[$y][$x]
		Next
	Next

	$Q = Round(($Min + $Max) / 2)
	$ggg = 0
	Dim $fff[$W / $iCoefficient - 1]

	For $y = 0 To $H / $iCoefficient - 1
		For $x = 0 To $W / $iCoefficient - 1
		;$Matrix[$y][$x] = $Matrix[$y][$x]
		$ggg += Number($Matrix[$y][$x] < $Q)
		Next
	$fff[$y] = $ggg
	$ggg = 0
	Next

	Return $fff
EndFunc   ;==>__BmpMatrix__Ext

;------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

Код:
#include "Webcam.au3" ; http://www.autoitscript.com/forum/topic/68866-webcam-udf/page__hl__Webcam%20%20UDf
#include "BmpMatrix.inc"; http://autoit-script.ru/index.php?topic=12366.msg116310#msg116310


$gui = GUICreate('BmpMatrix', 640, 480)
HotKeySet('{Esc}', 'quit')

_WebcamInit()
_Webcam($gui, 640, 480, 0, 0)
GUISetState()

_WebcamSnapShot(@ScriptDir&"\SnapShot.bmp")
$aMatrixArray = _BmpMatrix_Init(@ScriptDir&"\SnapShot.bmp", 100)
	If @Error Then Exit MsgBox(16,"Init",@Error)

While 1
_WebcamSnapShot(@ScriptDir&"\SnapShot.bmp")
$fOK = _BmpMatrix_Check($aMatrixArray, @ScriptDir&"\SnapShot.bmp", 5, 100)
	If @Error Then Exit MsgBox(16,"Check",@Error)
TrayTip("", $fOK, 5, 4)
Sleep(250)
Wend


Func quit()
    Exit
EndFunc   ;==>quit
 

Вложения

  • BmpMatrix.zip
    3.6 КБ · Просмотры: 6

Garrett

Модератор
Локальный модератор
Сообщения
3,999
Репутация
967
IMHO:
1. Датчик движения
2. Arduino (можно и обойтись без)
3. Веб-камера
4. Последовательный порт
5. Ну и, конечно же, Autoit :smile:
 

Astel064

Помог мой пост, ставь +!
Сообщения
276
Репутация
51
Garrett, дико извиняюсь, но к чему это? :smile:
 

Garrett

Модератор
Локальный модератор
Сообщения
3,999
Репутация
967

Astel064

Помог мой пост, ставь +!
Сообщения
276
Репутация
51
Garrett [?]
Может я неправильно вас понял, но вы писали:

Вы видимо немного ошиблись, это писал Arei (ТС), а я случайный прохожий, который искал тоже самое, что и ТС, но намного позже :smile:
 

Yashied

Модератор
Команда форума
Глобальный модератор
Сообщения
5,379
Репутация
2,724
Самый простой способ - купить простенькую IP камеру и не заморачиваться фигней. Все фичи по слежению как правило уже встроены в прошивку камеры. Там вам и детектор движения, и запись фото/видео, и отсылка по почте или смс, и многое другое.
 

Garrett

Модератор
Локальный модератор
Сообщения
3,999
Репутация
967

alex33

Скриптер
Сообщения
1,457
Репутация
186
А ещё я приложения видел в интернете для телефонов и планшетов, там есть реакция на движения, на звук...
 
Верх