2012-09-18 6 views
6

Napisałem aplikację na Androida, która przechwytuje podgląd na żywo z kamery. Ważne jest, aby mieć krótki czas otwarcia migawki, który powinien być co najmniej stały.Jakieś szanse na skrócenie czasu migawki dzięki dostępowi do kamery NDK z Androidem?

Obecnie używam następujący kod, aby osiągnąć niski czas naświetlania:

Parameters params = camera.getParameters(); 
params.setSceneMode(Parameters.SCENE_MODE_SPORTS); 
params.setWhiteBalance(Parameters.WHITE_BALANCE_DAYLIGHT); 
params.setFlashMode(Parameters.FLASH_MODE_OFF); 
params.setFocusMode(Parameters.FOCUS_MODE_INFINITY); 

params.setPreviewFpsRange(9000, 29453); 
params.setPreviewFrameRate(29453); 
params.setJpegQuality(100); 
params.setPreviewFormat(ImageFormat.NV21); 

params.setPreviewSize(1280,720); 
params.setAntibanding(Parameters.ANTIBANDING_OFF); 
params.setExposureCompensation(params.getMinExposureCompensation()); 
params.set("iso", 1250); 
camera.setParameters(params); 

setSceneMode() wydaje się nie być obsługiwana w moim firmware komórkowe (getSupportedSceneModes zwraca pustą listę). Ustawienie "ISO" nie ma żadnego efektu (nie obejrzeliśmy obrazu, obliczyliśmy tylko liczbę klatek na sekundę). Po prostu znalazłem ten kod gdzieś i użyłem go ... może to po prostu zły ciąg?

Co dzieje się tak daleko jest: Zmiany stóp ramki od 9 do 29,453 fps, który jest jedyną obsługiwaną zakres klatek na sekundę. Więc params.setPreviewFpsRange(29453, 29453); też nie działa. Szybkość klatek jest wysoka (20-30 fps) w dobrych warunkach oświetleniowych (normalny dzień, w pomieszczeniu, skierowana do okna) i staje się bardzo niska (8-10 fps) dla średniego/słabego światła (światło dzienne, wewnątrz budynku, bezpośrednio z okna) warunki.

Bardziej szczegółowo: Nie muszę wysoką szybkość klatek, ale krótki czas migawki. Zebrane dane będą wykorzystywane do nawigacji w pomieszczeniach (lub: Lokalizacja wewnętrzna w pierwszym kroku). Aplikacja wymaga robienia zdjęć, podczas gdy normalna osoba zwykle chodzi bez osoby, która dba o to, w jaki sposób nosi telefon. Osoba może nawet biegać lub "kołysać się" telefonem (tak jak normalnie poruszasz rękami podczas chodzenia). Zwykle występuje dużo "rozmycia w ruchu", gdy tylko czas otwarcia migawki jest zbyt długi. Sytuacja znacznie różni się od sytuacji "chcę zrobić zdjęcie", w której fotografia stara się utrzymać aparat nieruchomo. W rzeczywistości nie chcemy osiągnąć "dobrych zdjęć", ale chcemy od czasu do czasu wykryć niektóre krawędzie ścian. Spodziewam się dużo "szumu" na zdjęciu, ale mam nadzieję, że tak czy owak działa ...

Pomysł polega na tym, że istnieje szansa uzyskania większej kontroli nad parametrami kamery za pomocą NDK. Czy ktoś ma doświadczenia z NDK i może mi odpowiedzieć, że warto spróbować?

Dodatkowe informacje: używam HTC Desire Z (również o nazwie: "T-Mobile G2" lub "HTC Vision") jako urządzenia testowego.

Odpowiedz

5

Krótka odpowiedź to "NIE". Dłuższa odpowiedź zaczyna się od pytania: Twoja aplikacja nie dba o przechwytywanie, ale używa tylko ramek podglądu YUV, czy to prawda?

jako standard pobrać aplikację bez dostępu do konta root, nie masz uprawnień dostępu do kamery (lub inne) urządzenie bezpośrednio. Masz tylko setParameters() API, aby uzyskać efekt kamery, a tym samym jesteś całkowicie zdany na łaskę OEM, co do tego, jaka funkcjonalność kamery jest widoczna za pośrednictwem tego interfejsu API.

Nawet na zakorzenione urządzenia, Twoje możliwości są ograniczone, ale teraz przez specyfikacje tych sterowników i konkretnego ISP aparatu.

W obu przypadkach należy zacząć od bardzo starannie wybiera urządzenia docelowego. Uważam, że niektóre telefony z Androidem pozwalają na znacznie większą kontrolę nad kamerą niż HTC Vision. Na przykład zmodyfikowana wersja Samsung S2 http://pfittech.com/rom_pfittech_jb.html oferuje stabilne 25 klatek na sekundę przy 1080p.

+0

Chciałbym uniknąć niepotrzebnej kompresji obrazu. Dlatego też podgląd ramek YUV jest w porządku. Nawet zdjęcie w skali szarości (Y-Layer) jest w porządku. Zrootowałem urządzenia testowe. Jako projekt badawczy jest to częściowo w porządku ... ale gdybym mógł uniknąć potrzeby dostępu do roota, wziąłbym to ;-). - Co masz na myśli, mówiąc o "zmodyfikowanej wersji" (niestandardowy ROM?) ... mieć kolegów z S2 ... może warto spróbować. – SDwarfs

+0

Tak, link wskazuje na niestandardową ROM dla S2 dostrojoną pod kątem najwyższej wydajności. W każdym razie, dla projektu badawczego, szukałbym urządzenia z najbardziej wszechstronnym/otwartym aparatem, którego HTC Desire Z nie jest. –

+0

OTOH, gdybym był tobą, nie odrzuciłbym ** linii przechwytywania **. Może to przyniesie lepsze rezultaty dla ciebie. Może kiedy nazwiesz 'takePicture()' "migawką" * (umieszczam to w cudzysłowie, ponieważ nie jest to prawdziwa migawka, ale efekt różnych czynników kamery ISP na rozmycie ruchu) * będzie krótszy? Nie można uzyskać przechwyconych obrazów z prędkością 30 klatek na sekundę, ale w miarę wyjaśniania algorytmu dobrze jest uzyskać stosunkowo ostre obrazy raz na sekundę. –

Powiązane problemy