8
votes

Clairement des images de Windows C # Canon SDK vs PTP ou MTP

J'espère recevoir des conseils généraux sur l'accomplissement d'un objectif apparemment simple. J'ai une caméra DSLR (Canon EOS 50D) et j'ai besoin d'écrire une application qui indiquera à la caméra de prendre une photo. J'ai aussi besoin de transférer l'image sur l'ordinateur et de la supprimer éventuellement de la caméra. Un bonus serait d'obtenir un aperçu en direct de la caméra de mon application. Mon environnement sera Windows (XP Pro ou Vista Enterprise) et .NET 3.5 (C #).

J'ai fait des recherches et j'ai trouvé quelques options. L'un que je sais fonctionnera, mais me limite à n'utiliser que des caméras canones à l'avenir. J'ai trouvé et téléchargé un SDK de Canon qui fournit beaucoup de cette fonctionnalité. J'ai regardé par-dessus le SDK et pendant qu'il est vaste et écrit en C, il dispose de C # wrappers qui accélérera le développement un peu.

Une autre option que j'ai trouvée est appelée périphériques portables Windows. Apparemment, c'est une API qui parlera à des périphériques qui mettent en œuvre des normes PTP et MTP. C'est basé sur com et autant que je puisse le dire, il n'a pas de wrappers .NET. Ce n'est cependant pas un bouchon de spectacle. Je pourrais p / invoquer la fonctionnalité dont j'ai besoin ou écrire une DLL gérée C ++ à utiliser dans mon application pour parler à la caméra.

Je cherche quelqu'un d'expérience avec WPD pour me donner des pointeurs. J'ai parcouru la documentation et j'ai vu des références à transférer des images et en supprimant des images. Je n'ai cependant pas vu de mention de commandes de prendre une photo, d'obtenir une image de prévisualisation ou de faire la mise au point / la mise au point automatique.


4 commentaires

Je suis intéressé à voir la réponse à cette question. Personnellement, si je n'écrivais que l'application pour moi-même, j'essaierais d'abord le Canon SDK. En outre, si vous avez déjà un ensemble de lentilles canon, vous serez probablement coller avec Canon dans le futur :-).


Cela semble être un excellent projet de codépleplex. J'ai un rebelle XTI et cela ressemble à un concept amusant pour travailler. Si vous décidez de créer un projet de CodePlex, laissez-moi certainement le savoir!


Le travail se poursuit sur une enveloppe C ++ / CLI pour le SDK Canon. Ce fut un véritable défi. Je ne pense pas pouvoir publier un projet Codépleplex parce que je n'aurai pas de droits au code. Désolé. J'aimerais avoir plus de latitude à cet égard.


Si seulement je pouvais. Cela fait longtemps que ce code est emballé dans mes anciens employeurs. Propriété intellectuelle. J'ai fini par utiliser le SDK Canon et envelopper le code C avec des classes C # P / InvoKe. C'était assez difficile. Le Canon SDK était assez cryptique et imo beaucoup trop attaché directement à MTP. Ce que je voulais vraiment, c'était une bibliothèque de dire simplement: "Prenez une photo" ou "Donnez-moi l'aperçu de l'écran en direct". À l'époque qui était difficile à venir. Depuis lors, j'ai appris qu'il y a une bibliothèque sur Linux qui le fera, hélas je n'ai pas travaillé avec elle et je ne sais pas son nom.


5 Réponses :


1
votes

PTP et MTP sont les deux protocoles de transfert de fichiers d'une caméra fixe numérique (DSC). Les protocoles ne fournissent aucune fonctionnalité pour déclencher de nouvelles images ou définir un contrôle d'exposition. Vous serez coincé à l'aide du SDK spécifique de la caméra. Si vous souhaitez que plusieurs fournisseurs soutiennent Nikon dispose d'un SDK qui fournit un soutien similaire en tant que SDK Canon pour ses caméras.

Plus d'informations sur PTP et MTP peuvent être trouvées ici: http://fr.wikipedia.org/wiki/picture_transfer_protocol et http://fr.wikipedia.org/wiki/media_transfer_protocol

modifier

J'ai oublié de mentionner que wia Peut être intéressant pour vous, en supposant que le pilote de votre appareil photo fournit une interface WIA.


1 commentaires

J'ai regardé Wia, qui a été remplacé par des appareils portables Windows. Bien que je ne sois pas sûr si PTP ou MTP inclut cette fonctionnalité (prenant des photos), j'ai vu des informations dans WPD qui allusion à ce que cela puisse. En tout cas, WPD est censé (voir ci-dessous), ce que j'avais envisagé d'utiliser cette application. Depuis, j'ai décidé d'utiliser le SDK et d'explorer éventuellement à explorer WPD à une heure ultérieure. "Les applications construites sur WPD peuvent explorer un périphérique, envoyer et recevoir du contenu, et même contrôler le périphérique, par exemple, prendre une photo ..." msdn.microsoft.com/en-us/library/ddd388998%28vs.85%29.aspx



0
votes

C'est vraiment générique, mais cela peut aider.

Je devais écrire une application utilisant deux scanners de code à barres différents de deux fournisseurs différents avec différents SDK. J'ai créé une interface qui définissait les méthodes et les événements que je voulais coder pour, puis écrivit des classes d'adaptateur qui ont mis en œuvre mon interface.

Cela a bien fonctionné dans mon cas et basculant de l'un à l'autre était assez transparent. Si vous avez pris la même approche, vous ne seriez pas totalement dépendant d'un SDK.


1 commentaires

Oui, une interface est une donnée. Je peux facilement créer une classe de base ou une interface avec des méthodes génériques et implémentées au besoin. Bien que cela soit utile, avoir un seul SDK pour de nombreuses marques de caméra prendrait moins de travail. Merci.



3
votes

L'API WPD fournit la commande wpd_command_still_image_capture_initiate

Je ne sais pas si votre caméra le supporte, mais elle devrait être assez simple pour le savoir. Si vous pouvez obtenir l'outil "wpdinfo" à partir du kit de développement du pilote et le démarrez avec votre caméra connectée, envoyez-la une commande wpd_command_capabilité_get_supported_commands et voyez s'il prend en charge la commande de capture d'image fixe. Si oui, alors vous pourriez essayer d'essayer.


2 commentaires

Merci! Ceci est exactement ce que je cherchais. Je ne l'ai pas encore essayé, mais je aurai une fois la chance. Actuellement, j'utilise le SDK Canon. Il a ses problèmes, sans oublier que cela ne fonctionne que avec des caméras d'EOS Canon ...


J'ai fini par essayer ceci. Malheureusement, cela n'a pas été soutenu par mon EOS 50D. Si j'ai déjà eu un autre appareil photo pour l'essayer avec je le ferai. J'ai envoyé par courrier électronique à Microsoft WPD Devs (à l'aide du blog WPD) pour une liste des fabricants prenant en charge diverses commandes WPD, mais elles n'ont pas une telle liste. Ils étaient aussi très utiles pour déterminer comment je devrais utiliser WPD.



3
votes

Le commentaire de Tallganglyguy est incorrect. PTP vous permet de déclencher de nouvelles images et de modifier une exposition, etc. Certaines caméras ont un micrologiciel qui expose uniquement certaines des commandes PTP.

PTP prend en charge les contrôles de périphérique courants, tels que la prise d'une image, de sorte que L'utilisateur pourrait tirer parti de la combinaison PC / caméra dans NEW et des façons différentes à nouveau, sans nécessiter de logiciels supplémentaires.


0 commentaires

2
votes

Essayez ma framework eos: https://github.com/esskar/canon.eos.framework

IMHO C'est une meilleure alternative que le fichier .cs fourni avec le SDK.


0 commentaires