9
votes

Définir la mise au point de la caméra à distance fixe contrôlée sur Android

Mon appareil n'a que deux modes de mise au point, auto et fixe (selon GetupportedFocusModes ()). Je veux mettre mon appareil photo à une distance de mise au point fixe de 'x' (x étant ce que je veux, ou quoi que je puisse obtenir de la caméra ..). (Je suis au courant de setfocusmode (caméra.parameters.focus_mode_fixed) , mais cela semble être fixé uniquement sur le réglage ultérieur possible.)

Cela peut-il être fait? (Version 4.2.2 Android)


0 commentaires

3 Réponses :


9
votes

Ne pas essayer de répondre complètement à la question ici, essayant juste de lui donner une certaine direction.
Donc, ce dont vous avez besoin ici est un support de pilote pour ce type d'opération. Ensuite, à un moment donné, vous demanderiez au pilote de votre application de définir une distance de mise au point demandée.

Une autre question est la suivante: "Si quelqu'un a vraiment besoin de ce type de fonctionnalité?".

Documentation Android dit:

Publique statique finale String Focus_Mode_fixed
La mise au point est corrigé. La caméra est toujours dans ce mode si la mise au point n'est pas réglable. Si l'appareil photo a la mise au point automatique, ce mode peut fixer le focus, qui est généralement à la distance hyperfocale . Les applications ne doivent pas appeler autofocus (autofocuscallback) dans ce mode.

permet de voir quelle distance hyperfocale est.

distance hyperfocale
De Wikipedia, l'encyclopédie libre

Dans l'optique et la photographie, la distance hyperfocale est une distance au-delà de laquelle tous les objets peuvent être introduits dans une mise au point "acceptable". Il existe deux définitions de distance hyperfocale couramment utilisée, entraînant des valeurs qui ne diffèrent que légèrement:

Définition 1: La distance hyperfocale est la distance la plus proche à laquelle une lentille peut être focalisée tout en maintenant des objets à l'infini de manière acceptable. Lorsque la lentille est concentrée à cette distance, tous les objets situés à des distances de la moitié de la distance hyperfocale à l'infini seront acceptablement.

Définition 2: La distance hyperfocale est la distance au-delà de laquelle tous les objets sont acceptablement tranchants, pour une lentille axée à l'infini.

La distinction entre les deux significations est rarement faite, car elles ont des valeurs presque identiques. La valeur calculée en fonction de la première définition dépasse celle de la seconde par une seule longueur focale.

Lorsque la distance hyperfocale est la distance de mise au point donnant la profondeur maximale de champ, la distance est la plus souhaitable pour régler la mise au point d'une caméra à focus fixe.

La mise au point n'est donc pas définie sur le réglage le plus éloigné possible, mais est défini pour que tous les objets visibles soient acceptables.

retour à la question.
Si vous êtes un développeur du micrologiciel de ce caméra particulier, vous pouvez ajouter des IOCTLS nécessaires à votre pilote. Mais alors vous allez toujours avoir besoin de les appeler d'une manière ou d'une autre. Cela ne peut pas être atteint sans ajouter de fonctions supplémentaires dans le système d'exploitation Android et recompilez-vous davantage d'Android lui-même et c'est le noyau sous-jacent de Linux. de
Il semble donc que vous ne puissiez pas atteindre cet objectif, pas de l'espace utilisateur au moins.


3 commentaires

Pour répondre à votre deuxième question: je vous assure, j'ai besoin de ce genre de fonction .. :) Deuxièmement, j'avais peur de cette réponse, mais j'espère qu'il existe encore une sorte de truc pour simuler ce comportement. Merci.


Je sais que les gens ne postaient pas leurs questions ici pour ne pas avoir une réponse, mais dans ce cas, c'est plutôt non que oui. Votre tâche n'est pas impossible, mais de l'atteindre, vous devez modifier l'Android, le pilote de la caméra et éventuellement dans le noyau. Je ne sais pas si une caméra permet à un logiciel tiers de déplacer ses objectifs de la manière demandée. Ce qui pourrait aider est un capteur tiers connecté sur USB, également la réponse de @jay Snayder semble prometteuse. Ou vous pouvez essayer de ne pas vous inquiéter de la mise au point et de prendre des photos en mode fixe pendant qu'un objet souhaitée apparaît.


Vous avez besoin de micrologiciels de caméra personnalisés et de HAL (qui fait partie du système Android), mais il n'est probablement pas nécessaire de recompiler le noyau Linux.



1
votes

Une approche potentielle pour atteindre cette distance de mise au point fixe consiste à appeler Autofocus au début du cycle de vie de la caméra. Continuez à appeler de manière sportive à l'autofocasse jusqu'à ce qu'une condition soit remplie. Une fois que la condition est remplie, alors au lieu d'appeler Autofocus, définissez un drapeau et appelez à la gambidation à la place.

Ceci est une solution que je suis venue pour obtenir l'effet souhaité que vous souhaitez obtenir pour atteindre.

Donc, dans mon fil qui prend des photos en continu, le code ressemble à ceci: xxx

une fois que la condition est remplie, il est conforme à la vraie. À ce stade, la mise au point est fixée à l'endroit où je veux que ce soit à l'heure. Ensuite, cela ne changera pas tout au long du reste de la tâche Activités. La condition de mon cas était l'apparition d'un objet particulier détecté avec la bibliothèque OPENCV.


1 commentaires

Semble intéressant, vérifiera si cela s'applique à ma situation dès que possible. Merci.



1
votes

Je me tromperai peut-être, mais la façon dont vous parlez de votre question ressemble à une perspective d'objectif classique DSLR.

sur une caméra mobile Android, vous n'avez pas à vous inquiéter d'une distance de focale d'objectif, à moins que votre caméra mobile ne permet que (ce qui ne semble pas être le cas, comme vous le mentionnez, permettez simplement de vous autoriser automatiquement ou fixe. , au lieu d'infini, macro, vidéo continue, etc.).

Vous pouvez simplement définir les zones locales sur la caméra pour se concentrer et laisser le SDK faire son travail. Si l'objet touché sur l'image de la caméra est bien ou proche, il s'agit du travail SDK pour calculer en conséquence et concentrez-vous pour vous.

Pour un exemple, Essayez ce projet de caméra open source.


0 commentaires