お持ちのカメラLocatable camera

HoloLens には、デバイスの前面に取り付けられている世界中のカメラが搭載されています。これにより、アプリはユーザーに表示される内容を確認できます。HoloLens includes a world-facing camera mounted on the front of the device which enables apps to see what the user sees. スマートフォン、ノートブック、またはデスクトップのカラーカメラの場合と同じように、開発者はカメラのアクセスと制御を行うことができます。Developers have access to and control of the camera just as they would for color cameras on smartphones, portables, or desktops. モバイルおよびデスクトップで動作する同じユニバーサル windows media captureおよび windows Media foundation Api が HoloLens で動作します。The same universal windows media capture and windows media foundation APIs that work on mobile and desktop work on HoloLens. Unity では、これらの Windows api をラップして、HoloLens でのカメラの単純な使用を抽象化し、(ホログラムの有無にかかわらず) 通常の写真やビデオを撮影したり、カメラの位置をシーン上で検索したりするなどのタスクを実行しました。Unity has also wrapped these windows APIs to abstract simple usage of the camera on HoloLens for tasks such as taking regular photos and videos (with or without holograms) and locating the camera's position in and perspective on the scene.

デバイスカメラ情報Device camera information

HoloLens (最初世代)HoloLens (first-generation)

  • 自動白バランス、自動露出、およびフルイメージ処理パイプラインを使用して、フォーカスされたフォト/ビデオ (PV) カメラを修正します。Fixed focus photo/video (PV) camera with auto white balance, auto exposure, and full image processing pipeline.

  • 世界中のホワイトプライバシー LED は、カメラがアクティブになるたびに点灯しますWhite Privacy LED facing the world will illuminate whenever the camera is active

  • カメラは、30、24、20、15、および 5 fps で、次のモード (すべてのモードが16:9 の縦横比) をサポートしています。The camera supports the following modes (all modes are 16:9 aspect ratio) at 30, 24, 20, 15, and 5 fps:

    VideoVideo [プレビュー]Preview それでもなおStill ビューの水平方向のフィールド (H 視界)Horizontal Field of View (H-FOV) 推奨される使用方法Suggested usage
    1280 x 7201280x720 1280 x 7201280x720 1280 x 7201280x720 45度45deg (ビデオ安定化を使用した既定のモード)(default mode with video stabilization)
    なしN/A なしN/A 2048x11522048x1152 67deg67deg 高解像度の静止画像Highest resolution still image
    1408x7921408x792 1408x7921408x792 1408x7921408x792 48度48deg ビデオ安定化前のオーバースキャン (埋め込み) 解像度Overscan (padding) resolution before video stabilization
    1344x7561344x756 1344x7561344x756 1344x7561344x756 67deg67deg オーバースキャンによる大規模な視界のビデオモードLarge FOV video mode with overscan
    896x504896x504 896x504896x504 896x504896x504 48度48deg イメージ処理タスクの低電力/低解像度モードLow power / Low resolution mode for image processing tasks

HoloLens 2HoloLens 2

  • 自動ホワイトバランス、自動露出、およびフルイメージ処理パイプラインを使用して、写真/ビデオ (PV) カメラを自動フォーカスします。Auto-focus photo/video (PV) camera with auto white balance, auto exposure, and full image processing pipeline.

  • 世界中のホワイトプライバシー LED は、カメラがアクティブになるたびに点灯します。White Privacy LED facing the world will illuminate whenever the camera is active.

  • HoloLens 2 では、さまざまなカメラプロファイルがサポートされています。HoloLens 2 supports different camera profiles. カメラの機能を検出して選択する方法について説明します。Learn how to discover and select camera capabilities.

  • カメラでは、次のプロファイルと解像度がサポートされています (すべてのビデオモードは16:9 縦横比です)。The camera supports the following profiles and resolutions (all video modes are 16:9 aspect ratio):

    ProfileProfile VideoVideo [プレビュー]Preview それでもなおStill フレームレートFrame rates ビューの水平方向のフィールド (H 視界)Horizontal Field of View (H-FOV) 推奨される使用方法Suggested usage
    Legacy、0 BalancedVideoAndPhoto、100Legacy,0 BalancedVideoAndPhoto,100 2272x12782272x1278 2272x12782272x1278 15、3015,30 64.6964.69 高品質なビデオ記録High quality video recording
    Legacy、0 BalancedVideoAndPhoto、100Legacy,0 BalancedVideoAndPhoto,100 896x504896x504 896x504896x504 15、3015,30 64.6964.69 高品質の写真キャプチャ用のプレビューストリームPreview stream for high quality photo capture
    Legacy、0 BalancedVideoAndPhoto、100Legacy,0 BalancedVideoAndPhoto,100 3904x21963904x2196 64.6964.69 高品質な写真キャプチャHigh quality photo capture
    BalancedVideoAndPhoto、120BalancedVideoAndPhoto,120 1952x11001952x1100 1952x11001952x1100 1952x11001952x1100 15、3015,30 64.6964.69 長期間のシナリオLong duration scenarios
    BalancedVideoAndPhoto、120BalancedVideoAndPhoto,120 1504x84 61504x846 1504x84 61504x846 15、3015,30 64.6964.69 長期間のシナリオLong duration scenarios
    ビデオ会議、100VideoConferencing,100 1952x11001952x1100 1952x11001952x1100 1952x11001952x1100 15、30、6015,30,60 64.6964.69 ビデオ会議、長期間のシナリオVideo conferencing, long duration scenarios
    ビデオ会議、100Videoconferencing,100 1504x84 61504x846 1504x84 61504x846 5、15、30、605,15,30,60 64.6964.69 ビデオ会議、長期間のシナリオVideo conferencing, long duration scenarios
    ビデオ会議、100 BalancedVideoAndPhoto、120Videoconferencing,100 BalancedVideoAndPhoto,120 1920 x 10801920x1080 1920 x 10801920x1080 1920 x 10801920x1080 15、3015,30 64.6964.69 ビデオ会議、長期間のシナリオVideo conferencing, long duration scenarios
    ビデオ会議、100 BalancedVideoAndPhoto、120Videoconferencing,100 BalancedVideoAndPhoto,120 1280 x 7201280x720 1280 x 7201280x720 1280 x 7201280x720 15、3015,30 64.6964.69 ビデオ会議、長期間のシナリオVideo conferencing, long duration scenarios
    ビデオ会議、100 BalancedVideoAndPhoto、120Videoconferencing,100 BalancedVideoAndPhoto,120 1128x6361128x636 15、3015,30 64.6964.69 ビデオ会議、長期間のシナリオVideo conferencing, long duration scenarios
    ビデオ会議、100 BalancedVideoAndPhoto、120Videoconferencing,100 BalancedVideoAndPhoto,120 960 x 540960x540 15、3015,30 64.6964.69 ビデオ会議、長期間のシナリオVideo conferencing, long duration scenarios
    ビデオ会議、100 BalancedVideoAndPhoto、120Videoconferencing,100 BalancedVideoAndPhoto,120 760x428760x428 15、3015,30 64.6964.69 ビデオ会議、長期間のシナリオVideo conferencing, long duration scenarios
    ビデオ会議、100 BalancedVideoAndPhoto、120Videoconferencing,100 BalancedVideoAndPhoto,120 640 x 360640x360 15、3015,30 64.6964.69 ビデオ会議、長期間のシナリオVideo conferencing, long duration scenarios
    ビデオ会議、100 BalancedVideoAndPhoto、120Videoconferencing,100 BalancedVideoAndPhoto,120 500x282500x282 15、3015,30 64.6964.69 ビデオ会議、長期間のシナリオVideo conferencing, long duration scenarios
    ビデオ会議、100 BalancedVideoAndPhoto、120Videoconferencing,100 BalancedVideoAndPhoto,120 424x240424x240 15、3015,30 64.6964.69 ビデオ会議、長期間のシナリオVideo conferencing, long duration scenarios

注意

混合 reality キャプチャを利用して、アプリのビデオや写真を撮ることができます。これには、ホログラムやビデオの安定化が含まれます。Customers can leverage mixed reality capture to take videos or photos of your app, which include holograms and video stabilization.

開発者にとっては、顧客がコンテンツをキャプチャしたときに可能な限り、アプリを作成する際に考慮する必要がある考慮事項があります。As a developer, there are considerations you should take into account when creating your app if you want it to look as good as possible when a customer captures content. また、アプリ内で直接、mixed reality キャプチャを有効 (およびカスタマイズ) することもできます。You can also enable (and customize) mixed reality capture from directly within your app. 詳細については、「開発者向けの混合現実のキャプチャ」を参照してください。Learn more at mixed reality capture for developers.

デバイスカメラを世界中に配置するLocating the Device Camera in the World

HoloLens が写真やビデオを撮影する場合、キャプチャされたフレームには、世界中のカメラの位置と、カメラのレンズモデルが含まれます。When HoloLens takes photos and videos, the captured frames include the location of the camera in the world, as well as the lens model of the camera. これにより、アプリケーションは、イメージのシナリオを強化するために、実際の環境におけるカメラの位置を理解することができます。This allows applications to reason about the position of the camera in the real world for augmented imaging scenarios. 開発者は、お気に入りのイメージ処理またはカスタムコンピュータービジョンライブラリを使用して、独自のシナリオを独創ロールできます。Developers can creatively roll their own scenarios using their favorite image processing or custom computer vision libraries.

HoloLens ドキュメントの他の場所にある "カメラ" は、"仮想ゲームカメラ" (アプリがレンダリングするための、視錐) を指している場合があります。"Camera" elsewhere in HoloLens documentation may refer to the "virtual game camera" (the frustum the app renders to). 特に明記しない限り、このページの "カメラ" は実際の RGB カラーカメラを表します。Unless denoted otherwise, "camera" on this page refers to the real-world RGB color camera.

このページでは、 MediaFrameReferenceクラスの使用方法について詳しく説明しますが、メディアファンデーション属性を使用してカメラの組み込みと場所をプルする api もあります。The details on this page cover using the MediaFrameReference class, however there are also APIs to pull camera intrinsics and locations using Media Foundation Attributes. 詳細については、 Holographic face tracking サンプルを参照してください。Please refer to the Holographic face tracking sample for more information.

座標系の画像Images with Coordinate Systems

各イメージフレーム (写真またはビデオ) には、キャプチャ時にカメラをルートとするSpatialCoordinateSystemが含まれています。これには、 MediaFrameReferenceCoordinateSystemプロパティを使用してアクセスできます。Each image frame (whether photo or video) includes a SpatialCoordinateSystem rooted at the camera at the time of capture which can be accessed using the CoordinateSystem property of your MediaFrameReference. さらに、各フレームには、 CameraIntrinsicsプロパティで確認できるカメラレンズモデルの説明が含まれています。In addition, each frame contains a description of the camera lens model which can be found in the CameraIntrinsics property. これらの変換は、ピクセルを生成した photons によって取得されたパスを表す3D 空間の光をピクセルごとに定義します。Together, these transforms define for each pixel a ray in 3D space representing the path taken by the photons that produced the pixel. これらの光線は、フレームの座標系から他の座標系 (例:静止フレームから) への変換を取得することによって、アプリ内の他のコンテンツに関連付けることができます。These rays can be related to other content in the app by obtaining the transform from the frame's coordinate system to some other coordinate system (e.g. from a stationary frame of reference). 要約すると、各イメージフレームには次のものが表示されます。To summarize, each image frame provides the following:

アプリケーションによって指定された座標系へのカメラCamera to Application-specified Coordinate System

' CameraIntrinsics ' と ' CameraCoordinateSystem ' からアプリケーション/ワールド座標系に移行するには、次のものが必要です。To go from the 'CameraIntrinsics' and 'CameraCoordinateSystem' to your application/world coordinate system, you'll need the following:

Unity でのお持ちのカメラ:CameraToWorldMatrix は PhotoCaptureFrame クラスによって自動的に提供されます (そのため、CameraCoordinateSystem の変換について心配する必要はありません)。Locatable camera in Unity: CameraToWorldMatrix is automatically provided by PhotoCaptureFrame class(so you don't need to worry about the CameraCoordinateSystem transforms).

DirectX でのお持ちのカメラ:Holographic Face Tracking サンプルは、カメラの座標系と独自のアプリケーション座標系との間の変換をクエリするための非常に簡単な方法を示しています。Locatable camera in DirectX: The Holographic Face Tracking sample shows the fairly straightforward way to query for the transform between the camera's coordinate system and your own application coordinate system(s).

ディストーションエラーDistortion Error

HoloLens では、アプリケーションでフレームを利用できるようになる前に、ビデオストリームと静止画像ストリームがシステムのイメージ処理パイプラインで undistorted されます (プレビューストリームには、元のゆがんだフレームが含まれます)。On HoloLens, the video and still image streams are undistorted in the system's image processing pipeline before the frames are made available to the application (the preview stream contains the original distorted frames). 使用できるのは CameraIntrinsics だけなので、アプリケーションではイメージフレームが完全な pinhole カメラを表すものと想定する必要があります。Because only the CameraIntrinsics are made available, applications must assume image frames represent a perfect pinhole camera.

HoloLens (最初の生成) では、イメージプロセッサのディストーション関数は、フレームメタデータで CameraIntrinsics を使用しているときに最大10ピクセルのエラーを引き続き発生させる場合があります。On HoloLens (first-generation) the undistortion function in the image processor may still leave an error of up to 10 pixels when using the CameraIntrinsics in the frame metadata. 多くのユースケースでは、このエラーは問題にはなりませんが、たとえば、ホログラムを実際のポスター/マーカーに整列させている場合、< 10px オフセット (2 メートルの位置にあるホログラムの場合は約 11 mm) がある場合は、このゆがみエラーが原因である可能性があります。In many use cases, this error will not matter, but if you are aligning holograms to real world posters/markers, for example, and you notice a <10px offset (roughly 11mm for holograms positioned 2 meters away) this distortion error could be the cause.

お持ちのカメラの使用シナリオLocatable Camera Usage Scenarios

キャプチャされた場所で写真またはビデオを表示するShow a photo or video in the world where it was captured

デバイスカメラのフレームには、イメージがどこで撮影されたかを正確に示すために使用できる "カメラからワールドへの変換" 変換が付属しています。The Device Camera frames come with a "Camera To World" transform, that can be used to show exactly where the device was when the image was taken. たとえば、小さな holographic アイコンをこの場所 (CameraToWorld (Vector3)) に配置して、カメラが直面している方向に小さな矢印を描画する (CameraToWorld) ことができます (Yvector (Vector3))。For example you could position a small holographic icon at this location (CameraToWorld.MultiplyPoint(Vector3.zero)) and even draw a little arrow in the direction that the camera was facing (CameraToWorld.MultiplyVector(Vector3.forward)).

タグ/パターン/ポスター/オブジェクトの追跡Tag / Pattern / Poster / Object Tracking

多くの mixed reality アプリケーションでは、認識可能なイメージまたはビジュアルパターンを使用して、空間内の追跡可能なポイントを作成します。Many mixed reality applications use a recognizable image or visual pattern to create a trackable point in space. その後、そのポイントを基準としてオブジェクトをレンダリングしたり、既知の場所を作成したりするために使用されます。This is then used to render objects relative to that point or create a known location. HoloLens の使用例としては、fiducials でタグ付けされた現実世界のオブジェクト (QR コードを使用したテレビモニターなど) の検索、fiducials に対するホログラムの配置、およびを介して HoloLens と通信するように設定されているタブレットなどの非 HoloLens デバイスとの視覚的なペアリングがあります。Wi-fi。Some uses for HoloLens include finding a real world object tagged with fiducials (e.g. a TV monitor with a QR code), placing holograms over fiducials, and visually pairing with non-HoloLens devices like tablets that have been setup to communicate with HoloLens via Wi-Fi.

ビジュアルパターンを認識し、そのオブジェクトをアプリケーションのワールド空間に配置するには、次のものが必要です。To recognize a visual pattern, and then place that object in the applications world space, you'll need a few things:

  1. 画像パターン認識ツールキット (QR コード、AR タグ、顔ファインダー、サークルトラッカー、OCR など)。An image pattern recognition toolkit, such as QR code, AR tags, face finder, circle trackers, OCR etc.
  2. 実行時にイメージフレームを収集して認識レイヤーに渡すCollect image frames at runtime, and pass them to the recognition layer
  3. 画像の位置を、世界中や世界中の写真に戻すことができます。Unproject their image locations back into world positions, or likely world rays. 参照先See
  4. これらの世界の場所に仮想モデルを配置するPosition your virtual models over these world locations

いくつかの重要な画像処理リンク:Some important image processing links:

対話型アプリケーションのフレームレートを維持することは、特に長時間実行されるイメージ認識アルゴリズムを扱う場合に重要です。Keeping an interactive application frame-rate is critical, especially when dealing with long-running image recognition algorithms. このため、一般的には次のパターンを使用します。For this reason we commonly use the following pattern:

  1. メインスレッド: カメラオブジェクトを管理しますMain Thread: manages the camera object
  2. メインスレッド: 新しいフレームの要求 (非同期)Main Thread: requests new frames (async)
  3. メインスレッド: 新しいフレームを追跡スレッドに渡しますMain Thread: pass new frames to tracking thread
  4. 追跡スレッド: キーポイントを収集するためのイメージの処理Tracking Thread: processes image to collect key points
  5. メインスレッド: 検出されるキーポイントに一致するように仮想モデルを移動しますMain Thread: moves virtual model to match found key points
  6. メインスレッド: 手順2の繰り返しMain Thread: repeat from step 2

一部のイメージマーカーシステムは、1ピクセルの位置のみを提供します (他のユーザーが完全変換を提供するため、このセクションは必要ありません)。これは、可能な場所の射線に相当します。Some image marker systems only provide a single pixel location (others provide the full transform in which case this section will not be needed), which equates to a ray of possible locations. 1つの3d 位置に移動するには、複数の光線を活用し、最終的な結果をおおよその交点で見つけることができます。To get to a single 3d location we can then leverage multiple rays and find the final result by their approximate intersection. これを行うには、次の手順を実行する必要があります。To do this you'll need to:

  1. 複数のカメライメージの収集を開始するループを取得するGet a loop going collecting multiple camera images
  2. 関連する特徴ポイントとそのワールド光線を検索するFind the associated feature points, and their world rays
  3. 特徴のディクショナリ (それぞれが複数のワールド線を持つ) がある場合は、次のコードを使用して、これらの光線の交差部分を解決できます。When you have a dictionary of features, each with multiple world rays, you can use the following code to solve for the intersection of those rays:
public static Vector3 ClosestPointBetweenRays(
   Vector3 point1, Vector3 normalizedDirection1,
   Vector3 point2, Vector3 normalizedDirection2) {
   float directionProjection = Vector3.Dot(normalizedDirection1, normalizedDirection2);
   if (directionProjection == 1) {
     return point1; // parallel lines
   }
   float projection1 = Vector3.Dot(point2 - point1, normalizedDirection1);
   float projection2 = Vector3.Dot(point2 - point1, normalizedDirection2);
   float distanceAlongLine1 = (projection1 - directionProjection * projection2) / (1 - directionProjection * directionProjection);
   float distanceAlongLine2 = (projection2 - directionProjection * projection1) / (directionProjection * directionProjection - 1);
   Vector3 pointOnLine1 = point1 + distanceAlongLine1 * normalizedDirection1;
   Vector3 pointOnLine2 = point2 + distanceAlongLine2 * normalizedDirection2;
   return Vector3.Lerp(pointOnLine2, pointOnLine1, 0.5f);
 }

複数の追跡タグの場所を指定すると、ユーザーの現在のシナリオに合わせてモデル化シーンを配置できます。Given two or more tracked tag locations, you can position a modelled scene to fit the users current scenario. 重力を想定できない場合は、3つのタグ位置が必要になります。If you can't assume gravity, then you'll need three tag locations. 多くの場合、ホワイト球体がリアルタイムで追跡されるタグ位置を表し、blue 球体がモデル化タグの場所を表す単純な配色を使用します。これにより、ユーザーは、配置の品質を視覚的に測定できます。In many cases we use a simple color scheme where white spheres represent real-time tracked tag locations, and blue spheres represent modelled tag locations, this allows the user to visually gauge the alignment quality. ここでは、すべてのアプリケーションで次のセットアップを想定しています。We assume the following setup in all our applications:

  • 2つ以上のモデル化タグの場所Two or more modelled tag locations
  • シーン内の1つの ' 調整スペース ' は、タグの親です。One 'calibration space' which in the scene is the parent of the tags
  • カメラの機能識別子Camera feature identifier
  • 調整領域を移動して、モデル化タグをリアルタイムタグに整列させる動作 (他の接続はその相対的な位置であるため、モデル化マーカー自体ではなく、親スペースを移動することは注意してください)。Behavior which moves the calibration space to align the modelled tags with the real-time tags (we are careful to move the parent space, not the modelled markers themselves, because other connect is positions relative to them).
// In the two tags case:
 Vector3 idealDelta = (realTags[1].EstimatedWorldPos - realTags[0].EstimatedWorldPos);
 Vector3 curDelta = (modelledTags[1].transform.position - modelledTags[0].transform.position);
 if (IsAssumeGravity) {
   idealDelta.y = 0;
   curDelta.y = 0;
 }
 Quaternion deltaRot = Quaternion.FromToRotation(curDelta, idealDelta);
 trans.rotation = Quaternion.LookRotation(deltaRot * trans.forward, trans.up);
 trans.position += realTags[0].EstimatedWorldPos - modelledTags[0].transform.position;

Led または他のレコグナイザーライブラリを使用して、タグ付き静止を追跡または特定したり、実際のオブジェクト/顔を移動したりします。Track or Identify Tagged Stationary or Moving real-world objects/faces using LEDs or other recognizer libraries

例 :Examples:

  • Led のある工業ロボット (または低速な移動オブジェクトの QR コード)Industrial robots with LEDs (or QR codes for slower moving objects)
  • ルーム内のオブジェクトを識別して認識するIdentify and recognize objects in the room
  • 部屋のメンバーを識別して認識します (たとえば、顔を holographic 連絡先カードを配置します)。Identify and recognize people in the room (e.g. place holographic contact cards over faces)

関連項目See also