# データのアップロード

データをアップロードしようとする前に、次を必ず確認してください [ここに記載されている手順](/ja/python-sdk/hajimeni.md) に従って SDK をセットアップしてください。

### 単一タイプのデータのアップロード

```py
from mindkosh import Client

## 指定したディレクトリ内にあるすべての画像ファイルをアップロードする
client.upload_data(
    dataset_id=dataset_id,
    resources=['/example_images/'],
    tags=['penguin'] ## optional
)

## または、アップロードするファイルを指定する
client.upload_data(
    dataset_id=dataset_id,
    resources=[
        '/home/user/Downloads/test1.pcd',
        '/home/user/Downloads/test2.pcd'
    ],
    tags=['forest'] ## optional
)
```

各ファイルに異なるタグを指定したい場合は、 `ImageFile` または `PointCloudFile` オブジェクトを使用できます。

```py
from mindkosh import Client, ImageFile

client.upload_imagefiles(
    dataset_id = dataset_id,
    imagefiles = [
        ImageFile(
            filepath='/path/to/image1',
            tags=["city1"]
        ),
        ImageFile(
            filepath='path/to/image2',
            tags=["city2"]
        )
    ]
)
```

{% hint style="info" %}
アップロードしたファイルが処理されるまで、最大 2 分かかる場合があります。アップロードしたデータでタスクを作成する前に、ファイルの処理が完了するまで少し時間を置いてください。UI を確認して、すべてのファイルが処理され、データセット内に表示されているかどうかを確認できます。
{% endhint %}

###

### lidar + カメラ データのアップロード

lidar 点群 + 参照カメラ画像をアップロードするには、点群ファイルオブジェクトを作成し、カメラ画像を `ImageFile` オブジェクトとして指定します。利用可能であれば、キャリブレーションパラメータを外部パラメータ（LiDAR からカメラへの投影用）および内部パラメータ（カメラから画像への投影用）として指定できます。これらのパラメータが指定されている場合、Mindkosh は参照カメラ画像上に直方体アノテーションを自動的に投影できます。

1. `intrinsic` - 次の形式で指定します `[fx, fy, cx, cy]` 。
2. `extrinsic` - 点群の参照座標系内の点をカメラの参照座標系に変換できる 4x4 変換行列として指定します。
3. `camera_model` - Mindkosh は 2 つのカメラモデルをサポートしています - `PINHOLE` （最も広く使用されているもの）と `FISHEYE` 。Fisheye のパラメータを指定する場合は、 `mirrorParameter` も設定する必要があります。
4. パラメータは、シーン全体で同じであっても、各カメラおよび各フレームごとに個別に設定します。
5. `device_id` - カメラを識別するために使用できる一意の番号です。カメラ間で一意であり、フレーム間で同じであれば、どの番号でも構いません。たとえば、左カメラと右カメラがある場合、すべてのフレームにわたってそれぞれにデバイス ID 1 と 2 を割り当てることができます。

{% hint style="danger" %}
**Mindkosh では、データセット内のすべてのファイルに一意の名前を付ける必要があります。つまり、カメラファイルの名前が同じ場合（たとえば、左カメラと右カメラの両方で同じ `timestamp.png` を使っている場合）、カメラの接頭辞を追加して名前が一意になるように変更する必要があります。**
{% endhint %}

```py
from mindkosh import Client, PointCloudFile

pointcloudFrames = []
pcdfile1 = PointCloudFile(
    filepath = '/file/path1/pcd1.pcd',
    related_files = [
        ImageFile(
            filepath='/path/to/image1.png',
            tags=[],
            extra={
                ## 内部カメラパラメータの値は次の順序で指定します: 
                ### [fx, fy, cx, cy]
                "intrinsic": [255.520403, 449.883682, 250.828738, 255.237477],

                ## 外部パラメータ。lidar から 
                ## カメラへの 4x4 投影行列を指定します
                "extrinsic": [
                    [-0.735827, -0.65789, -0.0384775, 0],
                    [0.6567956, -0.70452916, 0.00140833, 0],
                    [-0.02255652, -0.0248216, 0.9993586, 0],
                    [0, 0, 0, 1]
                ],

                # カメラ投影モデル - PINHOLE または FISHEYE
                # FISHEYE の場合は、mirrorParameter も指定する必要があります
                "cameraModel": "PINHOLE",
                ## デバイス ID は各カメラで一意でなければなりません。
                "device_id": 1
            }
        )
    ]
)

pointcloudFiles.append(pcdfile1)

client.upload_pointcloud_data(dataset_id=datasetId, pointcloudfiles=pointcloudFrames)
```


---

# Agent Instructions: Querying This Documentation

If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter:

```
GET https://docs.mindkosh.com/ja/python-sdk/dtanoappurdo.md?ask=<question>
```

The question should be specific, self-contained, and written in natural language.
The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
