Jak zrobić zdjęcie z kamerki używając wbudowanego przycisku?

0

mam kamerkę, która ma przycisk na obudowie, który robi zdjęcie. Jednak ta funkcja działa tylko w dedykowanej aplikacji. Pewnie ten przycisk wysyła jakiś sygnał, który wywołuje funkcję przechwycenia obrazu.
Czy macie jakiś pomysł, jak przechwycić ten sygnał, abym mógł tego przycisku użyć w mojej aplikacji?

0

Podejrzewam, że to jest kwestia sterowników, które monitorują wciśnięcia tego przycisku, więc ciężko może być.
Jakbyś dał konkretny model kamerki, to można by było pokombinować.

0

nie sądzę aby to komuś pomogło, ale ta kamerka to
Professional Multifunction Skin Analysis System EH-9100

2

myślę że przechwycenie jakiegoś zdarzenia na przycisku może być niewykonalne bez modyfikacji sterownika. To jednak może być bardzo trudne.

Dlatego mogę zaproponować "protezę".
Domyślam się że praca z tym urządzeniem polega na tym że kamerą najeżdżasz na zmiany skórne i robisz po prostu zdjęcie. I rób tak dalej, uruchom aplikację od kamery jeśli jest niezbędna do obserwacji miejsca które fotografujesz i rób zdjęcia.
Jedyne co powinieneś zrobić w swojej aplikacji po np. rejestracji pacjenta to monitoring folderu ze zdjęciami, gdy pojawi się nowe po prostu kopiujesz je do swojej aplikacji i np. wyświetlasz.
Jeśli byś chciał bardziej zintegrować to rozwiązanie to możesz nawet wyświetlić okno aplikacji od kamery w oknie swojej aplikacji. Ostatnio była dość duża dyskusja na ten temat na forum. Chociaż ja twierdzę że nie jest to potrzebne.

0

Ale ta dedykowana aplikacja ma błędy i brak kilku ważnych funkcji, dlatego chciałem napisać własną.

2

Taki punkt zaczepienia - rzuć okiem na https://docs.microsoft.com/en-us/windows-hardware/drivers/stream/usb-based-camera-with-a-capture-button.

Aczkolwiek to wszystko zależy od tego, jak do tematu podeszli producenci tego urządzenia - Vendors do not need to write a minidriver for their USB-based camera if it conforms to the UVC specification. Jeśli urządzenie jest zgodne z podaną specyfikacją, jest szansa, że się do niego dobijesz. Jeśli zrobili to po swojemu, to albo trzeba uzyskać jakieś wsparcie od producenta urządzenia (np. informacje o API/sposobie komunikacji ze sterownikiem), albo próbować podsłuchać w jaki sposób apka "gada" z kamerką. Ale to już raczej grubszy temat i kiepsko to widzę.

0
My Razem napisał(a):

Ale ta dedykowana aplikacja ma błędy i brak kilku ważnych funkcji, dlatego chciałem napisać własną.

Czyli ta kamera nie tylko fotografuje ale jeszcze ma jakieś inne funkcje, w stylu dynamicznej zmiany podświetlenia i robienia serii zdjęć aby rozszerzyć zakres tonalny itp.?
Jeśli tak to rozumiem, jeśli jednak kamera robi tylko zdjęcia a resztę załatwia aplikacja i wbudowane w nią filtry operujące na przechwyconym obrazie to jednak dalej możesz użyć metody kopiowania obrazu z dysku (jak można to zapisuj w metodzie bezstratnej a może jakiś RAW nawet istnieje) i dalszej obróbki w swojej aplikacji.

0

Kamerka tylko wysyła obrazek do aplikacji, a resztę już robi ta aplikacja. Ale ona często wywala błędy.
Próbuję zrozumieć jak mam użyć tego sterownika od Microsoftu, który podał cerrato

1

zacznij od tego czy dasz radę odczytać obraz z kamery jakimś programem który obsługuje sterownik TWAIN (np IrfanView) lub np. VLC

2

w tym temacie są moje boje z kamerką, może Ci się przydadzą Kamerka

2

jeśli chodzi o samo przechwytywanie obrazu z kamerki to ja zrobiłem to na podstawie tego: http://www.delphibasics.info/home/delphibasicsprojects/directxdelphiwebcamcaptureexample działa dobrze ale o obsłudze przycisku na kamerze nie ma mowy.

0

Sprawdziłem w IrfanView i po wybraniu sterownika TWAIN widzę obraz z kamerki. Mogę wcisnąć przycisk **acquire **i obraz zapisuje się na dysku.
Ale naciśnięcie przycisku na kamerze nie robi nic.
Pewnie wywołuje jakieś inne zdarzenie.

0

no to część związana z przechwytywaniem obrazu można powiedzieć że nie będzie sprawiała problemu, możesz użyć mojego rozwiązania lub tego co polecił @PrzemysławWiśniewski są z tego co gdzieś czytałem jakieś biblioteki do tego, chyba VLC coś udostępnia?
Jednak jeśli chodzi o przycisk to musisz szukać dalej rozwiązania, może napisanie do producenta kamerki prośby o udostępnienie informacji coś by dało?

Rozumiem że przycisk działa tylko w momencie gdy działa aplikacja kamery, czyli nie jest to jakiś serwis w systemie tylko ta aplikacja przechwytuje jakieś zdarzenie. Po szpieguj ją np. programem spyxx

0

Poszpiegowałem tę aplikację programem Spy++ i tam pokazał, że naciśnięcie przycisku na kamerze powoduje komunikat WM_USER+2
Więc napisałem najprostszą aplikację do obsługi tego komunikatu:

const
  WM_BUTTON = WM_USER + 2;

type
  TfrmMain = class(TForm)
    Memo1: TMemo;
  private
    procedure WmButton(var Msg : TMessage); message WM_BUTTON;
  public

  end;

var
  frmMain: TfrmMain;

implementation

{$R *.dfm}

{ TfrmMain }

procedure TfrmMain.WmButton(var Msg: TMessage);
begin
   Memo1.Lines.Add('button');
end;

Ale nadal nic się nie dzieje.
I tutaj mam pytanie. Czy mój program nie działa czy może ta kamera wyszukuje tę dedykowaną aplikację i do niej "wstrzykuje" ten komunikat i dlatego ja nie mogę go przechwycić. Jest to możliwe?

0
My Razem napisał(a):

Poszpiegowałem tę aplikację programem Spy++ i tam pokazał, że naciśnięcie przycisku na kamerze powoduje komunikat WM_USER+2

A kto jest odbiorcą tego komunikatu?

Wątpię, aby był on rozgłaszany, czyli wysyłany do wszystkich okien (odpowiednik HWND_BROADCAST), więc ta metoda nic Ci nie da, bo tego komunikatu Twoje okno po prostu nie otrzymuje. Przyda się najpierw założyć hooka, tak aby ten komunikat podsłuchać i dopiero wtedy można będzie zareagować.

0

Skoro kamera wysyła sygnał tylko do swojej aplikacji, to musi ją najpierw znaleźć. W jaki sposób może ją szukać?
Próbowałem nazwać moje okno tak jak tamten program ale nic to nie dało.

0

Sprawdź tym swoim narzędziem kto jest odbiorcą tego komunikatu (uchwyt określ). Albo załóż globalnego hooka.

0

Mogę prosić o nakierowanie jak zrobić globalnego hooka na komunikaty? Wszędzie są tylko na klawiaturę lub mysz.
Pewnie łatwo to przerobić ale nie widzę tego...

0

Zobacz tutaj: http://www.delphipages.com/forum/showthread.php?t=203324

Sam niewiele dłubię w WinAPI, dlatego też lepiej będzie, jeśli wypowie się ktoś bardziej obeznany w tych tematach. Myślę, że @kAzek, @olesio oraz @Stefan_3N będą w stanie pomóc.

0

Widzialem tę stronke, ale nie rozumum w jakim celu jest tam uzywany plik tekstowy.

1 użytkowników online, w tym zalogowanych: 0, gości: 1