Homemade Pixels

Des pixels frais qui sortent du four le blog de MrHelmut.

Screw you, Microsoft! (ou la sombre affaire du SDK Kinect)

Derrière ce titre de billet d’une totale désinvolture se cache un petit coup de gueule envers Microsoft. Et pourtant, ce n’est pas dans mes habitudes car, de manière générale, j’aime les technologies Microsoft (ou plutôt je les préfère largement à certaines autres). Mais là, ils ont vraiment fait n’imp’ autour du SDK de Kinect.

Quand Microsoft a commercialisé Kinect, il y a eu un véritable engouement de la “scène” PC. Un tel périphérique ouvre beaucoup de possibilités en termes d’interactions, notamment pour la recherche et l’industrie. Problème : Microsoft a décidé de fermer l’usage de Kinect exclusivement à sa Xbox 360. Le principe est simple, ils n’ont pas fourni de pilote PC pour Kinect, résultant en un “périphérique non reconnu” bien inutile. Soit.

Forcément, c’était une invitation aux bidouilleurs pour percer les mystères de son fonctionnement et programmer un pilote non-officiel. Il y a même eu une prime de quelques milliers de dollars à celui ou celle qui produirait un pilote exploitant tous les capteurs de la bêtes. C’est ainsi que quelques SDK non-officiels sont nés. Kinect a donc commencé à être pas mal utilisé dans le domaine de la recherche (les Natural User Interface font rêver tous les scientifiques depuis le début de l’informatique). Mais bon, les SDK non-officiels, basés des recherches toutes fraiches, ce n’est pas ce qu’on appel un exemple de fiabilité.

Devant cet intérêt de la part des chercheurs et de certaines industries (et donc des potentiels brouzoufs à se faire), Microsoft a décidé de faire incuber un projet de SDK chez Microsoft Research (le pôle recherche scientifique du groupe). Pourquoi faire re-développer un SDK par des scientifiques alors qu’on a un SDK Xbox 360 tout prêt que l’on peut porter sur PC les doigts dans le nez ? Pour protéger les recettes magiques des algorithmes du SDK Xbox 360 ? Allez savoir. Soit (bis).

Jusque la, tout va bien. Microsoft Research pond une première beta du SDK, puis une seconde. Le SDK est super bien foutu (quelques lignes de code et hop on a un squelette de reconnu) et propose un bind pour C++ et pour .NET (et donc XNA). Du coup, la communauté XNA monte au créneau car, si il est bien possible d’utiliser Kinect avec XNA sur PC, la chose n’est pas possible pour les Xbox Indie Games. La réponse de Microsoft est claire, le support n’est pas prévu afin de préserver la consistance de l’expérience Kinect sur Xbox 360. Mouais. Mon petit doigt me dit plutôt qu’ils ont les boules que des indies sortent des jeux à 1€ qui soient mieux que les AAA Kinect actuels. L’avenir nous dira si Microsoft ouvrira la chose, mais avec le mystère qui plane au dessus de l’avenir d’XNA, il ne faut pas trop espérer (UPDATE : c’est cuit).

Lors du Global Game Jam du mois dernier, j’ai développé Hoy, un jeu PC programmé avec XNA et utilisant Kinect. A l’époque j’avais basé mon code sur le SDK beta 2 de Kinect et il fonctionne avec n’importe quel Kinect. Le problème est que, en l’état, je ne peux pas redistribuer mon jeu car le SDK beta 2 ne le permet pas (il n’y a pas de pilote et la licence ne l’autorise pas). Il ne marche donc que sur ma machine qui a le SDK beta 2 d’installé.

Puis Microsoft annonce ses plans concernant Kinect et le PC. Tout d’abord, Microsoft commercialise un nouveau Kinect : “Kinect for Windows” (et renomme l’existant en “Kinect for Xbox 360″). Côté hardware, Microsoft dit qu’ils sont différents. Dans la pratique, seule la lentille de la caméra infra-rouge est différente, pour reconnaître des objets plus proches (au détriment de la profondeur), ce qui en soi est logique compte tenu du public visé. Premier bémol, “Kinect for Windows” n’est pas compatible Xbox 360. Second bémol, il coûte 100€ plus cher (250€ donc, mai cela inclus les coûts de licencing commercial). Troisième et plus gros bémol, la sortie du SDK final.

Le SDK final est sorti le 1er février, et avec lui le pilote officiel PC. Joie ? Bonheur ? Je me dis que je vais pouvoir finaliser Hoy et le sortir sur PC pour tous les possesseurs de Kinect. Premier obstacle : l’API a radicalement changée ! Elle est toujours aussi top, mais tout mon code fait avec la beta doit être quasi-entièrement ré-écrit. D’habitude, quand Microsoft change une API, ils préparent le terrain, via des blogs qui expliquent avant la sortie d’une nouvelle version les changements qu’il y aura. Comme ca on peut s’y préparer et comprendre les décisions de re-design de l’API. Pour le SDK de Kinect, il n’y a rien eu de tout ca et quand la version finale a débarqué, elle est tombée comme un cheveu sur la soupe.

Bref, je ré-écris Hoy. Et la, c’est le drame : “DeviceNotSupported” lorsque je veux le lancer sur un autre PC, sans le SDK. Pourquoi ? Microsoft a décidé que les “Kinect for Xbox 360″ ne soient pas supportés par le pilote PC. Alors même que cela marche parfaitement avec le SDK, toujours sur PC. Surement en partie parce que la version 360 n’englobe pas dans son prix la licence d’utilisation commerciale.

Grosso modo, pour développer une application Kinect sur PC, on peut utiliser un “Kinect for Xbox 360″ ou un “Kinect for Windows”. Alors que pour distribuer une application Kinect sur PC, seul “Kinect for Windows” fonctionnera chez monsieur tout le monde.

Il s’agit donc d’une limitation volontaire. Et c’est d’autant plus absurde qu’avec le SDK cela fonctionne (le pilote existe donc). Kinect s’est vendu à plus de 10 millions d’exemplaires dans sa version Xbox 360, alors que la version PC a un usage quasi-exclusivement limité à la recherche (soit quelques milliers de “Kinect for Windows” dans la nature, à tout casser). Empêcher d’atteindre ces 10 millions de joueurs existants, c’est tué dans l’oeuf toutes possibilités de sortir un jeu Kinect pour PC.

Pour distribuer Hoy, j’ai donc les possibilités suivantes :

  • Rester sur le SDK beta 2, ce qui limitera mon public uniquement aux gens ayant le SDK beta 2.
  • Rester sur le SDK final, ce qui limitera mon public uniquement aux gens ayant un “Kinect for Windows” (genre ceux qui auront dépensé 250€ pour un Kinect non-compatibe Xbox 360, soit le même public que le point précédent, les chercheurs et industriels).
  • Passer à un SDK non-officiel, ce qui limitera mon public aux gens qui ont installé le pilote non-officiel correspondant, et qui m’embetera car je devrais encore ré-écrire le jeu et avoir potentiellement plus de boulot à faire pour un résultat moins bon (avantage : ca pourrait tourner sous linux et mac).

Dans tous ces cas, la probabilité que d’autres personnes dans le monde joue un jour à Hoy est quasi-nulle. Pourquoi nous entuber avec une telle limitation alors qu’il y aurait un plus grand intérêt à l’ouvrir à l’ensemble des possesseurs d’un Kinect ? Pour exploiter un public niche avec une licence à 100€ ? Pour empêcher que le marché du jeu Kinect sur Xbox soit court-circuité par des indé’ plein d’idées sur PC ?

Screw you, Microsoft!

11 commentaires pour “Screw you, Microsoft! (ou la sombre affaire du SDK Kinect)”

  1. Celibatman dit :

    Ou alors tu fais un kickstarter ou un truc sur Ulule pour rassembler les fonds nécessaires à l’achat de la Kinect PC en expliquant bien pourquoi tu aboutis à cette situation.

  2. MrHelmut dit :

    En fait, moi ca ne me dérange pas d’avoir à utiliser un Kinect for Windows pour développer.
    Le problème ce sont les utilisateurs finaux. J’aurais préféré qu’ils puissent utiliser leur Kinect 360. Car limiter le pilote à Kinect for Windows écarte déjà entièrement la communauté des gamers consoleux ayant déjà un Kinect (soit 99.99% des possesseurs d’un Kinect). :-(

    Bon, le SDK n’est pas marketé comme étant fait pour les jeux, mais ca m’embête.

  3. firekorn dit :

    Je comprend ton désappointement mais n’a tu pas la possibilité d’utiliser simplement une webcam (avec micro si tu utilise la reconnaissance vocale) plutôt que de passer par un système propriétaire qui à tout simplement l’air de t’emmerder plus qu’autre chose…
    Je t’accorde que le SDK kinect à l’avantage de la simplicité et que les algo de reconnaissance sont déjà bien foutues mais je suis sur qu’en cherchant un peu, tu trouvera ton bonheur pour que monsieur tout le monde avec une webcam(intégré dans les pc portables et, moyennant quelques dizaines d’euros, sur un pc fixes).

    En tout cas je n’ai jamais été pro-Kinect de par le fait que c’est un système propriétaire et qu’avec une webcam et un bon algo on obtient un résultat proche voir équivalent pour dix fois moins chères…

    Si tu persiste sur le SDK Kinect, je pense qu’utiliser un pilote non-officiel est l’une des meilleurs options que tu a du points de vu du public, même si ré-écrire le code est en effet loin d’être pratique.

  4. divide dit :

    firekorn a dit :
    avec une webcam et un bon algo on obtient un résultat proche voir équivalent pour dix fois moins chères…

    J’ai beau être partisan du low-cost, on peut quand même pas comparer les resultats fournis par Kinect et une webcam… La webcam (+algo) te donnera au mieux une reconnaissance approximative de visage (et encore plus approximative du reste du corps), la ou Kinect te sors à coup sur la détection de tout le squelette + une image de profondeur fiable.

  5. neFAST dit :

    Je croyais que le Kinect projetait une grille de points dans les infrarouges, non ?

  6. firekorn dit :

    Kinect est composée de ceci :
    - 640×480 pixels @ 30 Hz (RGB camera) => facilement remplaçable par une webcam quelconque
    - 640×480 pixels @ 30 Hz (IR depth-finding camera) => permet simplement d’obtenir une information de profondeur
    Le seul défauts avec la webcam sera l’absence d’information de distance, mais si tu veux contrer ce défaut, tu utilise une autre webcam pour obtenir une image en 3D qui te donnera toute les informations dont tu a besoin.

    Pour la reconnaissance d’un squelette, ce n’est qu’une question d’algo, et plus la webcam te donnera un image précise (en nombre de pixels) plus tu pourra facilement obtenir l’image d’un squelette. Il suffit de pouvoir séparer ce que tu cherche du reste de l’image, peut importe d’où vient l’image c’est la manière de la traiter qui permet d’en faire quelque chose. Donc une webcam permet théoriquement de faire tout ce que fait kinect sans la gestion de la profondeur ce qui est déjà pas mal.

    Le seul avantage que je trouve à Kinect, c’est que le travail est mâché. Les algo de reconnaissance sont faits, il n’y a plus qu’à traiter les mouvements, ce qui permet de s’affranchir du traitement vidéo qui est de manière général assez compliqué à gérer correctement.

    Je précise qu’il faut un “bon” algo ce qui prend du temps à trouver ou à faire, et que l’on obtient alors un résultat proche, non pas meilleur. Je ne dénigre pas le travail fait sur kinect et j’avoue volontiers qu’il est plus simple d’utiliser kinect qu’une simple webcam.

  7. LeGreg dit :

    Il est aussi possible que le Kinect 360 soit vendu à marge nulle ou à perte pour augmenter sa pénétration et vendre plus de jeux par derrière.

    Pour l’algo.. Oui il suffit. Mais sachant que Microsoft a licencié/acheté le brevet d’une boîte externe il est possible que l’algo qu’ils utilisent soit 1- plutôt efficace, 2- breveté donc pas utilisable par quiconque.
    Ceci dit, comme tu dis, rien n’interdit à quiconque d’essayer de faire mieux et/ou de ne pas avoir à utiliser leur méthode brevetée. (Microsoft a aussi racheté des entreprises qui proposaient des méthodes concurrentes à sa technologie comme 3DV, Canesta etc.)

    http://www.ubergizmo.com/2012/01/asus-xtion-hands-on/

  8. divide dit :

    La reconstruction de profondeur par stereo ca marche à peu pres bien dans des cas bien texturés avec une bonne luminosité, mais c’est loin d’être aussi fiable et précis que la méthode IR utilisée par Kinect (sans parler du probleme de calibrer 2 flux webcam). Et c’est justement cette image de profondeur qui permet à Kinect d’extraire un squelette aussi précis, il ne s’appuie pas sur l’image RVB.

    Sinon pour faire de la mocap avec webcam, le plus simple/fiable reste l’utilisation de marqueurs sur le joueur.

  9. Nomys_Tempar dit :

    Bah il faut bien qu’il y est des désavantages à utiliser des technologies propriétaires sinon ça serait pas drôle…

  10. MrHelmut dit :

    @firekorn : bon point pour la webcam, ca résoudrait mes problèmes et élargirait mon public pour sur. Je ne sais pas trop ce qui existe comme lib/algo pour reconnaître des formes, mais dans le cas précis de Hoy, je préfère me concentrer sur le gameplay et être libre des mouvements et de la précision (mais ca m’intrigue quand même, par curiosité). Kinect a l’avantage de fonctionner dans le noir (vive les IR), sans calibration, etc.

    Le truc top avec Kinect aussi, c’est sa grille de microphones qui permet de savoir d’où provient un son, et donc de savoir si c’est tel ou tel joueur qui parle (donc la possibilité de faire un Hoy multijoueur). Bien entendu, rien qui ne soient infaisable avec d’autres micro/algo également.

    @LeGreg : oui c’est clair qu’il y a une histoire de propriété derrière tout ca. A la base les algo devaient être traités en hard par une puce directement dans Kinect, mais ils ont fait machine arrière et ont déporté ca dans le SDK, par peur que des hackers fassent du retro-engineering je suppose.

    Vendu à marge nulle, j’en suis un peu moins sur. En tout cas, la reconnaissance dans les jeux Xbox 360 est clairement plus performante que celle du SDK.

  11. gros dit :

    @firekorn:
    Tu ne trouveras pas de caméra 3D (temps de vol, lidar…) aussi bien pour aussi peu cher… fais moi confiance
    Ensuite, faire de la 3D par stéréo c’est plus dur que ce que tu penses et c’est lourd dans tous les cas
    Enfin, faire de l’analyse de pose humaine sur une image RGB, c’est extrêmement dur, et très lourd aussi
    La valeur ajoutée de la Kinect, c’est bien sa partie 3D, mais avoir dans un SDK des algos d’inférence de pose, de reconnaissance de ceci-cela gratuitement, c’est loin, très très loin, d’être négligeable!
    je te propose de lire un peu sur ces sujets avant de lâcher des trucs hasardeux comme “il suffit de” et “plus la webcam est précise, plus c’est facile” :)

    @leGreg
    Que le prix soit agressif ok, mais vendu à perte, surement pas, il n’y a pas grand chose de très cher dans une kinect à part la licence PrimeSense peut-être, il n’y a pas beaucoup d’intérêt de vendre un truc comme Kinect à perte! il suffit de voir le peu de jeux vendus, par rapport aux très grosses licences évidemment

    @MrHelmut
    Finalement, je te rejoins complètement sur ton coup de gueule, Microsoft a fait n’importe quoi: tenté de tout bloquer au début, puis face au succès hors XBOX, prétendu ouvrir le truc, en le bloquant d’une nouvelle façon.

Laisser un commentaire

Vous devez être connecté avec votre compte Wefrag pour publier un commentaire.