場所を特定できるカメラ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メディアのキャプチャHoloLens では、windows メディア ファンデーション モバイルとデスクトップで機能する Api の動作。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 (第 1 世代)HoloLens (first-generation)

  • 固定のフォーカス写真/ビデオ (PV) カメラでは、自動ホワイト バランス、自動公開、および完全なイメージ処理のパイプを使用Fixed focus photo/video (PV) camera, with auto white balance, auto exposure, and full image processing pipe

  • カメラがアクティブなときに世界が直面しているホワイト プライバシー 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 水平視野 (FOV H)Horizontal Field of View (H-FOV) 推奨される使用状況Suggested usage
    1280 x 7201280x720 1280 x 7201280x720 1280 x 7201280x720 45deg45deg (既定のモードでビデオ安定化)(default mode with video stabilization)
    なしN/A なしN/A 2048 x 11522048x1152 67deg67deg 最高の解像度の静止画Highest resolution still image
    1408 x 7921408x792 1408 x 7921408x792 1408 x 7921408x792 48deg48deg ビデオ安定化する前にオーバー (埋め込み) の解決Overscan (padding) resolution before video stabilization
    1344 x 7561344x756 1344 x 7561344x756 1344 x 7561344x756 67deg67deg オーバーでの大規模な FOV ビデオ モードLarge FOV video mode with overscan
    896 x 504896x504 896 x 504896x504 896 x 504896x504 48deg48deg 低電力]、[イメージの低解像度モード処理タスク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 pipe

  • カメラがアクティブなときに世界が直面しているホワイト プライバシー LED が点灯します。White Privacy LED facing the world will illuminate whenever the camera is active

  • カメラには、(すべてのビデオ モードはアスペクト比 16:9)、次のモードがサポートされています。The camera supports the following modes (all video modes are 16:9 aspect ratio):

    注意

    これらのモードは、HoloLens 2 一般公開前に変更される可能性が。These modes are subject to change prior to HoloLens 2 general availability.

    VideoVideo [プレビュー]Preview それでもなおStill フレーム レートFrame rates 水平視野 (FOV H)Horizontal Field of View (H-FOV) 推奨される使用状況Suggested usage
    1920 x 10801920x1080 1920 x 10801920x1080 なしN/A 30、15 fps30, 15 fps 54deg54deg (既定のモードでビデオ安定化)(default mode with video stabilization)
    なしN/A なしN/A 3904 X 21963904X2196 なしN/A 64deg64deg 最高の解像度の静止画Highest resolution still image
    2272 x 12782272x1278 2272 x 12782272x1278 なしN/A 30、15 fps30, 15 fps 64deg64deg ビデオ安定化する前にオーバー (埋め込み) の解決Overscan (padding) resolution before video stabilization
    1952 x 11001952x1100 1952 x 11001952x1100 1952 x 11001952x1100 30、15 fps30, 15 fps 64deg64deg 高品質のストリーミングHigh-quality streaming
    1280 x 7201280x720 1280 x 7201280x720 なしN/A 30、15、5 fps30, 15, 5 fps 64deg64deg イメージ処理タスクのストリーミングと低電源/解像度モードLow power/resolution mode for streaming and image processing tasks

世界中で、デバイスのカメラを検索します。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 がありますもMedia Foundation 属性します。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 顔をサンプルの追跡詳細についてはします。Please refer to the Holographic face tracking sample for more information.

座標系を使用したイメージImages with Coordinate Systems

各イメージのフレーム (かどうか写真またはビデオ) が含まれています、 SpatialCoordinateSystemを使用してアクセスできるキャプチャ時に、カメラをルートと、 CoordinateSystemプロパティ、のMediaFrameReferenceします。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. 同時に、これらの変換の定義の各ピクセル光線ピクセルを生成した光子で使用されるパスを表す 3 次元空間で。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 は、(ため CameraCoordinateSystem 変換について心配する必要はありません) に自動的に PhotoCaptureFrame クラスによって提供されます。Locatable camera in Unity: CameraToWorldMatrix is automatically provided by PhotoCaptureFrame class(so you don't need to worry about the CameraCoordinateSystem transforms).

DirectX の場所を特定できるカメラ:カメラの座標系と独自アプリケーション coordinate system(s) 間で変換を照会する非常に簡単な方法を示しています。Locatable camera in DirectX: 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、ビデオおよび静止画像ストリームされない、システムのイメージ処理パイプラインでは変形 (プレビュー ストリームは、元の歪んだフレームを含む)、アプリケーションで使用できるように、フレーム前にします。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 のみが利用できるので、アプリケーションが最適な一カメラにはイメージ フレームを表しますの想定する必要があります、ただし、歪みを除去にはイメージ プロセッサで機能可能性がありますもままに最大 10 個のピクセルのエラー HoloLens で (第 1 世代)フレームのメタデータで、CameraIntrinsics を使用する場合。Because only the CameraIntrinsics are made available, applications must assume image frames represent a perfect pinhole camera, however the undistortion function in the image processor may still leave an error of up to 10 pixels on HoloLens (first-generation) 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

デバイスのカメラのフレームには"カメラ World"の変換になり、イメージが作成されたときに、デバイスの正確なが表示に使用できます。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.MultiplyPoint(Vector3.zero)) およびも描画カメラには (CameraToWorld.MultiplyVector(Vector3.forward)) が直面していました方向に小さな矢印は、この場所に配置する例。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

複合現実の多くのアプリケーションでは、認識可能なイメージや視覚的なパターンを使用して、領域に適したポイントを作成します。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 の使用は、調べて (例: QR コードをテレビ モニター) でタグ付けされた現実の世界のオブジェクトを検索、ホログラムを調べて、経由で配置する視覚的に経由での 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. イメージのパターン認識ツールキット円トラッカー、OCR など、QR コード、AR タグ、顔 finder など。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 します。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);
 }

2 つ以上の追跡対象タグの場所を指定するには、ユーザーの現在のシナリオに合わせて modelled シーンを配置できます。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. 使用して多くの場合白の球体がリアルタイムを表す単純な配色、タグの場所を追跡して青の球体がモデル化のタグの場所を表す、これにより、ユーザーを視覚的に配置の品質を測定します。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
  • (は親領域自体、modelled マーカーいないを移動するように注意してください。 他の接続がそれらの相対位置であるため)、リアルタイムのタグを使用して、modelled タグに合わせて調整領域を移動する動作。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