> For the complete documentation index, see [llms.txt](https://docs.roboflow.com/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://docs.roboflow.com/roboflow/roboflow-ko/guides/run-a-model-locally.md).

# 로컬에서 모델 실행

[Roboflow Inference](https://inference.roboflow.com/) Roboflow의 호스팅 모델 뒤에 있는 무료 오픈 소스 엔진입니다. 동일한 모델을 자신의 컴퓨터에서 실행할 수 있습니다. Docker 컨테이너에서 inference server를 시작한 다음 HTTP 또는 Python으로 이미지를 전송하세요 [Inference SDK](https://inference.roboflow.com/inference_helpers/inference_sdk/). 직접 실행하면 이미지는 자신의 기기에만 유지되며 설정을 완전히 제어할 수 있습니다.

## 내 머신에서 모델 실행

{% tabs %}
{% tab title="HTTP (Python)" icon="webhook" %}
{% stepper %}
{% step %}

### inference server 시작

`inference server 시작` 을 실행합니다 [Inference Server](https://inference.roboflow.com/quickstart/docker/) 를 Docker 컨테이너에서 실행하며 하드웨어에 맞는 올바른 버전: CPU, NVIDIA GPU 또는 Jetson을 선택합니다. [Docker](https://docs.docker.com/get-docker/) 가 설치되어 실행 중이어야 합니다.

```bash
pip install inference-cli && inference server start
```

서버는 다음에서 수신 대기합니다 `http://localhost:9001`. 기기별 설정 및 문제 해결은 다음을 참고하세요: [Inference 설치 가이드](https://inference.roboflow.com/install/).
{% endstep %}

{% step %}

### 종속성을 설치하세요

`supervision` 결과를 그려 넣고 다음을 가져옵니다 `cv2` 및 `numpy`:

```bash
pip install supervision
```

{% endstep %}

{% step %}

### 모델을 실행하세요

이미지를 로컬 서버로 전송하고 바로 사용할 수 있는 [RF-DETR](/roboflow/roboflow-ko/deploy/supported-models/rf-detr.md) 모델을 실행합니다. 이처럼 바로 사용할 수 있는 모델은 API 키가 필요하지 않습니다:

```python
import base64
import cv2
import numpy as np
import requests
import supervision as sv

content = requests.get("https://media.roboflow.com/quickstart/cars.jpg").content
image = cv2.imdecode(np.frombuffer(content, np.uint8), cv2.IMREAD_COLOR)
image_b64 = base64.b64encode(content).decode("utf-8")

result = requests.post(
    "http://localhost:9001/coco/38",  # coco/38 == rfdetr-nano
    data=image_b64,  # raw base64 in the body
    headers={"Content-Type": "application/x-www-form-urlencoded"},
).json()
detections = sv.Detections.from_inference(result)
print(f"객체 {len(detections)}개를 찾았습니다")

annotated = sv.BoxAnnotator().annotate(image.copy(), detections)
annotated = sv.LabelAnnotator().annotate(annotated, detections)
cv2.imwrite("output.jpg", annotated)
```

{% endstep %}
{% endstepper %}
{% endtab %}

{% tab title="SDK (Python)" icon="python" %}
{% stepper %}
{% step %}

### inference server 시작

`inference server 시작` 을 실행합니다 [Inference Server](https://inference.roboflow.com/quickstart/docker/) 를 Docker 컨테이너에서 실행하며 하드웨어에 맞는 올바른 버전: CPU, NVIDIA GPU 또는 Jetson을 선택합니다. [Docker](https://docs.docker.com/get-docker/) 가 설치되어 실행 중이어야 합니다.

```bash
pip install inference-cli && inference server start
```

서버는 다음에서 수신 대기합니다 `http://localhost:9001`. 기기별 설정 및 문제 해결은 다음을 참고하세요: [Inference 설치 가이드](https://inference.roboflow.com/install/).
{% endstep %}

{% step %}

### SDK 설치

`supervision` 결과를 그려 넣고 다음을 가져옵니다 `cv2` 및 `numpy`:

```bash
pip install inference-sdk supervision
```

{% endstep %}

{% step %}

### 모델을 실행하세요

클라이언트를 로컬 서버에 연결하고 바로 사용할 수 있는 [RF-DETR](/roboflow/roboflow-ko/deploy/supported-models/rf-detr.md) 모델을 실행합니다. 이처럼 바로 사용할 수 있는 모델은 API 키가 필요하지 않습니다:

```python
import cv2
import numpy as np
import requests
import supervision as sv
from inference_sdk import InferenceHTTPClient

content = requests.get("https://media.roboflow.com/quickstart/cars.jpg").content
image = cv2.imdecode(np.frombuffer(content, np.uint8), cv2.IMREAD_COLOR)

client = InferenceHTTPClient(api_url="http://localhost:9001")
result = client.infer(image, model_id="rfdetr-nano")

detections = sv.Detections.from_inference(result)
print(f"객체 {len(detections)}개를 찾았습니다")

annotated = sv.BoxAnnotator().annotate(image.copy(), detections)
annotated = sv.LabelAnnotator().annotate(annotated, detections)
cv2.imwrite("output.jpg", annotated)
```

{% endstep %}
{% endstepper %}
{% endtab %}
{% endtabs %}

첫 번째 요청은 모델을 다운로드하므로 몇 초가 걸릴 수 있습니다. 이후 요청은 빠릅니다.

<figure><img src="/files/648683dcf0a9ee9a7b9bf970fd74fc6717f2c9fb" alt="RF-DETR car and truck bounding boxes on a road scene"><figcaption><p>로컬 inference server의 RF-DETR 탐지 결과</p></figcaption></figure>

## 비디오 처리

비디오에서 모델을 실행하려면 비디오를 서버로 보내고, 재생되는 동안 박스가 이미 그려진 각 프레임을 돌려받습니다. 컴퓨터가 따라가지 못하면 서버가 실시간 유지를 위해 프레임을 건너뜁니다. 이 기능은 Python SDK와 [Workflow](/roboflow/roboflow-ko/workflows/what-is-workflows.md): 모델을 실행하고 결과를 대신 그려주는 저장된 설정입니다.

{% hint style="info" %}
또한 위의 이미지 예시와 같은 방식으로 한 번에 한 프레임씩 전송하여 HTTP로 비디오에서 모델을 실행할 수도 있습니다(스트리밍 추가 기능 불필요). 이 방식은 더 느립니다. 다음 프레임이 시작되기 전에 각 프레임을 전송하고, 처리하고, 그려야 하므로 중간에 대기 시간이 많이 발생합니다. SDK는 전체 비디오를 스트리밍하고 여러 프레임을 동시에 처리하므로 훨씬 더 잘 따라갑니다.
{% endhint %}

{% stepper %}
{% step %}

### SDK 설치

비디오 스트리밍에는 `webrtc` 추가 기능이 필요합니다:

```bash
pip install "inference-sdk[webrtc]"
```

{% endstep %}

{% step %}

### 비디오에서 모델 실행

```python
import cv2
from inference_sdk import InferenceHTTPClient
from inference_sdk.webrtc import VideoFileSource
import supervision as sv

client = InferenceHTTPClient.init(api_url="http://localhost:9001")

# 비디오 다운로드+캐시
source = VideoFileSource("https://media.roboflow.com/quickstart/cars.mp4")
# 최적화된 비디오 스트리밍을 위해 webrtc 사용
session = client.webrtc.stream(
    source=source,
    model_id="rfdetr-nano"
)

# on_frame은 메인 스레드에서 실행되므로 cv2.imshow는 안전합니다
@session.on_frame
def show(frame, data):
    det = sv.Detections.from_inference(data)
    img = sv.BoxAnnotator().annotate(frame, det)
    img = sv.LabelAnnotator().annotate(img, det)
    cv2.imshow("RF-DETR", img)
    if cv2.waitKey(1) == ord("q"):
        session.close()

session.run()
cv2.destroyAllWindows()
```

{% endstep %}
{% endstepper %}

{% embed url="<https://media.roboflow.com/quickstart/cars-rfdetr-out.mp4>" %}

더 풍부한 파이프라인(추적, 필터링, 영역, 알림)을 시각적으로 구성한 다음, [Workflows 편집기](/roboflow/roboflow-ko/workflows/create-a-workflow.md)에서 시각적으로 구성한 다음, 같은 방식으로 실행하세요. 엣지 및 비디오 스트림 배포에 대해서는 다음을 참고하세요 [Workflow 배포](/roboflow/roboflow-ko/workflows/deploy-a-workflow.md).

## 기타 옵션

* 하드웨어를 직접 실행하지 않는 관리형 엔드포인트를 선호하시나요? 다음을 사용하세요: [Dedicated Deployment](/roboflow/roboflow-ko/deploy/dedicated-deployments.md) 또는 [Serverless Hosted API](/roboflow/roboflow-ko/deploy/serverless-hosted-api-v2.md).
* 온프레미스, 에어갭 또는 Kubernetes 배포가 필요하신가요? 다음을 참고하세요: [Enterprise Deployment](/roboflow/roboflow-ko/deploy/enterprise-deployment.md).
* 모든 옵션 비교: [Model 또는 Workflow 배포](/roboflow/roboflow-ko/deploy/deployment-overview.md).
