Что нового

Захват изображения вебкамеры

Dark-Side

Знающий
Сообщения
72
Репутация
17
Версия AutoIt: 3.3.6.1.

Описание: Программа делает захват изображения с веб-камеры и сохраняет его в файл.

Примечания: Разрешение полученного изображения должно быть больше 320x240.


Я покопался по интернету и нашел вот эту темку, но я получил файл разрешением только 320x240, когда моя камера аппаратно поддерживает 1.3 пикселя. Хочется хотя бы 640x480, а лучше всего 1 мегапиксель.
 

kaster

Мой Аватар, он лучший самый
Команда форума
Глобальный модератор
Сообщения
4 020
Репутация
622
Makc
по той теме что ты привел, я тупо взял пример и у меня получился снэпшот 640х480, как и указано в скрипте
 
Автор
D

Dark-Side

Знающий
Сообщения
72
Репутация
17
Там не прописан размер снапшота. Там прописан только размер окна. Размер окна <> размер снапшота.
Я запустил тот пример и у меня появился в папке файл с разрешением 320x240.
 

kaster

Мой Аватар, он лучший самый
Команда форума
Глобальный модератор
Сообщения
4 020
Репутация
622
строка
Код:
_Webcam($gui,640,480,0,0)

задает разрешение камеры, а не размер окна. и потом, как я уже сказал - у меня появился файл именно 640х480


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

хотя на форуме человек тоже жаловался, что у него получается только 320х240. наверное проблема более глубокая и связана то ли с драйверами, то ли с какими-то настройками недоступными для avicap32.dll
 
Автор
D

Dark-Side

Знающий
Сообщения
72
Репутация
17
Я сейчас подключил камеру ко второму компьютеру, без установки каких-либо драйверов.
Результат: изображение 160x120.
Разрешение явно от чего-то зависит. Найти бы это "что-то" и поставить на максимум :smile:

В общем, подскажите кто знает, как его увеличить-то и наверняка =\
На крайний случай, может есть еще какая-нибудь dll'ка для работы с видео... хотя хочется заставить работать данный пример.
 

kaster

Мой Аватар, он лучший самый
Команда форума
Глобальный модератор
Сообщения
4 020
Репутация
622
мне почему-то кажется что берется минимальное разрешение камеры.
 
Автор
D

Dark-Side

Знающий
Сообщения
72
Репутация
17
То есть, на первом компьютере разрешение моей камеры 320x240, а на втором у той же самой камеры 160x120?
На первой машине установлена русская винда с сервиспаком 3 и драйверами с диска для камеры.
На второй английская винда сервис пак 2, голая, без каких либо драйверов от изготовиеля камеры.
 

kaster

Мой Аватар, он лучший самый
Команда форума
Глобальный модератор
Сообщения
4 020
Репутация
622
Makc
разные драйвера - разные разрешения. но я не уверен. просто у меня например в самой утилите от камеры нельзя поставить меньше чем 640х480, а потолок 1600х1200


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

точно. поставил щас в скрипте 1200х900 а получил все равно 640х480
 
Автор
D

Dark-Side

Знающий
Сообщения
72
Репутация
17
То есть, все зависит не только от функции в dll, а еще и от драйверов на камеру?

Найти бы способ заставить ее снимать на разрешении 640x480 или более :scratch:

Камера может снимать в намного лучше разрешении чем 320x240 или 160x120. И имеется в виде аппаратно, не прибегая к софту для увеличения снимка каким-то алгоритмами.
Видимо это просто прописано в каком-то файле - минимально значение кадра.

Надо бы сделать:

  • Вызов dll с просьбой не делать снимок в минимальном разрешении.
или
  • Прописать в каком-то файлике драйверов свое разрешение.
 
Автор
D

Dark-Side

Знающий
Сообщения
72
Репутация
17
Ну, тогда только второй вариант остается.
Если не удастся его реализовать, придется искать какую-нибудь другую dll'шку, с помощью которой можно будет указывать разрешение.

Хм... и как же этот видео драйвер найти? =\
У мелкомягких написано
The following example connects the capture window with the handle hWndC to the MSVIDEO driver and then disconnects them using the capDriverDisconnect macro:
Нашел у себя C:\WINDOWS\system32\msvideo.dll
А что с ним делать - ума не приложу...
 

kaster

Мой Аватар, он лучший самый
Команда форума
Глобальный модератор
Сообщения
4 020
Репутация
622
Вставь в WebCam.au3 в строку 129, после строки
Код:
DllCall($user, "int", "SendMessage", "hWnd", $cap[0], "int", $WM_CAP_SET_PREVIEWRATE, "int", 1, "int", 0)

следующую строку
Код:
DllCall($user, "int", "SendMessage", "hWnd", $cap[0], "int", $WM_CAP_DLG_VIDEOFORMAT, "int", 1, "int", 0)

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

Dark-Side

Знающий
Сообщения
72
Репутация
17
Да, помогло.
На компьютере без драйверов было доступно макс. разрешение 640x480, на другом компе пока не проверял.

Осталось только узнать, что посылает окошко при выборе самого высокого разрешения, ну или определенного какого-то, dll'ке и симитировать отсылку этого сообщения в программном коде, что бы не вылазило окошко с выбором разрешения и кодека...
 

`p r o x y

«Улыбайтесь, господа!»
Команда форума
Глобальный модератор
Сообщения
596
Репутация
157
Makc
Настройки драйвера работы web-камеры.
И скорее всего они хранятся в реестре.
 
Автор
D

Dark-Side

Знающий
Сообщения
72
Репутация
17
Что-то мне не легче от того, что оно возможно хранит настройки в реестре - фиг найдешь ведь :D
 
Автор
D

Dark-Side

Знающий
Сообщения
72
Репутация
17
Больше никто ничего посоветовать не может? :blink:
 

Yashied

Модератор
Команда форума
Глобальный модератор
Сообщения
5 379
Репутация
2 713
Автор
D

Dark-Side

Знающий
Сообщения
72
Репутация
17
О, здорово, я теперь могу убрать использование окна :ok:
Но разрешение изображения это не меняет :D
 

rusreg79

Продвинутый
Сообщения
159
Репутация
57
У меня почему-то этот скрипт вываливается с ошибками... в чем трабла может быть? :(
win7 64

Код:
C:\Program Files (x86)\AutoIt3\Include\Webcam.au3(122,91) : WARNING: $WS_CHILD: possibly used before declaration.
$cap = DllCall($avi, "int", "capCreateCaptureWindow", "str", "cap", "int", BitOR($WS_CHILD,
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^
C:\Program Files (x86)\AutoIt3\Include\Webcam.au3(122,103) : WARNING: $WS_VISIBLE: possibly used before declaration.
$cap = DllCall($avi, "int", "capCreateCaptureWindow", "str", "cap", "int", BitOR($WS_CHILD,$WS_VISIBLE)
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^
C:\Program Files (x86)\AutoIt3\Include\Webcam.au3(122,91) : ERROR: $WS_CHILD: undeclared global variable.
$cap = DllCall($avi, "int", "capCreateCaptureWindow", "str", "cap", "int", BitOR($WS_CHILD,
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^
 

madmasles

Модератор
Глобальный модератор
Сообщения
7 790
Репутация
2 319
rusreg79
Попробуйте добавить в начало
Код:
#include <WindowsConstants.au3>
;...
 
Верх