RoboCam


NameRoboCam JSON
Version 1.0.0.34 PyPI version JSON
download
home_pagehttps://eng.roborobo.co.kr/main
SummaryPython library for RoboCam
upload_time2023-11-02 06:27:34
maintainer
docs_urlNone
authorRoborobo
requires_python>=3
licenseMIT
keywords robocam roborobo
VCS
bugtrack_url
requirements No requirements were recorded.
Travis-CI No Travis.
coveralls test coverage No coveralls.
            # **RoboCam**
# **1. RoboCam Python Library 소개**
RoboCam Python Library는 Python에서 RoboCam을 사용하여 영상 스트리밍 및 영상처리 기능을 쉽게 사용할 수 있도록 도와주는 라이브러리입니다.
# **2. 설치 및 삭제**
해당 라이브러리의 경우 타 라이브러리와의 상호작용이 많아 버전에 민감하므로 가상환경을 사용하는 것을 권장합니다. (2.1 가상환경 생성 및 실행 참조) 
## **2.1. 가상환경 생성 및 실행** 
### **2.1.1 Powershell 보안 해제**
Powershell을 관리자 권한으로 열고 아래의 명령어를 입력합니다. 
```powershell
Set-ExecutionPolicy Unrestricted
```

### **2.1.2 Python 프로젝트를 실행할 폴더 접근**
Powershell, VSCode Terminal 등을 이용하여 아래의 예시와 같이 프로젝트 폴더에 접근합니다.
```powershell
cd C:\Workspace\python-sample
```
### **2.1.3 Python 프로젝트를 실행할 폴더 접근**
Powershell, VSCode Terminal 등을 이용하여 아래의 예시와 같이 프로젝트 폴더에 접근합니다.
```powershell
cd C:\Workspace\python-sample
```
### **2.1.4 가상 환경 생성**
아래의 명령어를 입력하여 python 가상 환경을 생성합니다. 
```powershell
python -m venv .venv
```
(python2.7 버전과 python3.xx 버전이 동시에 설치되어 정상 작동이 되지 않는 경우 아래의 코드를 사용합니다.) <pre><code>python3 -m -venv .venv</code></pre>
### **2.1.5 Python 가상 환경 활성화**
아래의 명령어를 입력하여 가상환경을 활성화합니다. 정상적으로 활성화된 경우 터미널 좌측에 (.venv)의 문자열이 추가됩니다. 앞으로의 실행에 있어 새 창의 터미널을 실행하는 경우 항상 해당 명령어를 사용하여 가상 환경을 활성화하여 사용합니다.
```powershell
.venv\Scripts\activate
```
### **2.1.6 가상 환경에 RoboCam 설치**
아래의 명령어를 입력하여 가상 환경에 RoboCam 패키지를 설치합니다.
```powershell
pip install robocam
```
(python2.7 버전과 python3.xx 버전이 동시에 설치되어 정상 작동이 되지 않는 경우 아래의 코드를 사용합니다.) <pre><code>pip3 install robocam</code></pre>

### **2.1.7 설치된 라이브러리 버전 확인**

 아래의 명령어를 실행하고, '**5.1 권장 패키지 버전**'을 참조하여 라이브러리 버전 정보가 일치하는 지 확인합니다. (opencv-python-contrib, numpy, tensorflow, tflite 중심으로 확인)
```powershell
pip list
```
### **2.1.8 가상 환경에서 Python 코드 실행(Powershell 명령어 입력)**
python 코드를 실행하기 전에 powershell(또는 VSCode 터미널) 앞에 (.**venv**)표기가 있는지 확인하고 기존과 동일하게 python 명령어를 사용하여 코드를 실행합니다.
```powershell
python python-test.py
```
### **2.1.8.1 가상 환경에서 Python 코드 실행(VSCode F5 눌러서 실행)**
1. ***Ctrl+Shift+P*** 를 입력합니다.
2. ***Python: Select Interpreter***를 입력하여 클릭합니다.
3. 프로젝트 폴더 안에 있는 python.exe를 선택합니다. (ex. C:\Workspace\python-sample\.venv\Script\pytho.exe)
4. ***F5***를 눌러 실행합니다.
## **2.2. 설치 (전체 환경)**
아래의 명령을 실행하시면 RoboCam이 설치됩니다.
```powershell
 pip3 install RoboCam
```
최신 버전이 설치되지 않는다면 아래의 명령을 사용하시기를 바랍니다.
```powershell
 pip3 --no-cache-dir install RoboCam
```
### **2.2.1. 필요 라이브러리**
라이브러리 설치시에는 꼭! 관리자 권한으로 설치해야 합니다.(가상환경 )

인식 정보를 전달 하기 위한 numpy라이브러리가 필요합니다. 아래의 명령을 실행하시면 numpy가 설치됩니다.
```powershell
pip3 install numpy
```
영상 처리를 위해 opencv2 라이브러리가 필요합니다. 아래의 명령을 실행하시면 opencv2가 설치됩니다.
해당 명령을 통해 opencv2의 설치 및 최신화를 할 수 있습니다.
```powershell
pip3 install opencv-contrib-python
pip3 install --upgrade opencv-contrib-python
```powershell
인공지능 처리를 위해 tensorflow 라이브러리가 필요합니다. 아래의 명령을 실행하시면 tensorflow가 설치됩니다.
해당 명령을 통해 tensorflow 의 설치 및 최신화를 할 수 있습니다.
```powershell
pip3 install tensorflow
pip3 install --upgrade tensorflow
```
인공지능 처리를 위해 tflite 라이브러리가 필요합니다. 아래의 명령을 실행하시면 tflite가 설치됩니다.
해당 명령을 통해 tflite의 설치 및 최신화를 할 수 있습니다.
```powershell
pip3 install tflite
pip3 install --upgrade tflite
```
### **2.2.2. 업그레이드**
최신 버전으로 업그레이드 하시려면 아래의 명령을 실행하시면 됩니다.
```powershell
pip3 install --upgrade RoboCam
```
### **2.2.3. 라이브러리 재설치**

이전 버전을 설치한 경우 & 가상환경 사용이 불가한 경우

```
absl-py==1.4.0
astunparse==1.6.3
cachetools==5.3.1
certifi==2023.5.7
charset-normalizer==3.1.0
flatbuffers==23.5.26
gast==0.4.0
google-auth==2.21.0
google-auth-oauthlib==1.0.0
google-pasta==0.2.0
grpcio==1.56.0
h5py==3.9.0
idna==3.4
jax==0.4.13
keras==2.12.0
libclang==16.0.0
Markdown==3.4.3
MarkupSafe==2.1.3
ml-dtypes==0.2.0
numpy==1.23.5
oauthlib==3.2.2
opencv-contrib-python==4.7.0.72
opt-einsum==3.3.0
packaging==23.1
protobuf==4.23.3
pyasn1==0.5.0
pyasn1-modules==0.3.0
requests==2.31.0
requests-oauthlib==1.3.1
RoboCam==1.0.0.31
rsa==4.9
scipy==1.11.1
six==1.16.0
tensorboard==2.12.3
tensorboard-data-server==0.7.1
tensorflow==2.12.0
tensorflow-estimator==2.12.0
tensorflow-intel==2.12.0
tensorflow-io-gcs-filesystem==0.31.0
termcolor==2.3.0
tflite==2.10.0
typing_extensions==4.7.1
urllib3==1.26.16
Werkzeug==2.3.6
wrapt==1.14.1
```

1. 위의 텍스트를 복사하여 .txt 파일로 저장합니다.
2.  pip를 이용하여 관련 라이브러리를 모두 삭제합니다.<br>
정상적인 삭제가 안되는 경우 **Powershell**을 **관리자 권한**으로 열어 해당 명령어를 입력합니다. <pre>pip uninstall -r "파일 경로" -y <br><br>(ex. pip uninstall -r "C:\Users\david\Documents\KakaoTalk Downloads\robocam_lib_version.txt" -y)</pre>

3. RoboCam Library를 재설치합니다.<br>정상적인 설치가 안되는 경우 **Powershell**을 **관리자 권한**으로 열어 해당 명령어를 입력합니다.<br><pre>pip install robocam</pre>

4. 정상적으로 설치되었는지 확인합니다. 하단의 '*5.1 권장 패키지 버전*' 에 있는 패키지 버전과 대조하여 확인합니다.<pre>pip list</pre>


### **2.2.4 삭제**
아래의 명령을 실행하시면 RoboCam이 삭제됩니다.
```powershell
 pip3 uninstall RoboCam
```
# **3 실습 예제**

## **3.1 얼굴 인식**

### 3.1.1 예시 코드

```python
from RoboCam.robocam import *
rCam = RoboCam()
rCam.CameraStreamInit()
rCam.CameraStream()
rCam.FacedetectorInit()
rCam.FacedetectorStart()
rCam.TrainFaceData()

while(True):
    print("======================================")
    print("사용할 기능을 확인해 주세요.")
    print("1) capture")
    print("2) train")
    print("3) delete")
    print("======================================")

    ins = input("입력해주세요 : ")

    if ins == 'train':
        rCam.TrainFaceData()
    elif ins == 'capture':
        name = input("저장할 이름을 입력하세요. :)")
        rCam.FaceCapture(name)
    elif ins == 'delete':
        name = input("삭제할 이름을 입력하세요. :")
        rCam.DeleteFaceData(name)
    else :
        print("잘못된 명령어입니다. 다시 입력해 주세요.")
```

## **3.2 숫자 인식**

### **3.2.1 조건**
- 숫자는 테두리가 두꺼운 정사각형 안에 있어야 합니다
- 글꼴에 대한 의존도가 높아 적절한 폰트를 사용해서 테스트해야 합니다.

### **3.2.2 예시 코드**

```python
from RoboCam.robocam import *
from time import sleep
rCam = RoboCam()
rCam.CameraStreamInit()
rCam.CameraStream()
rCam.NumberRecognizerInit()
rCam.NumberRecognizerStart()

while(True):
    k = input("Type \'q\' to exit : ")
    if k == "q":
        rCam.end()
    else:
        print("wrong input")
    sleep(0.01)
```

## **3.3 스케치 인식**

### **3.3.1 설정**

- 스케치는 테두리가 두꺼운 정사각형 안에 있어야 합니다

### **3.3.2 예시 코드**

```python
from RoboCam.robocam import *
from time import sleep
rCam = RoboCam()
rCam.CameraStreamInit()
rCam.CameraStream()
rCam.SketchDetectorInit()
rCam.SketchDetectorStart()

while(True):
    k = input("capture:1\ntrain:2\ndelete:3\nend:4\nPlz input a direction : ")
    if k == "1":
        _name = input("name?: ")
        rCam.SketchCapture(_name)
    elif k == "2":
        rCam.TrainSketchData()
    elif k == "3":
        _name = input("what do you want to delete")
        rCam.DeleteSketchData(_name)
    elif k == "4":
        rCam.end()
    else:
        print("wrong input")
    sleep(0.01)
```

## **3.4 Aruco Marker 인식**

### **3.4.1 설정**

- 다음 사이트에 접속하여 ***“Dictionary”의*** 드롭다운을 눌러 ***“Original ArUco”***로 설정합니다. <br>( [https://chev.me/arucogen/](https://chev.me/arucogen/) )

### **3.4.2 예시 코드**

```python
from RoboCam.robocam import *
from time import sleep
rCam = RoboCam()
rCam.CameraStreamInit()
rCam.CameraStream()
rCam.ArucoDetectorInit()
rCam.ArucoDetectorStart()

while(True):
    k = input("Type \'q\' to exit : ")
    if k == "q":
        rCam.end()
    else:
        print("wrong input")
    sleep(0.01)
```

## **3.5 DrawXXX Function 계열 사용**

### **3.5.1 설명**

- 캔버스에 특정 매개변수(또는 테두리)를 그릴지 여부에 사용됩니다
### **3.5.2 예시 코드**

```python
from RoboCam.robocam import *
from time import sleep
rCam = RoboCam()
rCam.CameraStreamInit()
rCam.CameraStream()
rCam.ArucoDetectorInit()
rCam.ArucoDetectorStart()

while(True):
    k = input("View it's size(y/n) : ")
    if k == "q":
        rCam.end()
    elif k == "y":
        rCam.DrawArucoSize(True)
    elif k == "n":
        rCam.DrawArucoSize(False)
    else:
        print("wrong input")
    sleep(0.01)
```

## **3.6 Robocam RobokitRS 연동**

### **3.6.1 예제**

- RoboCam으로 스케치를 인식하고 따라가는 예제입니다.
- 따라갈 스케치의 이름을 입력하고 3초 내로 스케치를 등록한 다음, 프로그램을 마치고 싶을 때 사용할 스케치를 추가로 등록합니다.
- 이후 Servo Motor의 각도가 0도가 된 이후로 사전에 입력해 둔 스케치를 카메라에 비추고, 이동시키며 카메라의 각도가 바뀌며 따라오는지 테스트합니다.
- 종료하기 위해서는 종료 스케치를 카메라 중앙에 비치도록 합니다.

### **3.6.2 조립**

- RoboCam을 정방향으로 하여 자사 Servo Motor의 축과 RoboCam의 시야가 수평하도록 결합합니다.
- Servo Motor는 RS Board의 ***D2***에 연결합니다.

### **3.6.3 코드**

```python
from RobokitRS import *
from RoboCam.robocam import *
from time import sleep

rs = RobokitRS.RobokitRS()
rCam = RoboCam()

rCam.CameraStreamInit()
rCam.CameraStream()
rCam.SketchDetectorInit()
rCam.SketchDetectorStart()

if __name__ == "__main__":
    rs.port_open("COM5")
    sketch = input("Plz type a name of sketch to follow")
    rCam.SketchCapture(sketch)
    sleep(3)
    rCam.SketchCapture("End")
    sleep(3)
    print("Capture Complete")
    rCam.TrainSketchData()
    servo_angle = 0
    servo_max = 110
    servo_min = -110
    servo_speed = 5
    moving_cw = True
    while True:
        if rCam.GetSketchExist(sketch):
            cor = rCam.GetSketchCenterPoint(sketch)
            if cor[0]>300 and servo_angle<servo_max:
                servo_angle+=servo_speed
            elif cor[0]<150 and servo_angle>servo_min:
                servo_angle-=servo_speed
        if rCam.GetSketchExist("End"):
            end_cor = rCam.GetSketchCenterPoint("End")
            if end_cor[0]<300 and end_cor[0]>150:
                rCam.CameraStreamOff()
                rs.end()
        rs.servo_write(2, servo_angle)
        sleep(0.2)
```

# 4 **라이브러리 업데이트**
## **v1.0.0.32 (Oct, 16th)**
### **오탈자 수정**
GetMousePoint() → GetMouthPoint()

# **5 부록**
## **5.1 권장 패키지 버전**

| Package Name | Version | Command | Link |
| --- | --- | --- | --- |
| absl-py | 1.4.0 |  |  |
| astunparse | 1.6.3 |  |  |
| cachetools | 5.3.1 |  |  |
| certifi | 2023.5.7 |  |  |
| charset-normalizer | 3.1.0 |  |  |
| flatbuffers | 23.5.26 |  |  |
| gast | 0.4.0 |  |  |
| google-auth | 2.21.0 |  |  |
| google-auth-oauthlib | 1.0.0 |  |  |
| google-pasta | 0.2.0 |  |  |
| grpcio | 1.56.0 |  |  |
| h5py | 3.9.0 |  |  |
| idna | 3.4 |  |  |
| jax | 0.4.13 |  |  |
| keras | 2.12.0 |  |  |
| libclang | 16.0.0 |  |  |
| Markdown | 3.4.3 |  |  |
| MarkupSafe | 2.1.3 |  |  |
| ml-dtypes | 0.2.0 |  |  |
| numpy | 1.23.5 | pip install numpy==1.23.5 | https://pypi.org/project/numpy/1.23.5/ |
| oauthlib | 3.2.2 |  |  |
| opencv-contrib-python | 4.7.0.72 | pip install opencv-contrib-python==4.7.0.72 | https://pypi.org/project/opencv-contrib-python/4.7.0.72/ |
| opt-einsum | 3.3.0 |  |  |
| packaging | 23.1 |  |  |
| protobuf | 4.23.3 |  |  |
| pyasn1 | 0.5.0 |  |  |
| pyasn1-modules | 0.3.0 |  |  |
| requests | 2.31.0 |  |  |
| requests-oauthlib | 1.3.1 |  |  |
| RoboCam | 1.0.0.32 |  |  |
| rsa | 4.9 |  |  |
| scipy | 1.11.1 |  |  |
| six | 1.16.0 |  |  |
| tensorboard | 2.12.3 |  |  |
| tensorboard-data-server | 0.7.1 |  |  |
| tensorflow | 2.12.0 | pip install tensorflow==2.12.0 | https://pypi.org/project/tensorflow/2.12.0/ |
| tensorflow-estimator | 2.12.0 |  |  |
| tensorflow-intel | 2.12.0 |  |  |
| tensorflow-io-gcs-filesystem | 0.31.0 |  |  |
| termcolor | 2.3.0 |  |  |
| tflite | 2.10.0 | pip install tflite==2.10.0 | https://pypi.org/project/tflite/2.10.0/ |
| typing_extensions | 4.7.1 |  |  |
| urllib3 | 1.26.16 |  |  |
| Werkzeug | 2.3.6 |  |  |
| wrapt | 1.14.1 |  |  |

## **5.2 시스템**
### **5.2.1 CameraEvents**
카메라 이벤트 RoboCam 모듈이 발생시킬 수 있는 이벤트 목록입니다. 얼굴 감지, 얼굴랜드마크 감지, Aruco마커 감지, 그림 감지, 숫자 감지를 지원합니다.
```python
class CameraEvents(enum.Enum):
    RECV_DETECTED_FACE_COUNT = 1
    RECV_DETECTED_FACE_NAME = 2
    RECV_DETECTED_FACE_RECT = 3
    RECV_LEFT_IRIS_POINT = 4
    RECV_LEFT_EYEBROW_POINT = 5
    RECV_RIGHT_IRIS_POINT = 5
    RECV_RIGHT_EYEBROW_POINT = 6
    RECV_NOSE_POINT = 7
    RECV_MOUSE_POINT = 8
    RECV_JAW_POINT = 9
    RECV_ARUCO_ID = 10
    RECV_ARUCO_IDS = 11
    RECV_ARUCO_CENTER_POINTS = 12
    RECV_ARUCO_RECT_POINTS = 13
    RECV_ARUCO_ANGLE = 14
    RECV_SKETCH_NAME = 15
    RECV_NUMBERS = 16
```
## **5.3 RoboCam 클래스**
### **5.3.1 RoboCam 클래스 생성자**
RoboCam 클래스의 생성자는 다음과 같습니다.
```
def __init__(self):
```
별도의 인자를 갖지 않으며, 객체를 생성할 경우, 각각의 영상인식 모듈을 초기화 하고, 대기합니다.

### **5.3.2 RoboCam 클래스의 public 함수 구성**
#### **5.3.2.1 Event 함수**
| 이름 | 설명 |
| --- | --- |
| SetEventHandler<br>(event:CameraEvents, func)	|event가 인식되었을 때 호출될 func을 등록합니다. <br><br>**▶ event**<br> 영상처리 모듈이 발생시키는 이벤트 종류입니다. CameraEvents를 참조하십시오. <br>**▶ func**<br>영상처리 모듈이 이벤트를 발생시켰을 때, 호출될 함수포인터입니다. 매개변수를 확인하여 사용해야합니다.|
|RemoveEventHandler<br>(event:CameraEvents)|등록된 event를 더 이상 발생시키지 않기 위해, 제거하는 함수입니다.<br><br>**▶ event**<br> 영상처리 모듈이 발생시키는 이벤트 종류입니다. CameraEvents를 참조하십시오.|
#### **5.3.2.2 Stream 함수**
| 이름 | 설명 |
| --- | --- |
|CameraStreamInit<br>(width:int = 512, height:int = 512)|RoboCam의 스트리밍을 준비하는 함수입니다. width x height의 해상도로 스트리밍 됩니다.<br>함수 호출 전, RoboCam과 와이파이 연결이 되어있어야합니다.<br><br> RoboCam의 기본 주소는 http://192.168.4.1:81/stream 입니다.<br><br>**▶ width**<br>RoboCam의 가로 해상도입니다. (기본값 : 512)<br>**▶ height**<br>RoboCam의 세로 해상도입니다. (기본값 : 512)|
|CameraStream()|RoboCam의 영상스트리밍을 시작하는 함수입니다.|
|CameraStreamInit|함수가 호출된 후 사용해야합니다.|
|CameraStreamOff()|RoboCam의 영상스트리밍을 종료하는 함수입니다.
|WebcamStreamInit<br>(width:int = 640, height:int = 480)|Webcam의 스트리밍을 준비하는 함수입니다. width x height의 해상도로 스트리밍 됩니다.<br>함수 호출 전, Webcam과 USB 연결이 되어있어야합니다.<br><br>**▶ width**<br>WebCam의 가로 해상도입니다. (기본값 : 640)<br>**▶ height**<br>webCam의 세로 해상도입니다. (기본값 : 480)|
|WebcamStream()|Webcam의 영상스트리밍을 시작하는 함수입니다.<br>**WebcamStreamInit** 함수가 호출된 후 사용해야합니다.|
|WebcamStreamOff()|Webcam의 영상스트리밍을 종료하는 함수입니다.|
|LeftRightFlipMode<br>(flag:bool)|RoboCam의 영상스트리밍을 flag에 따라 좌우 반전 시키는 함수입니다.<br><br>**▶ flag**<br>True : 좌우반전 ON, False : 좌우반전 OFF|
|UpDownFlipMode<br>(flag:bool)|RoboCam의 영상스트리밍을 flag에 따라 상하 반전 시키는 함수입니다.<br><br>**▶ flag**<br>True : 상하반전 ON, False : 상하반전 OFF
|MosaicMode<br>(rate:int)|RoboCam의 영상스트리밍에 모자이크를 rate 비율로 설정하는 함수입니다.<br><br>**▶ rate**<br>영상 모자이크의 비율입니다.<br>단위 : 퍼센트(%), 기본값 : 0|
|RotateMode<br>(angle:int)|RoboCam의 영상스트리밍을 angle만큼 회전시키는 함수입니다.<br><br>**▶ angle**<br>영상 회전각도 입니다.<br>단위 : 각도(˚), 기본값 : 90|
#### **5.3.2.3 Facedetector 함수**
|이름|설명|
|---|---|
|FacedetectorInit()|RoboCam의 얼굴인식 모듈을 준비하는 함수입니다.<br>얼굴감지, 구별, 랜드마크 인식을 초기화 합니다.|
|FacedetectorStart()|얼굴감지 모듈을 실행하는 함수입니다.<br>RoboCam 화면 안에 들어온 얼굴을 인식하여 외곽선에 사각형을 표시합니다.<br>눈,코,입 등 얼굴의 랜드마크의 좌표들에 작은원으로 표시합니다.<br>학습된 데이터가 있다면, 학습된 데이터와 비교하여 인식된 이름을 표시합니다.|
|FacedetectorStop()|얼굴감지 모듈을 중지하는 함수입니다.|
|GetFaceCount() -> int|화면에 인식된 얼굴의 갯수를 반환하는 함수입니다.|
|GetFaceRects() -> list|화면에 인식된 얼굴을 표시하는 외곽 사각형의 좌표들을 반환하는 함수입니다.|
|DrawFaceArea(flag:bool)|화면에 인식된 얼굴의 영역을 표시할지 정하는 함수입니다.|
|DrawFacePoint(flag:bool)|화면에 인식된 얼굴의 좌표를 표시할지 정하는 함수입니다.|
|DrawFaceSize(flag:bool)|화면에 인식된 얼굴의 크기를 표시할지 정하는 함수입니다.|
#### **5.3.2.4 FaceRecognizer 함수**
|이름|설명|
|---|---|
|FaceCapture<br>(name:str, captureCount:int=5, path:str)|감지된 얼굴을 name 이름으로 captureCount 횟수 만큼 캡쳐하여 path 위치에 저장하는 함수입니다.<br>저장된 얼굴은 얼굴구별 모듈의 학습데이터로 사용됩니다. RoboCam 화면에 얼굴이 인식되지 않았다면 저장되지 않습니다.<br><br>**▶ name**<br>얼굴이 저장될 이름입니다. 같은 이름으로 여러번 저장하면, 자동 넘버링되어 저장됩니다.<br>**▶ captureCount**<br>얼굴을 저장할 횟수입니다. 0.1초 간격으로 지정된 횟수만큼 저장합니다.<br>**▶ path**<br>얼굴이 저장될 경로입니다. 기본경로는 패키지 설치경로의 '/res/face/'입니다.<br>저장 경로를 바꾸어서 저장할 경우, 모듈 학습 시 변경된 경로로 설정해야합니다.|
|TrainFaceData<br>(facePath:str)|facepath에 저장된 얼굴 데이터를 얼굴구별 모듈에 학습시키는 함수입니다.<br>학습된 데이터를 기반으로 RoboCam에 확인된 얼굴의 이름이 표시됩니다.<br><br>**▶ facePath**<br>얼굴이 저장될 경로입니다. 기본경로는 패키지 설치경로의 '/res/face/'입니다.<br>저장 경로를 바꾸어서 저장할 경우, 모듈 학습 시 변경된 경로로 설정해야합니다.|
|DeleteFaceData<br>(name:str, facePath:str)|facepath에 저장된 name 이름을 가진 얼굴 데이터를 삭제하는 함수입니다.<br>해당 폴더에 접근하여 데이터를 삭제합니다. 데이터 삭제 이후, TrainFaceData 함수를 호출해야 얼굴구별 모듈에 적용됩니다.|
|GetFaceNames() -> list|RoboCam에 확인된 얼굴들의 이름을 list 형태로 반환하는 함수입니다.<br>현재 인식된 얼굴이 없다면 빈 리스트를 반환합니다.|
|GetFaceExist(name:str) -> bool|RoboCam에 인식된 얼굴 중, name의 이름을 가진 얼굴이 있는지 반환하는 함수입니다.<br><br>**▶ name**<br>검출할 얼굴의 이름입니다.|
|GetFaceSize(name:str) -> int|RoboCam에 인식된 얼굴 중, name의 이름을 가진 얼굴의 크기를 반환하는 함수입니다.<br><br>**▶ name**<br>사이즈를 구할 얼굴의 이름입니다.<br>입력하지 않는다면, 학습되지 않은 얼굴의 사이즈를 반환합니다.|
|GetFaceCenterPoint(name:str) -> list|RoboCam에 확인된 얼굴들 중 name의 이름을 가진 얼굴의 중심좌표를 반환하는 함수입니다.<br><br>**▶ name**<br>좌표를 구할 얼굴의 이름입니다.<br>입력하지 않는다면, 학습되지 않은 얼굴의 사이즈를 반환합니다.|
|DrawFaceName(flag:bool)|화면에 인식된 얼굴의 이름을 표시할지 정하는 함수입니다.|
#### **5.3.2.5 FaceLandmark 함수**
|이름|설명|
|---|---|
|GetLeftIrisPoint(name:str)->list|RoboCam에 확인된 얼굴의 왼쪽 눈동자의 좌표를 반환하는 함수입니다.<br><br>**▶ name**<br>검출할 얼굴의 이름입니다.|
|GetLeftEyebrowPoint(name:str)->list|RoboCam에 확인된 얼굴의 왼쪽 눈썹의 좌표를 반환하는 함수입니다.<br><br>**▶ name**<br>검출할 얼굴의 이름입니다.|
|GetRightIrisPoint(name:str)->list|RoboCam에 확인된 얼굴의 오른쪽 눈동자의 좌표를 반환하는 함수입니다.<br><br>**▶ name**<br>검출할 얼굴의 이름입니다.|
|GetRightEyebrowPoint(name:str)->list|RoboCam에 확인된 얼굴의 오른쪽 눈썹의 좌표를 반환하는 함수입니다.<br><br>**▶ name**<br>검출할 얼굴의 이름입니다.|
|GetNosePoint(name:str)->list|RoboCam에 확인된 얼굴의 코의 좌표를 반환하는 함수입니다.<br><br>**▶ name**<br>검출할 얼굴의 이름입니다.|
|GetMouthPoint(name:str)->list|RoboCam에 확인된 얼굴의 입의 좌표를 반환하는 함수입니다.<br><br>**▶ name**<br>검출할 얼굴의 이름입니다.|
|GetJawPoint(name:str)->list|RoboCam에 확인된 얼굴의 턱의 좌표를 반환하는 함수입니다.<br><br>**▶ name**<br>검출할 얼굴의 이름입니다.|
|DrawFaceLandmark(flag:bool)|화면에 인식된 얼굴의 랜드마크를 표시할지 정하는 함수입니다.
#### **5.3.2.6 ArucoDetector 함수**
|이름|설명|
|---|---|
|ArucoDetectorInit()|Aruco마커 탐색 모듈을 초기화 하는 함수입니다.Original Aruco 타겟으로 탐색합니다.|
|ArucoDetectorStart()|Aruco마커 탐색 모듈을 실행 시키는 함수입니다.|
|ArucoDetectorStop()|Acuro마커 탐색 모듈을 정지 시키는 함수입니다.||
|GetArucoId() -> int|RoboCam에 인식된 Aruco 마커의 고유 번호를 int 형태로 반환하는 함수입니다.|
|GetArucoIds()-> list|RoboCam에 인식된 Aruco 마커들의 고유 번호를 list 형태로 반환하는 함수입니다.|
|GetArucoCenterPoint(id:int) -> list|RoboCam에 인식된 Aruco 마커의 중심좌표를 [X,Y] 형태로 반환하는 함수입니다.<br><br>**▶ id**<br>검출할 Marker의 ID입니다.|
|GetArucoCount() -> int|RoboCam에 인식된 Aruco 마커의 갯수를 반환하는 함수입니다.|
|GetArucoExist(id:int) -> bool: |RoboCam에 인식된 Aruco 마커 중, id와 맞는 마커가 있는지 반환하는 함수입니다.|
|GetArucoX(id:int) -> int:|RoboCam에 인식된 Aruco 마커 중, id에 해당하는 마커의 X 좌표를 반환하는 함수입니다.|
|GetArucoY(id:int) -> int:|RoboCam에 인식된 Aruco 마커 중, id에 해당하는 마커의 Y 좌표를 반환하는 함수입니다.|
|GetArucoDistance(id:int) -> int:|RoboCam에 인식된 Aruco 마커 중, id에 해당하는 마커와의 거리를 반환하는 함수입니다.|
|GetArucoRectPoint(id:int) -> list|RoboCam에 인식된 Aruco 마커 중, id에 해당하는 마커의 네 모서리 좌표를 [ [X1,Y1], [X2,Y2], [X3,Y3], [X4,Y4] ] 형태로 반환하는 함수입니다.|
|GetArucoAngle()->float|RoboCam에 인식된 Aruco 마커의 각도를 반환하는 함수입니다.|
|DrawArucoArea(flag:bool)|인식된 Aruco 마커의 영역을 표시할지 정하는 함수입니다.|
|DrawArucoId(flag:bool)|인식된 Aruco 마커의 ID를 표시할지 정하는 함수입니다.|
|DrawArucoPoint(flag:bool)|인식된 Aruco 마커의 좌표를 표시할지 정하는 함수입니다.|
|DrawArucoDistance(flag:bool)|인식된 Aruco 마커의 거리를 표시할지 정하는 함수입니다.|
|DrawArucoSize(flag:bool)|인식된 Aruco 마커의 사이즈를 표시할지 정하는 함수입니다.
##### **5.3.2.6.1 ArucoDetector 함수의 사용법**
```python
 # RoboCam 라이브러리를 참조합니다.
 import RoboCam.robocam as robocam

 # 로보캠 객체를 생성하고, 초기화 한 후, 카메라 스트림을 시작합니다.
 rCam = robocam.RoboCam()
 rCam.CameraStreamInit()
 rCam.CameraStream()

 # ArucoDetector를 초기화 하고, 시작합니다.
 rCam.ArucoDetectorInit()
 rCam.ArucoDetectorStart()

 # 인식된 ArucoMarker의 정보를 출력합니다.
 while(True):
   print(" id  = "         , rCam.GetArucoId())
   print(" ids = "         , rCam.GetArucoIds())
   print(" centerPoint = " , rCam.GetArucoCenterPoint())
   print(" rectPoint = "   , rCam.GetArucoRectPoint())
   print(" angle = "       , rCam.GetArucoAngle())
4.2.6.2 ArucoDetector 이벤트의 사용법
    # RoboCam 라이브러리를 참조합니다.
    import RoboCam.robocam as robocam

    # ArucoMarker의 데이터를 수신할 함수를 선언 합니다.
    def ArucoId_Printer(id):
        print(" id  = " , id)

    def ArucoIds_Printer(ids):
        print(" ids = " , ids)

    def ArucoCenterPoint_Printer(point):
        print(" centerPoint = " , point)

    def ArucoRectPoint_Printer(point):
        print(" rectPoint = " ,  point)

    def ArucoAngle_Printer(angle):
        print(" angle = " , angle)

    # 로보캠 객체를 생성하고, 초기화 한 후, 카메라 스트림을 시작합니다.
    rCam = robocam.RoboCam()
    rCam.CameraStreamInit()
    rCam.CameraStream()

    # ArucoDetector를 초기화 하고, 시작합니다.
    rCam.ArucoDetectorInit()
    rCam.ArucoDetectorStart()

    # 선언해놓은 데이터 수신 함수를, 각 이벤트에 맞게 로보캠 객체에 등록합니다.
    rCam.SetEventHandler(robocam.CameraEvents.RECV_ARUCO_ID, ArucoAngle_Printer)
    rCam.SetEventHandler(robocam.CameraEvents.RECV_ARUCO_IDS, ArucoIds_Printer)
    rCam.SetEventHandler(robocam.CameraEvents.RECV_ARUCO_CENTER_POINTS, ArucoCenterPoint_Printer)
    rCam.SetEventHandler(robocam.CameraEvents.RECV_ARUCO_RECT_POINTS, ArucoRectPoint_Printer)
    rCam.SetEventHandler(robocam.CameraEvents.RECV_ARUCO_ANGLE, ArucoAngle_Printer)
```
#### **5.3.2.7 SketchDetector 함수**
|이름|설명|
|---|---|
|SketchDetectorInit()|RoboCam의 그림구별 모듈을 준비하는 함수입니다.<br>검은 외곽 사각형 내부에 그려진 그림을 학습하고 구별합니다.|
|SketchDetectorStart()|그림구별 모듈을 시작하는 함수입니다.<br>RoboCam에 인식된 그림 외곽에 사각형으로 표시됩니다.|
|SketchDetectorStop()|그림구별 모듈을 정지하는 함수입니다.|
|SketchCapture<br>(name:str,captureCount:int=5,path:str)|RoboCam에 인식된 그림을 name 이름으로 캡쳐하여 path에 저장하는 함수입니다.<br>저장된 얼굴은 얼굴구별 모듈의 학습데이터로 사용됩니다. RoboCam 화면에 얼굴이 인식되지 않았다면 저장되지 않습니다.<br><br>**▶ name**<br>그림이 저장될 이름입니다. 같은 이름으로 여러번 저장하면, 자동 넘버링되어 저장됩니다.<br>**▶ captureCount**<br>그림이 저장될 횟수입니다. 입력하지 않는다면 다섯장의 그림을 저장합니다.<br>**▶ path**<br>그림이 저장될 경로입니다. 기본경로는 패키지 설치경로의 '/res/sketch/'입니다.<br>저장 경로를 바꾸어서 저장할 경우, 모듈 학습 시 변경된 경로로 설정해야합니다.|
|TrainSketchData<br>(sketchPath:str)|sketchPath에 저장된 얼굴 데이터를 얼굴구별 모듈에 학습시키는 함수입니다.<br>학습된 데이터를 기반으로 RoboCam에 확인된 얼굴의 이름이 표시됩니다.<br><br>**▶ sketchPath**<br>얼굴이 저장될 경로입니다. 기본경로는 패키지 설치경로의 '/res/sketch/'입니다.<br>저장 경로를 바꾸어서 저장할 경우, 모듈 학습 시 변경된 경로로 설정해야합니다.|
|DeleteSketchData<br>(name:str, sketchPath:str)|sketchPath에 저장된 name 이름을 가진 그림 데이터를 삭제하는 함수입니다.<br>해당 폴더에 접근하여 데이터를 삭제합니다. 데이터 삭제 이후, TrainFaceData 함수를 호출해야 얼굴구별 모듈에 적용됩니다.|
|GetSketchNames()->list|RoboCam에 인식된 그림들의 이름을 list형태로 반환하는 함수입니다.|
|GetSketchExist(name:str)->bool	|RoboCam에 인식된 그림 중, name에 해당하는 그림이 있는지 반환하는 함수입니다.|
|GetSketchCenterPoint(name:str)->list	|RoboCam에 인식된 그림 중, name에 해당하는 그림의 좌표를 list형태로 반환하는 함수입니다.|
|GetSketchSize(name:str)->int	|RoboCam에 인식된 그림 중, name에 해당하는 그림의 크기를 반환하는 함수입니다.|
|DrawSketchArea(flag:bool)	|인식된 그림의 영역을 표시할지 정하는 함수입니다.|
|DrawSketchName(flag:bool)	|인식된 그림의 이름을 표시할지 정하는 함수입니다.|
|DrawSketchSize(flag:bool)	|인식된 그림의 크기를 표시할지 정하는 함수입니다.|
|DrawSketchPoint(flag:bool)	|인식된 그림의 좌표를 표시할지 정하는 함수입니다.|
#### **5.3.2.8 NumberRecognizer 함수**
|이름|설명|
|---|---|
|NumberRecognizerInit()|RoboCam의 숫자구별 모듈을 준비하는 함수입니다.<br>검은 외곽 사각형 내부에 그려진 숫자를 구별합니다.|
|NumberRecognizerStart()|숫자구별 모듈을 시작하는 함수입니다.<br>RoboCam에 인식된 숫자 외곽에 사각형으로 표시됩니다.|
|NumberRecognizerStop()|숫자구별 모듈을 정지하는 함수입니다.|
|GetRecognizedNumbers()->str|RoboCam에 인식된 숫자를 문자열의 형태로 반환하는 함수입니다.|
|GetRecognizedNumberPoint()->list|RoboCam에 인식된 숫자의 좌표를 list형태로 반환하는 함수입니다.|
|GetRecognizedNumberSize()->int|RoboCam에 인식된 숫자의 크기를 반환하는 함수입니다.|
|DrawNumberArea(flag:bool)|인식된 숫자의 영역을 표시할지 정하는 함수입니다.|
|DrawNumber(flag:bool)|인식된 숫자를 표시할지 정하는 함수입니다.|
|DrawNumberPoint(flag:bool)|인식된 숫자의 좌표를 표시할지 정하는 함수입니다.|
|DrawNumberSize(flag:bool)|인식된 숫자의 크기를 표시할지 정하는 함수입니다.|

            

Raw data

            {
    "_id": null,
    "home_page": "https://eng.roborobo.co.kr/main",
    "name": "RoboCam",
    "maintainer": "",
    "docs_url": null,
    "requires_python": ">=3",
    "maintainer_email": "",
    "keywords": "RoboCam,roborobo",
    "author": "Roborobo",
    "author_email": "roborobolab@gmail.com",
    "download_url": "https://github.com/RoboroboLab/RoboCam/archive/master.tar.gz",
    "platform": null,
    "description": "# **RoboCam**\r\n# **1. RoboCam Python Library \uc18c\uac1c**\r\nRoboCam Python Library\ub294 Python\uc5d0\uc11c RoboCam\uc744 \uc0ac\uc6a9\ud558\uc5ec \uc601\uc0c1 \uc2a4\ud2b8\ub9ac\ubc0d \ubc0f \uc601\uc0c1\ucc98\ub9ac \uae30\ub2a5\uc744 \uc27d\uac8c \uc0ac\uc6a9\ud560 \uc218 \uc788\ub3c4\ub85d \ub3c4\uc640\uc8fc\ub294 \ub77c\uc774\ube0c\ub7ec\ub9ac\uc785\ub2c8\ub2e4.\r\n# **2. \uc124\uce58 \ubc0f \uc0ad\uc81c**\r\n\ud574\ub2f9 \ub77c\uc774\ube0c\ub7ec\ub9ac\uc758 \uacbd\uc6b0 \ud0c0 \ub77c\uc774\ube0c\ub7ec\ub9ac\uc640\uc758 \uc0c1\ud638\uc791\uc6a9\uc774 \ub9ce\uc544 \ubc84\uc804\uc5d0 \ubbfc\uac10\ud558\ubbc0\ub85c \uac00\uc0c1\ud658\uacbd\uc744 \uc0ac\uc6a9\ud558\ub294 \uac83\uc744 \uad8c\uc7a5\ud569\ub2c8\ub2e4. (2.1 \uac00\uc0c1\ud658\uacbd \uc0dd\uc131 \ubc0f \uc2e4\ud589 \ucc38\uc870) \r\n## **2.1. \uac00\uc0c1\ud658\uacbd \uc0dd\uc131 \ubc0f \uc2e4\ud589** \r\n### **2.1.1 Powershell \ubcf4\uc548 \ud574\uc81c**\r\nPowershell\uc744 \uad00\ub9ac\uc790 \uad8c\ud55c\uc73c\ub85c \uc5f4\uace0 \uc544\ub798\uc758 \uba85\ub839\uc5b4\ub97c \uc785\ub825\ud569\ub2c8\ub2e4. \r\n```powershell\r\nSet-ExecutionPolicy Unrestricted\r\n```\r\n\r\n### **2.1.2 Python \ud504\ub85c\uc81d\ud2b8\ub97c \uc2e4\ud589\ud560 \ud3f4\ub354 \uc811\uadfc**\r\nPowershell, VSCode Terminal \ub4f1\uc744 \uc774\uc6a9\ud558\uc5ec \uc544\ub798\uc758 \uc608\uc2dc\uc640 \uac19\uc774 \ud504\ub85c\uc81d\ud2b8 \ud3f4\ub354\uc5d0 \uc811\uadfc\ud569\ub2c8\ub2e4.\r\n```powershell\r\ncd C:\\Workspace\\python-sample\r\n```\r\n### **2.1.3 Python \ud504\ub85c\uc81d\ud2b8\ub97c \uc2e4\ud589\ud560 \ud3f4\ub354 \uc811\uadfc**\r\nPowershell, VSCode Terminal \ub4f1\uc744 \uc774\uc6a9\ud558\uc5ec \uc544\ub798\uc758 \uc608\uc2dc\uc640 \uac19\uc774 \ud504\ub85c\uc81d\ud2b8 \ud3f4\ub354\uc5d0 \uc811\uadfc\ud569\ub2c8\ub2e4.\r\n```powershell\r\ncd C:\\Workspace\\python-sample\r\n```\r\n### **2.1.4 \uac00\uc0c1 \ud658\uacbd \uc0dd\uc131**\r\n\uc544\ub798\uc758 \uba85\ub839\uc5b4\ub97c \uc785\ub825\ud558\uc5ec python \uac00\uc0c1 \ud658\uacbd\uc744 \uc0dd\uc131\ud569\ub2c8\ub2e4. \r\n```powershell\r\npython -m venv .venv\r\n```\r\n(python2.7 \ubc84\uc804\uacfc python3.xx \ubc84\uc804\uc774 \ub3d9\uc2dc\uc5d0 \uc124\uce58\ub418\uc5b4 \uc815\uc0c1 \uc791\ub3d9\uc774 \ub418\uc9c0 \uc54a\ub294 \uacbd\uc6b0 \uc544\ub798\uc758 \ucf54\ub4dc\ub97c \uc0ac\uc6a9\ud569\ub2c8\ub2e4.) <pre><code>python3 -m -venv .venv</code></pre>\r\n### **2.1.5 Python \uac00\uc0c1 \ud658\uacbd \ud65c\uc131\ud654**\r\n\uc544\ub798\uc758 \uba85\ub839\uc5b4\ub97c \uc785\ub825\ud558\uc5ec \uac00\uc0c1\ud658\uacbd\uc744 \ud65c\uc131\ud654\ud569\ub2c8\ub2e4. \uc815\uc0c1\uc801\uc73c\ub85c \ud65c\uc131\ud654\ub41c \uacbd\uc6b0 \ud130\ubbf8\ub110 \uc88c\uce21\uc5d0 (.venv)\uc758 \ubb38\uc790\uc5f4\uc774 \ucd94\uac00\ub429\ub2c8\ub2e4. \uc55e\uc73c\ub85c\uc758 \uc2e4\ud589\uc5d0 \uc788\uc5b4 \uc0c8 \ucc3d\uc758 \ud130\ubbf8\ub110\uc744 \uc2e4\ud589\ud558\ub294 \uacbd\uc6b0 \ud56d\uc0c1 \ud574\ub2f9 \uba85\ub839\uc5b4\ub97c \uc0ac\uc6a9\ud558\uc5ec \uac00\uc0c1 \ud658\uacbd\uc744 \ud65c\uc131\ud654\ud558\uc5ec \uc0ac\uc6a9\ud569\ub2c8\ub2e4.\r\n```powershell\r\n.venv\\Scripts\\activate\r\n```\r\n### **2.1.6 \uac00\uc0c1 \ud658\uacbd\uc5d0 RoboCam \uc124\uce58**\r\n\uc544\ub798\uc758 \uba85\ub839\uc5b4\ub97c \uc785\ub825\ud558\uc5ec \uac00\uc0c1 \ud658\uacbd\uc5d0 RoboCam \ud328\ud0a4\uc9c0\ub97c \uc124\uce58\ud569\ub2c8\ub2e4.\r\n```powershell\r\npip install robocam\r\n```\r\n(python2.7 \ubc84\uc804\uacfc python3.xx \ubc84\uc804\uc774 \ub3d9\uc2dc\uc5d0 \uc124\uce58\ub418\uc5b4 \uc815\uc0c1 \uc791\ub3d9\uc774 \ub418\uc9c0 \uc54a\ub294 \uacbd\uc6b0 \uc544\ub798\uc758 \ucf54\ub4dc\ub97c \uc0ac\uc6a9\ud569\ub2c8\ub2e4.) <pre><code>pip3 install robocam</code></pre>\r\n\r\n### **2.1.7 \uc124\uce58\ub41c \ub77c\uc774\ube0c\ub7ec\ub9ac \ubc84\uc804 \ud655\uc778**\r\n\r\n \uc544\ub798\uc758 \uba85\ub839\uc5b4\ub97c \uc2e4\ud589\ud558\uace0, '**5.1 \uad8c\uc7a5 \ud328\ud0a4\uc9c0 \ubc84\uc804**'\uc744 \ucc38\uc870\ud558\uc5ec \ub77c\uc774\ube0c\ub7ec\ub9ac \ubc84\uc804 \uc815\ubcf4\uac00 \uc77c\uce58\ud558\ub294 \uc9c0 \ud655\uc778\ud569\ub2c8\ub2e4. (opencv-python-contrib, numpy, tensorflow, tflite \uc911\uc2ec\uc73c\ub85c \ud655\uc778)\r\n```powershell\r\npip list\r\n```\r\n### **2.1.8 \uac00\uc0c1 \ud658\uacbd\uc5d0\uc11c Python \ucf54\ub4dc \uc2e4\ud589(Powershell \uba85\ub839\uc5b4 \uc785\ub825)**\r\npython \ucf54\ub4dc\ub97c \uc2e4\ud589\ud558\uae30 \uc804\uc5d0 powershell(\ub610\ub294 VSCode \ud130\ubbf8\ub110) \uc55e\uc5d0 (.**venv**)\ud45c\uae30\uac00 \uc788\ub294\uc9c0 \ud655\uc778\ud558\uace0 \uae30\uc874\uacfc \ub3d9\uc77c\ud558\uac8c python \uba85\ub839\uc5b4\ub97c \uc0ac\uc6a9\ud558\uc5ec \ucf54\ub4dc\ub97c \uc2e4\ud589\ud569\ub2c8\ub2e4.\r\n```powershell\r\npython python-test.py\r\n```\r\n### **2.1.8.1 \uac00\uc0c1 \ud658\uacbd\uc5d0\uc11c Python \ucf54\ub4dc \uc2e4\ud589(VSCode F5 \ub20c\ub7ec\uc11c \uc2e4\ud589)**\r\n1. ***Ctrl+Shift+P*** \ub97c \uc785\ub825\ud569\ub2c8\ub2e4.\r\n2. ***Python: Select Interpreter***\ub97c \uc785\ub825\ud558\uc5ec \ud074\ub9ad\ud569\ub2c8\ub2e4.\r\n3. \ud504\ub85c\uc81d\ud2b8 \ud3f4\ub354 \uc548\uc5d0 \uc788\ub294 python.exe\ub97c \uc120\ud0dd\ud569\ub2c8\ub2e4. (ex. C:\\Workspace\\python-sample\\.venv\\Script\\pytho.exe)\r\n4. ***F5***\ub97c \ub20c\ub7ec \uc2e4\ud589\ud569\ub2c8\ub2e4.\r\n## **2.2. \uc124\uce58 (\uc804\uccb4 \ud658\uacbd)**\r\n\uc544\ub798\uc758 \uba85\ub839\uc744 \uc2e4\ud589\ud558\uc2dc\uba74 RoboCam\uc774 \uc124\uce58\ub429\ub2c8\ub2e4.\r\n```powershell\r\n pip3 install RoboCam\r\n```\r\n\ucd5c\uc2e0 \ubc84\uc804\uc774 \uc124\uce58\ub418\uc9c0 \uc54a\ub294\ub2e4\uba74 \uc544\ub798\uc758 \uba85\ub839\uc744 \uc0ac\uc6a9\ud558\uc2dc\uae30\ub97c \ubc14\ub78d\ub2c8\ub2e4.\r\n```powershell\r\n pip3 --no-cache-dir install RoboCam\r\n```\r\n### **2.2.1. \ud544\uc694 \ub77c\uc774\ube0c\ub7ec\ub9ac**\r\n\ub77c\uc774\ube0c\ub7ec\ub9ac \uc124\uce58\uc2dc\uc5d0\ub294 \uaf2d! \uad00\ub9ac\uc790 \uad8c\ud55c\uc73c\ub85c \uc124\uce58\ud574\uc57c \ud569\ub2c8\ub2e4.(\uac00\uc0c1\ud658\uacbd )\r\n\r\n\uc778\uc2dd \uc815\ubcf4\ub97c \uc804\ub2ec \ud558\uae30 \uc704\ud55c numpy\ub77c\uc774\ube0c\ub7ec\ub9ac\uac00 \ud544\uc694\ud569\ub2c8\ub2e4. \uc544\ub798\uc758 \uba85\ub839\uc744 \uc2e4\ud589\ud558\uc2dc\uba74 numpy\uac00 \uc124\uce58\ub429\ub2c8\ub2e4.\r\n```powershell\r\npip3 install numpy\r\n```\r\n\uc601\uc0c1 \ucc98\ub9ac\ub97c \uc704\ud574 opencv2 \ub77c\uc774\ube0c\ub7ec\ub9ac\uac00 \ud544\uc694\ud569\ub2c8\ub2e4. \uc544\ub798\uc758 \uba85\ub839\uc744 \uc2e4\ud589\ud558\uc2dc\uba74 opencv2\uac00 \uc124\uce58\ub429\ub2c8\ub2e4.\r\n\ud574\ub2f9 \uba85\ub839\uc744 \ud1b5\ud574 opencv2\uc758 \uc124\uce58 \ubc0f \ucd5c\uc2e0\ud654\ub97c \ud560 \uc218 \uc788\uc2b5\ub2c8\ub2e4.\r\n```powershell\r\npip3 install opencv-contrib-python\r\npip3 install --upgrade opencv-contrib-python\r\n```powershell\r\n\uc778\uacf5\uc9c0\ub2a5 \ucc98\ub9ac\ub97c \uc704\ud574 tensorflow \ub77c\uc774\ube0c\ub7ec\ub9ac\uac00 \ud544\uc694\ud569\ub2c8\ub2e4. \uc544\ub798\uc758 \uba85\ub839\uc744 \uc2e4\ud589\ud558\uc2dc\uba74 tensorflow\uac00 \uc124\uce58\ub429\ub2c8\ub2e4.\r\n\ud574\ub2f9 \uba85\ub839\uc744 \ud1b5\ud574 tensorflow \uc758 \uc124\uce58 \ubc0f \ucd5c\uc2e0\ud654\ub97c \ud560 \uc218 \uc788\uc2b5\ub2c8\ub2e4.\r\n```powershell\r\npip3 install tensorflow\r\npip3 install --upgrade tensorflow\r\n```\r\n\uc778\uacf5\uc9c0\ub2a5 \ucc98\ub9ac\ub97c \uc704\ud574 tflite \ub77c\uc774\ube0c\ub7ec\ub9ac\uac00 \ud544\uc694\ud569\ub2c8\ub2e4. \uc544\ub798\uc758 \uba85\ub839\uc744 \uc2e4\ud589\ud558\uc2dc\uba74 tflite\uac00 \uc124\uce58\ub429\ub2c8\ub2e4.\r\n\ud574\ub2f9 \uba85\ub839\uc744 \ud1b5\ud574 tflite\uc758 \uc124\uce58 \ubc0f \ucd5c\uc2e0\ud654\ub97c \ud560 \uc218 \uc788\uc2b5\ub2c8\ub2e4.\r\n```powershell\r\npip3 install tflite\r\npip3 install --upgrade tflite\r\n```\r\n### **2.2.2. \uc5c5\uadf8\ub808\uc774\ub4dc**\r\n\ucd5c\uc2e0 \ubc84\uc804\uc73c\ub85c \uc5c5\uadf8\ub808\uc774\ub4dc \ud558\uc2dc\ub824\uba74 \uc544\ub798\uc758 \uba85\ub839\uc744 \uc2e4\ud589\ud558\uc2dc\uba74 \ub429\ub2c8\ub2e4.\r\n```powershell\r\npip3 install --upgrade RoboCam\r\n```\r\n### **2.2.3. \ub77c\uc774\ube0c\ub7ec\ub9ac \uc7ac\uc124\uce58**\r\n\r\n\uc774\uc804 \ubc84\uc804\uc744 \uc124\uce58\ud55c \uacbd\uc6b0 & \uac00\uc0c1\ud658\uacbd \uc0ac\uc6a9\uc774 \ubd88\uac00\ud55c \uacbd\uc6b0\r\n\r\n```\r\nabsl-py==1.4.0\r\nastunparse==1.6.3\r\ncachetools==5.3.1\r\ncertifi==2023.5.7\r\ncharset-normalizer==3.1.0\r\nflatbuffers==23.5.26\r\ngast==0.4.0\r\ngoogle-auth==2.21.0\r\ngoogle-auth-oauthlib==1.0.0\r\ngoogle-pasta==0.2.0\r\ngrpcio==1.56.0\r\nh5py==3.9.0\r\nidna==3.4\r\njax==0.4.13\r\nkeras==2.12.0\r\nlibclang==16.0.0\r\nMarkdown==3.4.3\r\nMarkupSafe==2.1.3\r\nml-dtypes==0.2.0\r\nnumpy==1.23.5\r\noauthlib==3.2.2\r\nopencv-contrib-python==4.7.0.72\r\nopt-einsum==3.3.0\r\npackaging==23.1\r\nprotobuf==4.23.3\r\npyasn1==0.5.0\r\npyasn1-modules==0.3.0\r\nrequests==2.31.0\r\nrequests-oauthlib==1.3.1\r\nRoboCam==1.0.0.31\r\nrsa==4.9\r\nscipy==1.11.1\r\nsix==1.16.0\r\ntensorboard==2.12.3\r\ntensorboard-data-server==0.7.1\r\ntensorflow==2.12.0\r\ntensorflow-estimator==2.12.0\r\ntensorflow-intel==2.12.0\r\ntensorflow-io-gcs-filesystem==0.31.0\r\ntermcolor==2.3.0\r\ntflite==2.10.0\r\ntyping_extensions==4.7.1\r\nurllib3==1.26.16\r\nWerkzeug==2.3.6\r\nwrapt==1.14.1\r\n```\r\n\r\n1. \uc704\uc758 \ud14d\uc2a4\ud2b8\ub97c \ubcf5\uc0ac\ud558\uc5ec .txt \ud30c\uc77c\ub85c \uc800\uc7a5\ud569\ub2c8\ub2e4.\r\n2.  pip\ub97c \uc774\uc6a9\ud558\uc5ec \uad00\ub828 \ub77c\uc774\ube0c\ub7ec\ub9ac\ub97c \ubaa8\ub450 \uc0ad\uc81c\ud569\ub2c8\ub2e4.<br>\r\n\uc815\uc0c1\uc801\uc778 \uc0ad\uc81c\uac00 \uc548\ub418\ub294 \uacbd\uc6b0 **Powershell**\uc744 **\uad00\ub9ac\uc790 \uad8c\ud55c**\uc73c\ub85c \uc5f4\uc5b4 \ud574\ub2f9 \uba85\ub839\uc5b4\ub97c \uc785\ub825\ud569\ub2c8\ub2e4. <pre>pip uninstall -r \"\ud30c\uc77c \uacbd\ub85c\" -y <br><br>(ex. pip uninstall -r \"C:\\Users\\david\\Documents\\KakaoTalk Downloads\\robocam_lib_version.txt\" -y)</pre>\r\n\r\n3. RoboCam Library\ub97c \uc7ac\uc124\uce58\ud569\ub2c8\ub2e4.<br>\uc815\uc0c1\uc801\uc778 \uc124\uce58\uac00 \uc548\ub418\ub294 \uacbd\uc6b0 **Powershell**\uc744 **\uad00\ub9ac\uc790 \uad8c\ud55c**\uc73c\ub85c \uc5f4\uc5b4 \ud574\ub2f9 \uba85\ub839\uc5b4\ub97c \uc785\ub825\ud569\ub2c8\ub2e4.<br><pre>pip install robocam</pre>\r\n\r\n4. \uc815\uc0c1\uc801\uc73c\ub85c \uc124\uce58\ub418\uc5c8\ub294\uc9c0 \ud655\uc778\ud569\ub2c8\ub2e4. \ud558\ub2e8\uc758 '*5.1 \uad8c\uc7a5 \ud328\ud0a4\uc9c0 \ubc84\uc804*' \uc5d0 \uc788\ub294 \ud328\ud0a4\uc9c0 \ubc84\uc804\uacfc \ub300\uc870\ud558\uc5ec \ud655\uc778\ud569\ub2c8\ub2e4.<pre>pip list</pre>\r\n\r\n\r\n### **2.2.4 \uc0ad\uc81c**\r\n\uc544\ub798\uc758 \uba85\ub839\uc744 \uc2e4\ud589\ud558\uc2dc\uba74 RoboCam\uc774 \uc0ad\uc81c\ub429\ub2c8\ub2e4.\r\n```powershell\r\n pip3 uninstall RoboCam\r\n```\r\n# **3 \uc2e4\uc2b5 \uc608\uc81c**\r\n\r\n## **3.1 \uc5bc\uad74 \uc778\uc2dd**\r\n\r\n### 3.1.1 \uc608\uc2dc \ucf54\ub4dc\r\n\r\n```python\r\nfrom RoboCam.robocam import *\r\nrCam = RoboCam()\r\nrCam.CameraStreamInit()\r\nrCam.CameraStream()\r\nrCam.FacedetectorInit()\r\nrCam.FacedetectorStart()\r\nrCam.TrainFaceData()\r\n\r\nwhile(True):\r\n    print(\"======================================\")\r\n    print(\"\uc0ac\uc6a9\ud560 \uae30\ub2a5\uc744 \ud655\uc778\ud574 \uc8fc\uc138\uc694.\")\r\n    print(\"1) capture\")\r\n    print(\"2) train\")\r\n    print(\"3) delete\")\r\n    print(\"======================================\")\r\n\r\n    ins = input(\"\uc785\ub825\ud574\uc8fc\uc138\uc694 : \")\r\n\r\n    if ins == 'train':\r\n        rCam.TrainFaceData()\r\n    elif ins == 'capture':\r\n        name = input(\"\uc800\uc7a5\ud560 \uc774\ub984\uc744 \uc785\ub825\ud558\uc138\uc694. :)\")\r\n        rCam.FaceCapture(name)\r\n    elif ins == 'delete':\r\n        name = input(\"\uc0ad\uc81c\ud560 \uc774\ub984\uc744 \uc785\ub825\ud558\uc138\uc694. :\")\r\n        rCam.DeleteFaceData(name)\r\n    else :\r\n        print(\"\uc798\ubabb\ub41c \uba85\ub839\uc5b4\uc785\ub2c8\ub2e4. \ub2e4\uc2dc \uc785\ub825\ud574 \uc8fc\uc138\uc694.\")\r\n```\r\n\r\n## **3.2 \uc22b\uc790 \uc778\uc2dd**\r\n\r\n### **3.2.1 \uc870\uac74**\r\n- \uc22b\uc790\ub294 \ud14c\ub450\ub9ac\uac00 \ub450\uaebc\uc6b4 \uc815\uc0ac\uac01\ud615 \uc548\uc5d0 \uc788\uc5b4\uc57c \ud569\ub2c8\ub2e4\r\n- \uae00\uaf34\uc5d0 \ub300\ud55c \uc758\uc874\ub3c4\uac00 \ub192\uc544 \uc801\uc808\ud55c \ud3f0\ud2b8\ub97c \uc0ac\uc6a9\ud574\uc11c \ud14c\uc2a4\ud2b8\ud574\uc57c \ud569\ub2c8\ub2e4.\r\n\r\n### **3.2.2 \uc608\uc2dc \ucf54\ub4dc**\r\n\r\n```python\r\nfrom RoboCam.robocam import *\r\nfrom time import sleep\r\nrCam = RoboCam()\r\nrCam.CameraStreamInit()\r\nrCam.CameraStream()\r\nrCam.NumberRecognizerInit()\r\nrCam.NumberRecognizerStart()\r\n\r\nwhile(True):\r\n    k = input(\"Type \\'q\\' to exit : \")\r\n    if k == \"q\":\r\n        rCam.end()\r\n    else:\r\n        print(\"wrong input\")\r\n    sleep(0.01)\r\n```\r\n\r\n## **3.3 \uc2a4\ucf00\uce58 \uc778\uc2dd**\r\n\r\n### **3.3.1 \uc124\uc815**\r\n\r\n- \uc2a4\ucf00\uce58\ub294 \ud14c\ub450\ub9ac\uac00 \ub450\uaebc\uc6b4 \uc815\uc0ac\uac01\ud615 \uc548\uc5d0 \uc788\uc5b4\uc57c \ud569\ub2c8\ub2e4\r\n\r\n### **3.3.2 \uc608\uc2dc \ucf54\ub4dc**\r\n\r\n```python\r\nfrom RoboCam.robocam import *\r\nfrom time import sleep\r\nrCam = RoboCam()\r\nrCam.CameraStreamInit()\r\nrCam.CameraStream()\r\nrCam.SketchDetectorInit()\r\nrCam.SketchDetectorStart()\r\n\r\nwhile(True):\r\n    k = input(\"capture:1\\ntrain:2\\ndelete:3\\nend:4\\nPlz input a direction : \")\r\n    if k == \"1\":\r\n        _name = input(\"name?: \")\r\n        rCam.SketchCapture(_name)\r\n    elif k == \"2\":\r\n        rCam.TrainSketchData()\r\n    elif k == \"3\":\r\n        _name = input(\"what do you want to delete\")\r\n        rCam.DeleteSketchData(_name)\r\n    elif k == \"4\":\r\n        rCam.end()\r\n    else:\r\n        print(\"wrong input\")\r\n    sleep(0.01)\r\n```\r\n\r\n## **3.4 Aruco Marker \uc778\uc2dd**\r\n\r\n### **3.4.1 \uc124\uc815**\r\n\r\n- \ub2e4\uc74c \uc0ac\uc774\ud2b8\uc5d0 \uc811\uc18d\ud558\uc5ec ***\u201cDictionary\u201d\uc758*** \ub4dc\ub86d\ub2e4\uc6b4\uc744 \ub20c\ub7ec ***\u201cOriginal ArUco\u201d***\ub85c \uc124\uc815\ud569\ub2c8\ub2e4. <br>( [https://chev.me/arucogen/](https://chev.me/arucogen/) )\r\n\r\n### **3.4.2 \uc608\uc2dc \ucf54\ub4dc**\r\n\r\n```python\r\nfrom RoboCam.robocam import *\r\nfrom time import sleep\r\nrCam = RoboCam()\r\nrCam.CameraStreamInit()\r\nrCam.CameraStream()\r\nrCam.ArucoDetectorInit()\r\nrCam.ArucoDetectorStart()\r\n\r\nwhile(True):\r\n    k = input(\"Type \\'q\\' to exit : \")\r\n    if k == \"q\":\r\n        rCam.end()\r\n    else:\r\n        print(\"wrong input\")\r\n    sleep(0.01)\r\n```\r\n\r\n## **3.5 DrawXXX Function \uacc4\uc5f4 \uc0ac\uc6a9**\r\n\r\n### **3.5.1 \uc124\uba85**\r\n\r\n- \uce94\ubc84\uc2a4\uc5d0 \ud2b9\uc815 \ub9e4\uac1c\ubcc0\uc218(\ub610\ub294 \ud14c\ub450\ub9ac)\ub97c \uadf8\ub9b4\uc9c0 \uc5ec\ubd80\uc5d0 \uc0ac\uc6a9\ub429\ub2c8\ub2e4\r\n### **3.5.2 \uc608\uc2dc \ucf54\ub4dc**\r\n\r\n```python\r\nfrom RoboCam.robocam import *\r\nfrom time import sleep\r\nrCam = RoboCam()\r\nrCam.CameraStreamInit()\r\nrCam.CameraStream()\r\nrCam.ArucoDetectorInit()\r\nrCam.ArucoDetectorStart()\r\n\r\nwhile(True):\r\n    k = input(\"View it's size(y/n) : \")\r\n    if k == \"q\":\r\n        rCam.end()\r\n    elif k == \"y\":\r\n        rCam.DrawArucoSize(True)\r\n    elif k == \"n\":\r\n        rCam.DrawArucoSize(False)\r\n    else:\r\n        print(\"wrong input\")\r\n    sleep(0.01)\r\n```\r\n\r\n## **3.6 Robocam RobokitRS \uc5f0\ub3d9**\r\n\r\n### **3.6.1 \uc608\uc81c**\r\n\r\n- RoboCam\uc73c\ub85c \uc2a4\ucf00\uce58\ub97c \uc778\uc2dd\ud558\uace0 \ub530\ub77c\uac00\ub294 \uc608\uc81c\uc785\ub2c8\ub2e4.\r\n- \ub530\ub77c\uac08 \uc2a4\ucf00\uce58\uc758 \uc774\ub984\uc744 \uc785\ub825\ud558\uace0 3\ucd08 \ub0b4\ub85c \uc2a4\ucf00\uce58\ub97c \ub4f1\ub85d\ud55c \ub2e4\uc74c, \ud504\ub85c\uadf8\ub7a8\uc744 \ub9c8\uce58\uace0 \uc2f6\uc744 \ub54c \uc0ac\uc6a9\ud560 \uc2a4\ucf00\uce58\ub97c \ucd94\uac00\ub85c \ub4f1\ub85d\ud569\ub2c8\ub2e4.\r\n- \uc774\ud6c4 Servo Motor\uc758 \uac01\ub3c4\uac00 0\ub3c4\uac00 \ub41c \uc774\ud6c4\ub85c \uc0ac\uc804\uc5d0 \uc785\ub825\ud574 \ub454 \uc2a4\ucf00\uce58\ub97c \uce74\uba54\ub77c\uc5d0 \ube44\ucd94\uace0, \uc774\ub3d9\uc2dc\ud0a4\uba70 \uce74\uba54\ub77c\uc758 \uac01\ub3c4\uac00 \ubc14\ub00c\uba70 \ub530\ub77c\uc624\ub294\uc9c0 \ud14c\uc2a4\ud2b8\ud569\ub2c8\ub2e4.\r\n- \uc885\ub8cc\ud558\uae30 \uc704\ud574\uc11c\ub294 \uc885\ub8cc \uc2a4\ucf00\uce58\ub97c \uce74\uba54\ub77c \uc911\uc559\uc5d0 \ube44\uce58\ub3c4\ub85d \ud569\ub2c8\ub2e4.\r\n\r\n### **3.6.2 \uc870\ub9bd**\r\n\r\n- RoboCam\uc744 \uc815\ubc29\ud5a5\uc73c\ub85c \ud558\uc5ec \uc790\uc0ac Servo Motor\uc758 \ucd95\uacfc RoboCam\uc758 \uc2dc\uc57c\uac00 \uc218\ud3c9\ud558\ub3c4\ub85d \uacb0\ud569\ud569\ub2c8\ub2e4.\r\n- Servo Motor\ub294 RS Board\uc758 ***D2***\uc5d0 \uc5f0\uacb0\ud569\ub2c8\ub2e4.\r\n\r\n### **3.6.3 \ucf54\ub4dc**\r\n\r\n```python\r\nfrom RobokitRS import *\r\nfrom RoboCam.robocam import *\r\nfrom time import sleep\r\n\r\nrs = RobokitRS.RobokitRS()\r\nrCam = RoboCam()\r\n\r\nrCam.CameraStreamInit()\r\nrCam.CameraStream()\r\nrCam.SketchDetectorInit()\r\nrCam.SketchDetectorStart()\r\n\r\nif __name__ == \"__main__\":\r\n    rs.port_open(\"COM5\")\r\n    sketch = input(\"Plz type a name of sketch to follow\")\r\n    rCam.SketchCapture(sketch)\r\n    sleep(3)\r\n    rCam.SketchCapture(\"End\")\r\n    sleep(3)\r\n    print(\"Capture Complete\")\r\n    rCam.TrainSketchData()\r\n    servo_angle = 0\r\n    servo_max = 110\r\n    servo_min = -110\r\n    servo_speed = 5\r\n    moving_cw = True\r\n    while True:\r\n        if rCam.GetSketchExist(sketch):\r\n            cor = rCam.GetSketchCenterPoint(sketch)\r\n            if cor[0]>300 and servo_angle<servo_max:\r\n                servo_angle+=servo_speed\r\n            elif cor[0]<150 and servo_angle>servo_min:\r\n                servo_angle-=servo_speed\r\n        if rCam.GetSketchExist(\"End\"):\r\n            end_cor = rCam.GetSketchCenterPoint(\"End\")\r\n            if end_cor[0]<300 and end_cor[0]>150:\r\n                rCam.CameraStreamOff()\r\n                rs.end()\r\n        rs.servo_write(2, servo_angle)\r\n        sleep(0.2)\r\n```\r\n\r\n# 4 **\ub77c\uc774\ube0c\ub7ec\ub9ac \uc5c5\ub370\uc774\ud2b8**\r\n## **v1.0.0.32 (Oct, 16th)**\r\n### **\uc624\ud0c8\uc790 \uc218\uc815**\r\nGetMousePoint() \u2192 GetMouthPoint()\r\n\r\n# **5 \ubd80\ub85d**\r\n## **5.1 \uad8c\uc7a5 \ud328\ud0a4\uc9c0 \ubc84\uc804**\r\n\r\n| Package Name | Version | Command | Link |\r\n| --- | --- | --- | --- |\r\n| absl-py | 1.4.0 |  |  |\r\n| astunparse | 1.6.3 |  |  |\r\n| cachetools | 5.3.1 |  |  |\r\n| certifi | 2023.5.7 |  |  |\r\n| charset-normalizer | 3.1.0 |  |  |\r\n| flatbuffers | 23.5.26 |  |  |\r\n| gast | 0.4.0 |  |  |\r\n| google-auth | 2.21.0 |  |  |\r\n| google-auth-oauthlib | 1.0.0 |  |  |\r\n| google-pasta | 0.2.0 |  |  |\r\n| grpcio | 1.56.0 |  |  |\r\n| h5py | 3.9.0 |  |  |\r\n| idna | 3.4 |  |  |\r\n| jax | 0.4.13 |  |  |\r\n| keras | 2.12.0 |  |  |\r\n| libclang | 16.0.0 |  |  |\r\n| Markdown | 3.4.3 |  |  |\r\n| MarkupSafe | 2.1.3 |  |  |\r\n| ml-dtypes | 0.2.0 |  |  |\r\n| numpy | 1.23.5 | pip install numpy==1.23.5 | https://pypi.org/project/numpy/1.23.5/ |\r\n| oauthlib | 3.2.2 |  |  |\r\n| opencv-contrib-python | 4.7.0.72 | pip install opencv-contrib-python==4.7.0.72 | https://pypi.org/project/opencv-contrib-python/4.7.0.72/ |\r\n| opt-einsum | 3.3.0 |  |  |\r\n| packaging | 23.1 |  |  |\r\n| protobuf | 4.23.3 |  |  |\r\n| pyasn1 | 0.5.0 |  |  |\r\n| pyasn1-modules | 0.3.0 |  |  |\r\n| requests | 2.31.0 |  |  |\r\n| requests-oauthlib | 1.3.1 |  |  |\r\n| RoboCam | 1.0.0.32 |  |  |\r\n| rsa | 4.9 |  |  |\r\n| scipy | 1.11.1 |  |  |\r\n| six | 1.16.0 |  |  |\r\n| tensorboard | 2.12.3 |  |  |\r\n| tensorboard-data-server | 0.7.1 |  |  |\r\n| tensorflow | 2.12.0 | pip install tensorflow==2.12.0 | https://pypi.org/project/tensorflow/2.12.0/ |\r\n| tensorflow-estimator | 2.12.0 |  |  |\r\n| tensorflow-intel | 2.12.0 |  |  |\r\n| tensorflow-io-gcs-filesystem | 0.31.0 |  |  |\r\n| termcolor | 2.3.0 |  |  |\r\n| tflite | 2.10.0 | pip install tflite==2.10.0 | https://pypi.org/project/tflite/2.10.0/ |\r\n| typing_extensions | 4.7.1 |  |  |\r\n| urllib3 | 1.26.16 |  |  |\r\n| Werkzeug | 2.3.6 |  |  |\r\n| wrapt | 1.14.1 |  |  |\r\n\r\n## **5.2 \uc2dc\uc2a4\ud15c**\r\n### **5.2.1 CameraEvents**\r\n\uce74\uba54\ub77c \uc774\ubca4\ud2b8 RoboCam \ubaa8\ub4c8\uc774 \ubc1c\uc0dd\uc2dc\ud0ac \uc218 \uc788\ub294 \uc774\ubca4\ud2b8 \ubaa9\ub85d\uc785\ub2c8\ub2e4. \uc5bc\uad74 \uac10\uc9c0, \uc5bc\uad74\ub79c\ub4dc\ub9c8\ud06c \uac10\uc9c0, Aruco\ub9c8\ucee4 \uac10\uc9c0, \uadf8\ub9bc \uac10\uc9c0, \uc22b\uc790 \uac10\uc9c0\ub97c \uc9c0\uc6d0\ud569\ub2c8\ub2e4.\r\n```python\r\nclass CameraEvents(enum.Enum):\r\n    RECV_DETECTED_FACE_COUNT = 1\r\n    RECV_DETECTED_FACE_NAME = 2\r\n    RECV_DETECTED_FACE_RECT = 3\r\n    RECV_LEFT_IRIS_POINT = 4\r\n    RECV_LEFT_EYEBROW_POINT = 5\r\n    RECV_RIGHT_IRIS_POINT = 5\r\n    RECV_RIGHT_EYEBROW_POINT = 6\r\n    RECV_NOSE_POINT = 7\r\n    RECV_MOUSE_POINT = 8\r\n    RECV_JAW_POINT = 9\r\n    RECV_ARUCO_ID = 10\r\n    RECV_ARUCO_IDS = 11\r\n    RECV_ARUCO_CENTER_POINTS = 12\r\n    RECV_ARUCO_RECT_POINTS = 13\r\n    RECV_ARUCO_ANGLE = 14\r\n    RECV_SKETCH_NAME = 15\r\n    RECV_NUMBERS = 16\r\n```\r\n## **5.3 RoboCam \ud074\ub798\uc2a4**\r\n### **5.3.1 RoboCam \ud074\ub798\uc2a4 \uc0dd\uc131\uc790**\r\nRoboCam \ud074\ub798\uc2a4\uc758 \uc0dd\uc131\uc790\ub294 \ub2e4\uc74c\uacfc \uac19\uc2b5\ub2c8\ub2e4.\r\n```\r\ndef __init__(self):\r\n```\r\n\ubcc4\ub3c4\uc758 \uc778\uc790\ub97c \uac16\uc9c0 \uc54a\uc73c\uba70, \uac1d\uccb4\ub97c \uc0dd\uc131\ud560 \uacbd\uc6b0, \uac01\uac01\uc758 \uc601\uc0c1\uc778\uc2dd \ubaa8\ub4c8\uc744 \ucd08\uae30\ud654 \ud558\uace0, \ub300\uae30\ud569\ub2c8\ub2e4.\r\n\r\n### **5.3.2 RoboCam \ud074\ub798\uc2a4\uc758 public \ud568\uc218 \uad6c\uc131**\r\n#### **5.3.2.1 Event \ud568\uc218**\r\n| \uc774\ub984 | \uc124\uba85 |\r\n| --- | --- |\r\n| SetEventHandler<br>(event:CameraEvents, func)\t|event\uac00 \uc778\uc2dd\ub418\uc5c8\uc744 \ub54c \ud638\ucd9c\ub420 func\uc744 \ub4f1\ub85d\ud569\ub2c8\ub2e4. <br><br>**\u25b6 event**<br> \uc601\uc0c1\ucc98\ub9ac \ubaa8\ub4c8\uc774 \ubc1c\uc0dd\uc2dc\ud0a4\ub294 \uc774\ubca4\ud2b8 \uc885\ub958\uc785\ub2c8\ub2e4. CameraEvents\ub97c \ucc38\uc870\ud558\uc2ed\uc2dc\uc624. <br>**\u25b6 func**<br>\uc601\uc0c1\ucc98\ub9ac \ubaa8\ub4c8\uc774 \uc774\ubca4\ud2b8\ub97c \ubc1c\uc0dd\uc2dc\ucf30\uc744 \ub54c, \ud638\ucd9c\ub420 \ud568\uc218\ud3ec\uc778\ud130\uc785\ub2c8\ub2e4. \ub9e4\uac1c\ubcc0\uc218\ub97c \ud655\uc778\ud558\uc5ec \uc0ac\uc6a9\ud574\uc57c\ud569\ub2c8\ub2e4.|\r\n|RemoveEventHandler<br>(event:CameraEvents)|\ub4f1\ub85d\ub41c event\ub97c \ub354 \uc774\uc0c1 \ubc1c\uc0dd\uc2dc\ud0a4\uc9c0 \uc54a\uae30 \uc704\ud574, \uc81c\uac70\ud558\ub294 \ud568\uc218\uc785\ub2c8\ub2e4.<br><br>**\u25b6 event**<br> \uc601\uc0c1\ucc98\ub9ac \ubaa8\ub4c8\uc774 \ubc1c\uc0dd\uc2dc\ud0a4\ub294 \uc774\ubca4\ud2b8 \uc885\ub958\uc785\ub2c8\ub2e4. CameraEvents\ub97c \ucc38\uc870\ud558\uc2ed\uc2dc\uc624.|\r\n#### **5.3.2.2 Stream \ud568\uc218**\r\n| \uc774\ub984 | \uc124\uba85 |\r\n| --- | --- |\r\n|CameraStreamInit<br>(width:int = 512, height:int = 512)|RoboCam\uc758 \uc2a4\ud2b8\ub9ac\ubc0d\uc744 \uc900\ube44\ud558\ub294 \ud568\uc218\uc785\ub2c8\ub2e4. width x height\uc758 \ud574\uc0c1\ub3c4\ub85c \uc2a4\ud2b8\ub9ac\ubc0d \ub429\ub2c8\ub2e4.<br>\ud568\uc218 \ud638\ucd9c \uc804, RoboCam\uacfc \uc640\uc774\ud30c\uc774 \uc5f0\uacb0\uc774 \ub418\uc5b4\uc788\uc5b4\uc57c\ud569\ub2c8\ub2e4.<br><br> RoboCam\uc758 \uae30\ubcf8 \uc8fc\uc18c\ub294 http://192.168.4.1:81/stream \uc785\ub2c8\ub2e4.<br><br>**\u25b6 width**<br>RoboCam\uc758 \uac00\ub85c \ud574\uc0c1\ub3c4\uc785\ub2c8\ub2e4. (\uae30\ubcf8\uac12 : 512)<br>**\u25b6 height**<br>RoboCam\uc758 \uc138\ub85c \ud574\uc0c1\ub3c4\uc785\ub2c8\ub2e4. (\uae30\ubcf8\uac12 : 512)|\r\n|CameraStream()|RoboCam\uc758 \uc601\uc0c1\uc2a4\ud2b8\ub9ac\ubc0d\uc744 \uc2dc\uc791\ud558\ub294 \ud568\uc218\uc785\ub2c8\ub2e4.|\r\n|CameraStreamInit|\ud568\uc218\uac00 \ud638\ucd9c\ub41c \ud6c4 \uc0ac\uc6a9\ud574\uc57c\ud569\ub2c8\ub2e4.|\r\n|CameraStreamOff()|RoboCam\uc758 \uc601\uc0c1\uc2a4\ud2b8\ub9ac\ubc0d\uc744 \uc885\ub8cc\ud558\ub294 \ud568\uc218\uc785\ub2c8\ub2e4.\r\n|WebcamStreamInit<br>(width:int = 640, height:int = 480)|Webcam\uc758 \uc2a4\ud2b8\ub9ac\ubc0d\uc744 \uc900\ube44\ud558\ub294 \ud568\uc218\uc785\ub2c8\ub2e4. width x height\uc758 \ud574\uc0c1\ub3c4\ub85c \uc2a4\ud2b8\ub9ac\ubc0d \ub429\ub2c8\ub2e4.<br>\ud568\uc218 \ud638\ucd9c \uc804, Webcam\uacfc USB \uc5f0\uacb0\uc774 \ub418\uc5b4\uc788\uc5b4\uc57c\ud569\ub2c8\ub2e4.<br><br>**\u25b6 width**<br>WebCam\uc758 \uac00\ub85c \ud574\uc0c1\ub3c4\uc785\ub2c8\ub2e4. (\uae30\ubcf8\uac12 : 640)<br>**\u25b6 height**<br>webCam\uc758 \uc138\ub85c \ud574\uc0c1\ub3c4\uc785\ub2c8\ub2e4. (\uae30\ubcf8\uac12 : 480)|\r\n|WebcamStream()|Webcam\uc758 \uc601\uc0c1\uc2a4\ud2b8\ub9ac\ubc0d\uc744 \uc2dc\uc791\ud558\ub294 \ud568\uc218\uc785\ub2c8\ub2e4.<br>**WebcamStreamInit** \ud568\uc218\uac00 \ud638\ucd9c\ub41c \ud6c4 \uc0ac\uc6a9\ud574\uc57c\ud569\ub2c8\ub2e4.|\r\n|WebcamStreamOff()|Webcam\uc758 \uc601\uc0c1\uc2a4\ud2b8\ub9ac\ubc0d\uc744 \uc885\ub8cc\ud558\ub294 \ud568\uc218\uc785\ub2c8\ub2e4.|\r\n|LeftRightFlipMode<br>(flag:bool)|RoboCam\uc758 \uc601\uc0c1\uc2a4\ud2b8\ub9ac\ubc0d\uc744 flag\uc5d0 \ub530\ub77c \uc88c\uc6b0 \ubc18\uc804 \uc2dc\ud0a4\ub294 \ud568\uc218\uc785\ub2c8\ub2e4.<br><br>**\u25b6 flag**<br>True : \uc88c\uc6b0\ubc18\uc804 ON, False : \uc88c\uc6b0\ubc18\uc804 OFF|\r\n|UpDownFlipMode<br>(flag:bool)|RoboCam\uc758 \uc601\uc0c1\uc2a4\ud2b8\ub9ac\ubc0d\uc744 flag\uc5d0 \ub530\ub77c \uc0c1\ud558 \ubc18\uc804 \uc2dc\ud0a4\ub294 \ud568\uc218\uc785\ub2c8\ub2e4.<br><br>**\u25b6 flag**<br>True : \uc0c1\ud558\ubc18\uc804 ON, False : \uc0c1\ud558\ubc18\uc804 OFF\r\n|MosaicMode<br>(rate:int)|RoboCam\uc758 \uc601\uc0c1\uc2a4\ud2b8\ub9ac\ubc0d\uc5d0 \ubaa8\uc790\uc774\ud06c\ub97c rate \ube44\uc728\ub85c \uc124\uc815\ud558\ub294 \ud568\uc218\uc785\ub2c8\ub2e4.<br><br>**\u25b6 rate**<br>\uc601\uc0c1 \ubaa8\uc790\uc774\ud06c\uc758 \ube44\uc728\uc785\ub2c8\ub2e4.<br>\ub2e8\uc704 : \ud37c\uc13c\ud2b8(%), \uae30\ubcf8\uac12 : 0|\r\n|RotateMode<br>(angle:int)|RoboCam\uc758 \uc601\uc0c1\uc2a4\ud2b8\ub9ac\ubc0d\uc744 angle\ub9cc\ud07c \ud68c\uc804\uc2dc\ud0a4\ub294 \ud568\uc218\uc785\ub2c8\ub2e4.<br><br>**\u25b6 angle**<br>\uc601\uc0c1 \ud68c\uc804\uac01\ub3c4 \uc785\ub2c8\ub2e4.<br>\ub2e8\uc704 : \uac01\ub3c4(\u02da), \uae30\ubcf8\uac12 : 90|\r\n#### **5.3.2.3 Facedetector \ud568\uc218**\r\n|\uc774\ub984|\uc124\uba85|\r\n|---|---|\r\n|FacedetectorInit()|RoboCam\uc758 \uc5bc\uad74\uc778\uc2dd \ubaa8\ub4c8\uc744 \uc900\ube44\ud558\ub294 \ud568\uc218\uc785\ub2c8\ub2e4.<br>\uc5bc\uad74\uac10\uc9c0, \uad6c\ubcc4, \ub79c\ub4dc\ub9c8\ud06c \uc778\uc2dd\uc744 \ucd08\uae30\ud654 \ud569\ub2c8\ub2e4.|\r\n|FacedetectorStart()|\uc5bc\uad74\uac10\uc9c0 \ubaa8\ub4c8\uc744 \uc2e4\ud589\ud558\ub294 \ud568\uc218\uc785\ub2c8\ub2e4.<br>RoboCam \ud654\uba74 \uc548\uc5d0 \ub4e4\uc5b4\uc628 \uc5bc\uad74\uc744 \uc778\uc2dd\ud558\uc5ec \uc678\uacfd\uc120\uc5d0 \uc0ac\uac01\ud615\uc744 \ud45c\uc2dc\ud569\ub2c8\ub2e4.<br>\ub208,\ucf54,\uc785 \ub4f1 \uc5bc\uad74\uc758 \ub79c\ub4dc\ub9c8\ud06c\uc758 \uc88c\ud45c\ub4e4\uc5d0 \uc791\uc740\uc6d0\uc73c\ub85c \ud45c\uc2dc\ud569\ub2c8\ub2e4.<br>\ud559\uc2b5\ub41c \ub370\uc774\ud130\uac00 \uc788\ub2e4\uba74, \ud559\uc2b5\ub41c \ub370\uc774\ud130\uc640 \ube44\uad50\ud558\uc5ec \uc778\uc2dd\ub41c \uc774\ub984\uc744 \ud45c\uc2dc\ud569\ub2c8\ub2e4.|\r\n|FacedetectorStop()|\uc5bc\uad74\uac10\uc9c0 \ubaa8\ub4c8\uc744 \uc911\uc9c0\ud558\ub294 \ud568\uc218\uc785\ub2c8\ub2e4.|\r\n|GetFaceCount() -> int|\ud654\uba74\uc5d0 \uc778\uc2dd\ub41c \uc5bc\uad74\uc758 \uac2f\uc218\ub97c \ubc18\ud658\ud558\ub294 \ud568\uc218\uc785\ub2c8\ub2e4.|\r\n|GetFaceRects() -> list|\ud654\uba74\uc5d0 \uc778\uc2dd\ub41c \uc5bc\uad74\uc744 \ud45c\uc2dc\ud558\ub294 \uc678\uacfd \uc0ac\uac01\ud615\uc758 \uc88c\ud45c\ub4e4\uc744 \ubc18\ud658\ud558\ub294 \ud568\uc218\uc785\ub2c8\ub2e4.|\r\n|DrawFaceArea(flag:bool)|\ud654\uba74\uc5d0 \uc778\uc2dd\ub41c \uc5bc\uad74\uc758 \uc601\uc5ed\uc744 \ud45c\uc2dc\ud560\uc9c0 \uc815\ud558\ub294 \ud568\uc218\uc785\ub2c8\ub2e4.|\r\n|DrawFacePoint(flag:bool)|\ud654\uba74\uc5d0 \uc778\uc2dd\ub41c \uc5bc\uad74\uc758 \uc88c\ud45c\ub97c \ud45c\uc2dc\ud560\uc9c0 \uc815\ud558\ub294 \ud568\uc218\uc785\ub2c8\ub2e4.|\r\n|DrawFaceSize(flag:bool)|\ud654\uba74\uc5d0 \uc778\uc2dd\ub41c \uc5bc\uad74\uc758 \ud06c\uae30\ub97c \ud45c\uc2dc\ud560\uc9c0 \uc815\ud558\ub294 \ud568\uc218\uc785\ub2c8\ub2e4.|\r\n#### **5.3.2.4 FaceRecognizer \ud568\uc218**\r\n|\uc774\ub984|\uc124\uba85|\r\n|---|---|\r\n|FaceCapture<br>(name:str, captureCount:int=5, path:str)|\uac10\uc9c0\ub41c \uc5bc\uad74\uc744 name \uc774\ub984\uc73c\ub85c captureCount \ud69f\uc218 \ub9cc\ud07c \ucea1\uccd0\ud558\uc5ec path \uc704\uce58\uc5d0 \uc800\uc7a5\ud558\ub294 \ud568\uc218\uc785\ub2c8\ub2e4.<br>\uc800\uc7a5\ub41c \uc5bc\uad74\uc740 \uc5bc\uad74\uad6c\ubcc4 \ubaa8\ub4c8\uc758 \ud559\uc2b5\ub370\uc774\ud130\ub85c \uc0ac\uc6a9\ub429\ub2c8\ub2e4. RoboCam \ud654\uba74\uc5d0 \uc5bc\uad74\uc774 \uc778\uc2dd\ub418\uc9c0 \uc54a\uc558\ub2e4\uba74 \uc800\uc7a5\ub418\uc9c0 \uc54a\uc2b5\ub2c8\ub2e4.<br><br>**\u25b6 name**<br>\uc5bc\uad74\uc774 \uc800\uc7a5\ub420 \uc774\ub984\uc785\ub2c8\ub2e4. \uac19\uc740 \uc774\ub984\uc73c\ub85c \uc5ec\ub7ec\ubc88 \uc800\uc7a5\ud558\uba74, \uc790\ub3d9 \ub118\ubc84\ub9c1\ub418\uc5b4 \uc800\uc7a5\ub429\ub2c8\ub2e4.<br>**\u25b6 captureCount**<br>\uc5bc\uad74\uc744 \uc800\uc7a5\ud560 \ud69f\uc218\uc785\ub2c8\ub2e4. 0.1\ucd08 \uac04\uaca9\uc73c\ub85c \uc9c0\uc815\ub41c \ud69f\uc218\ub9cc\ud07c \uc800\uc7a5\ud569\ub2c8\ub2e4.<br>**\u25b6 path**<br>\uc5bc\uad74\uc774 \uc800\uc7a5\ub420 \uacbd\ub85c\uc785\ub2c8\ub2e4. \uae30\ubcf8\uacbd\ub85c\ub294 \ud328\ud0a4\uc9c0 \uc124\uce58\uacbd\ub85c\uc758 '/res/face/'\uc785\ub2c8\ub2e4.<br>\uc800\uc7a5 \uacbd\ub85c\ub97c \ubc14\uafb8\uc5b4\uc11c \uc800\uc7a5\ud560 \uacbd\uc6b0, \ubaa8\ub4c8 \ud559\uc2b5 \uc2dc \ubcc0\uacbd\ub41c \uacbd\ub85c\ub85c \uc124\uc815\ud574\uc57c\ud569\ub2c8\ub2e4.|\r\n|TrainFaceData<br>(facePath:str)|facepath\uc5d0 \uc800\uc7a5\ub41c \uc5bc\uad74 \ub370\uc774\ud130\ub97c \uc5bc\uad74\uad6c\ubcc4 \ubaa8\ub4c8\uc5d0 \ud559\uc2b5\uc2dc\ud0a4\ub294 \ud568\uc218\uc785\ub2c8\ub2e4.<br>\ud559\uc2b5\ub41c \ub370\uc774\ud130\ub97c \uae30\ubc18\uc73c\ub85c RoboCam\uc5d0 \ud655\uc778\ub41c \uc5bc\uad74\uc758 \uc774\ub984\uc774 \ud45c\uc2dc\ub429\ub2c8\ub2e4.<br><br>**\u25b6 facePath**<br>\uc5bc\uad74\uc774 \uc800\uc7a5\ub420 \uacbd\ub85c\uc785\ub2c8\ub2e4. \uae30\ubcf8\uacbd\ub85c\ub294 \ud328\ud0a4\uc9c0 \uc124\uce58\uacbd\ub85c\uc758 '/res/face/'\uc785\ub2c8\ub2e4.<br>\uc800\uc7a5 \uacbd\ub85c\ub97c \ubc14\uafb8\uc5b4\uc11c \uc800\uc7a5\ud560 \uacbd\uc6b0, \ubaa8\ub4c8 \ud559\uc2b5 \uc2dc \ubcc0\uacbd\ub41c \uacbd\ub85c\ub85c \uc124\uc815\ud574\uc57c\ud569\ub2c8\ub2e4.|\r\n|DeleteFaceData<br>(name:str, facePath:str)|facepath\uc5d0 \uc800\uc7a5\ub41c name \uc774\ub984\uc744 \uac00\uc9c4 \uc5bc\uad74 \ub370\uc774\ud130\ub97c \uc0ad\uc81c\ud558\ub294 \ud568\uc218\uc785\ub2c8\ub2e4.<br>\ud574\ub2f9 \ud3f4\ub354\uc5d0 \uc811\uadfc\ud558\uc5ec \ub370\uc774\ud130\ub97c \uc0ad\uc81c\ud569\ub2c8\ub2e4. \ub370\uc774\ud130 \uc0ad\uc81c \uc774\ud6c4, TrainFaceData \ud568\uc218\ub97c \ud638\ucd9c\ud574\uc57c \uc5bc\uad74\uad6c\ubcc4 \ubaa8\ub4c8\uc5d0 \uc801\uc6a9\ub429\ub2c8\ub2e4.|\r\n|GetFaceNames() -> list|RoboCam\uc5d0 \ud655\uc778\ub41c \uc5bc\uad74\ub4e4\uc758 \uc774\ub984\uc744 list \ud615\ud0dc\ub85c \ubc18\ud658\ud558\ub294 \ud568\uc218\uc785\ub2c8\ub2e4.<br>\ud604\uc7ac \uc778\uc2dd\ub41c \uc5bc\uad74\uc774 \uc5c6\ub2e4\uba74 \ube48 \ub9ac\uc2a4\ud2b8\ub97c \ubc18\ud658\ud569\ub2c8\ub2e4.|\r\n|GetFaceExist(name:str) -> bool|RoboCam\uc5d0 \uc778\uc2dd\ub41c \uc5bc\uad74 \uc911, name\uc758 \uc774\ub984\uc744 \uac00\uc9c4 \uc5bc\uad74\uc774 \uc788\ub294\uc9c0 \ubc18\ud658\ud558\ub294 \ud568\uc218\uc785\ub2c8\ub2e4.<br><br>**\u25b6 name**<br>\uac80\ucd9c\ud560 \uc5bc\uad74\uc758 \uc774\ub984\uc785\ub2c8\ub2e4.|\r\n|GetFaceSize(name:str) -> int|RoboCam\uc5d0 \uc778\uc2dd\ub41c \uc5bc\uad74 \uc911, name\uc758 \uc774\ub984\uc744 \uac00\uc9c4 \uc5bc\uad74\uc758 \ud06c\uae30\ub97c \ubc18\ud658\ud558\ub294 \ud568\uc218\uc785\ub2c8\ub2e4.<br><br>**\u25b6 name**<br>\uc0ac\uc774\uc988\ub97c \uad6c\ud560 \uc5bc\uad74\uc758 \uc774\ub984\uc785\ub2c8\ub2e4.<br>\uc785\ub825\ud558\uc9c0 \uc54a\ub294\ub2e4\uba74, \ud559\uc2b5\ub418\uc9c0 \uc54a\uc740 \uc5bc\uad74\uc758 \uc0ac\uc774\uc988\ub97c \ubc18\ud658\ud569\ub2c8\ub2e4.|\r\n|GetFaceCenterPoint(name:str) -> list|RoboCam\uc5d0 \ud655\uc778\ub41c \uc5bc\uad74\ub4e4 \uc911 name\uc758 \uc774\ub984\uc744 \uac00\uc9c4 \uc5bc\uad74\uc758 \uc911\uc2ec\uc88c\ud45c\ub97c \ubc18\ud658\ud558\ub294 \ud568\uc218\uc785\ub2c8\ub2e4.<br><br>**\u25b6 name**<br>\uc88c\ud45c\ub97c \uad6c\ud560 \uc5bc\uad74\uc758 \uc774\ub984\uc785\ub2c8\ub2e4.<br>\uc785\ub825\ud558\uc9c0 \uc54a\ub294\ub2e4\uba74, \ud559\uc2b5\ub418\uc9c0 \uc54a\uc740 \uc5bc\uad74\uc758 \uc0ac\uc774\uc988\ub97c \ubc18\ud658\ud569\ub2c8\ub2e4.|\r\n|DrawFaceName(flag:bool)|\ud654\uba74\uc5d0 \uc778\uc2dd\ub41c \uc5bc\uad74\uc758 \uc774\ub984\uc744 \ud45c\uc2dc\ud560\uc9c0 \uc815\ud558\ub294 \ud568\uc218\uc785\ub2c8\ub2e4.|\r\n#### **5.3.2.5 FaceLandmark \ud568\uc218**\r\n|\uc774\ub984|\uc124\uba85|\r\n|---|---|\r\n|GetLeftIrisPoint(name:str)->list|RoboCam\uc5d0 \ud655\uc778\ub41c \uc5bc\uad74\uc758 \uc67c\ucabd \ub208\ub3d9\uc790\uc758 \uc88c\ud45c\ub97c \ubc18\ud658\ud558\ub294 \ud568\uc218\uc785\ub2c8\ub2e4.<br><br>**\u25b6 name**<br>\uac80\ucd9c\ud560 \uc5bc\uad74\uc758 \uc774\ub984\uc785\ub2c8\ub2e4.|\r\n|GetLeftEyebrowPoint(name:str)->list|RoboCam\uc5d0 \ud655\uc778\ub41c \uc5bc\uad74\uc758 \uc67c\ucabd \ub208\uc379\uc758 \uc88c\ud45c\ub97c \ubc18\ud658\ud558\ub294 \ud568\uc218\uc785\ub2c8\ub2e4.<br><br>**\u25b6 name**<br>\uac80\ucd9c\ud560 \uc5bc\uad74\uc758 \uc774\ub984\uc785\ub2c8\ub2e4.|\r\n|GetRightIrisPoint(name:str)->list|RoboCam\uc5d0 \ud655\uc778\ub41c \uc5bc\uad74\uc758 \uc624\ub978\ucabd \ub208\ub3d9\uc790\uc758 \uc88c\ud45c\ub97c \ubc18\ud658\ud558\ub294 \ud568\uc218\uc785\ub2c8\ub2e4.<br><br>**\u25b6 name**<br>\uac80\ucd9c\ud560 \uc5bc\uad74\uc758 \uc774\ub984\uc785\ub2c8\ub2e4.|\r\n|GetRightEyebrowPoint(name:str)->list|RoboCam\uc5d0 \ud655\uc778\ub41c \uc5bc\uad74\uc758 \uc624\ub978\ucabd \ub208\uc379\uc758 \uc88c\ud45c\ub97c \ubc18\ud658\ud558\ub294 \ud568\uc218\uc785\ub2c8\ub2e4.<br><br>**\u25b6 name**<br>\uac80\ucd9c\ud560 \uc5bc\uad74\uc758 \uc774\ub984\uc785\ub2c8\ub2e4.|\r\n|GetNosePoint(name:str)->list|RoboCam\uc5d0 \ud655\uc778\ub41c \uc5bc\uad74\uc758 \ucf54\uc758 \uc88c\ud45c\ub97c \ubc18\ud658\ud558\ub294 \ud568\uc218\uc785\ub2c8\ub2e4.<br><br>**\u25b6 name**<br>\uac80\ucd9c\ud560 \uc5bc\uad74\uc758 \uc774\ub984\uc785\ub2c8\ub2e4.|\r\n|GetMouthPoint(name:str)->list|RoboCam\uc5d0 \ud655\uc778\ub41c \uc5bc\uad74\uc758 \uc785\uc758 \uc88c\ud45c\ub97c \ubc18\ud658\ud558\ub294 \ud568\uc218\uc785\ub2c8\ub2e4.<br><br>**\u25b6 name**<br>\uac80\ucd9c\ud560 \uc5bc\uad74\uc758 \uc774\ub984\uc785\ub2c8\ub2e4.|\r\n|GetJawPoint(name:str)->list|RoboCam\uc5d0 \ud655\uc778\ub41c \uc5bc\uad74\uc758 \ud131\uc758 \uc88c\ud45c\ub97c \ubc18\ud658\ud558\ub294 \ud568\uc218\uc785\ub2c8\ub2e4.<br><br>**\u25b6 name**<br>\uac80\ucd9c\ud560 \uc5bc\uad74\uc758 \uc774\ub984\uc785\ub2c8\ub2e4.|\r\n|DrawFaceLandmark(flag:bool)|\ud654\uba74\uc5d0 \uc778\uc2dd\ub41c \uc5bc\uad74\uc758 \ub79c\ub4dc\ub9c8\ud06c\ub97c \ud45c\uc2dc\ud560\uc9c0 \uc815\ud558\ub294 \ud568\uc218\uc785\ub2c8\ub2e4.\r\n#### **5.3.2.6 ArucoDetector \ud568\uc218**\r\n|\uc774\ub984|\uc124\uba85|\r\n|---|---|\r\n|ArucoDetectorInit()|Aruco\ub9c8\ucee4 \ud0d0\uc0c9 \ubaa8\ub4c8\uc744 \ucd08\uae30\ud654 \ud558\ub294 \ud568\uc218\uc785\ub2c8\ub2e4.Original Aruco \ud0c0\uac9f\uc73c\ub85c \ud0d0\uc0c9\ud569\ub2c8\ub2e4.|\r\n|ArucoDetectorStart()|Aruco\ub9c8\ucee4 \ud0d0\uc0c9 \ubaa8\ub4c8\uc744 \uc2e4\ud589 \uc2dc\ud0a4\ub294 \ud568\uc218\uc785\ub2c8\ub2e4.|\r\n|ArucoDetectorStop()|Acuro\ub9c8\ucee4 \ud0d0\uc0c9 \ubaa8\ub4c8\uc744 \uc815\uc9c0 \uc2dc\ud0a4\ub294 \ud568\uc218\uc785\ub2c8\ub2e4.||\r\n|GetArucoId() -> int|RoboCam\uc5d0 \uc778\uc2dd\ub41c Aruco \ub9c8\ucee4\uc758 \uace0\uc720 \ubc88\ud638\ub97c int \ud615\ud0dc\ub85c \ubc18\ud658\ud558\ub294 \ud568\uc218\uc785\ub2c8\ub2e4.|\r\n|GetArucoIds()-> list|RoboCam\uc5d0 \uc778\uc2dd\ub41c Aruco \ub9c8\ucee4\ub4e4\uc758 \uace0\uc720 \ubc88\ud638\ub97c list \ud615\ud0dc\ub85c \ubc18\ud658\ud558\ub294 \ud568\uc218\uc785\ub2c8\ub2e4.|\r\n|GetArucoCenterPoint(id:int) -> list|RoboCam\uc5d0 \uc778\uc2dd\ub41c Aruco \ub9c8\ucee4\uc758 \uc911\uc2ec\uc88c\ud45c\ub97c [X,Y] \ud615\ud0dc\ub85c \ubc18\ud658\ud558\ub294 \ud568\uc218\uc785\ub2c8\ub2e4.<br><br>**\u25b6 id**<br>\uac80\ucd9c\ud560 Marker\uc758 ID\uc785\ub2c8\ub2e4.|\r\n|GetArucoCount() -> int|RoboCam\uc5d0 \uc778\uc2dd\ub41c Aruco \ub9c8\ucee4\uc758 \uac2f\uc218\ub97c \ubc18\ud658\ud558\ub294 \ud568\uc218\uc785\ub2c8\ub2e4.|\r\n|GetArucoExist(id:int) -> bool: |RoboCam\uc5d0 \uc778\uc2dd\ub41c Aruco \ub9c8\ucee4 \uc911, id\uc640 \ub9de\ub294 \ub9c8\ucee4\uac00 \uc788\ub294\uc9c0 \ubc18\ud658\ud558\ub294 \ud568\uc218\uc785\ub2c8\ub2e4.|\r\n|GetArucoX(id:int) -> int:|RoboCam\uc5d0 \uc778\uc2dd\ub41c Aruco \ub9c8\ucee4 \uc911, id\uc5d0 \ud574\ub2f9\ud558\ub294 \ub9c8\ucee4\uc758 X \uc88c\ud45c\ub97c \ubc18\ud658\ud558\ub294 \ud568\uc218\uc785\ub2c8\ub2e4.|\r\n|GetArucoY(id:int) -> int:|RoboCam\uc5d0 \uc778\uc2dd\ub41c Aruco \ub9c8\ucee4 \uc911, id\uc5d0 \ud574\ub2f9\ud558\ub294 \ub9c8\ucee4\uc758 Y \uc88c\ud45c\ub97c \ubc18\ud658\ud558\ub294 \ud568\uc218\uc785\ub2c8\ub2e4.|\r\n|GetArucoDistance(id:int) -> int:|RoboCam\uc5d0 \uc778\uc2dd\ub41c Aruco \ub9c8\ucee4 \uc911, id\uc5d0 \ud574\ub2f9\ud558\ub294 \ub9c8\ucee4\uc640\uc758 \uac70\ub9ac\ub97c \ubc18\ud658\ud558\ub294 \ud568\uc218\uc785\ub2c8\ub2e4.|\r\n|GetArucoRectPoint(id:int) -> list|RoboCam\uc5d0 \uc778\uc2dd\ub41c Aruco \ub9c8\ucee4 \uc911, id\uc5d0 \ud574\ub2f9\ud558\ub294 \ub9c8\ucee4\uc758 \ub124 \ubaa8\uc11c\ub9ac \uc88c\ud45c\ub97c [ [X1,Y1], [X2,Y2], [X3,Y3], [X4,Y4] ] \ud615\ud0dc\ub85c \ubc18\ud658\ud558\ub294 \ud568\uc218\uc785\ub2c8\ub2e4.|\r\n|GetArucoAngle()->float|RoboCam\uc5d0 \uc778\uc2dd\ub41c Aruco \ub9c8\ucee4\uc758 \uac01\ub3c4\ub97c \ubc18\ud658\ud558\ub294 \ud568\uc218\uc785\ub2c8\ub2e4.|\r\n|DrawArucoArea(flag:bool)|\uc778\uc2dd\ub41c Aruco \ub9c8\ucee4\uc758 \uc601\uc5ed\uc744 \ud45c\uc2dc\ud560\uc9c0 \uc815\ud558\ub294 \ud568\uc218\uc785\ub2c8\ub2e4.|\r\n|DrawArucoId(flag:bool)|\uc778\uc2dd\ub41c Aruco \ub9c8\ucee4\uc758 ID\ub97c \ud45c\uc2dc\ud560\uc9c0 \uc815\ud558\ub294 \ud568\uc218\uc785\ub2c8\ub2e4.|\r\n|DrawArucoPoint(flag:bool)|\uc778\uc2dd\ub41c Aruco \ub9c8\ucee4\uc758 \uc88c\ud45c\ub97c \ud45c\uc2dc\ud560\uc9c0 \uc815\ud558\ub294 \ud568\uc218\uc785\ub2c8\ub2e4.|\r\n|DrawArucoDistance(flag:bool)|\uc778\uc2dd\ub41c Aruco \ub9c8\ucee4\uc758 \uac70\ub9ac\ub97c \ud45c\uc2dc\ud560\uc9c0 \uc815\ud558\ub294 \ud568\uc218\uc785\ub2c8\ub2e4.|\r\n|DrawArucoSize(flag:bool)|\uc778\uc2dd\ub41c Aruco \ub9c8\ucee4\uc758 \uc0ac\uc774\uc988\ub97c \ud45c\uc2dc\ud560\uc9c0 \uc815\ud558\ub294 \ud568\uc218\uc785\ub2c8\ub2e4.\r\n##### **5.3.2.6.1 ArucoDetector \ud568\uc218\uc758 \uc0ac\uc6a9\ubc95**\r\n```python\r\n # RoboCam \ub77c\uc774\ube0c\ub7ec\ub9ac\ub97c \ucc38\uc870\ud569\ub2c8\ub2e4.\r\n import RoboCam.robocam as robocam\r\n\r\n # \ub85c\ubcf4\ucea0 \uac1d\uccb4\ub97c \uc0dd\uc131\ud558\uace0, \ucd08\uae30\ud654 \ud55c \ud6c4, \uce74\uba54\ub77c \uc2a4\ud2b8\ub9bc\uc744 \uc2dc\uc791\ud569\ub2c8\ub2e4.\r\n rCam = robocam.RoboCam()\r\n rCam.CameraStreamInit()\r\n rCam.CameraStream()\r\n\r\n # ArucoDetector\ub97c \ucd08\uae30\ud654 \ud558\uace0, \uc2dc\uc791\ud569\ub2c8\ub2e4.\r\n rCam.ArucoDetectorInit()\r\n rCam.ArucoDetectorStart()\r\n\r\n # \uc778\uc2dd\ub41c ArucoMarker\uc758 \uc815\ubcf4\ub97c \ucd9c\ub825\ud569\ub2c8\ub2e4.\r\n while(True):\r\n   print(\" id  = \"         , rCam.GetArucoId())\r\n   print(\" ids = \"         , rCam.GetArucoIds())\r\n   print(\" centerPoint = \" , rCam.GetArucoCenterPoint())\r\n   print(\" rectPoint = \"   , rCam.GetArucoRectPoint())\r\n   print(\" angle = \"       , rCam.GetArucoAngle())\r\n4.2.6.2 ArucoDetector \uc774\ubca4\ud2b8\uc758 \uc0ac\uc6a9\ubc95\r\n    # RoboCam \ub77c\uc774\ube0c\ub7ec\ub9ac\ub97c \ucc38\uc870\ud569\ub2c8\ub2e4.\r\n    import RoboCam.robocam as robocam\r\n\r\n    # ArucoMarker\uc758 \ub370\uc774\ud130\ub97c \uc218\uc2e0\ud560 \ud568\uc218\ub97c \uc120\uc5b8 \ud569\ub2c8\ub2e4.\r\n    def ArucoId_Printer(id):\r\n        print(\" id  = \" , id)\r\n\r\n    def ArucoIds_Printer(ids):\r\n        print(\" ids = \" , ids)\r\n\r\n    def ArucoCenterPoint_Printer(point):\r\n        print(\" centerPoint = \" , point)\r\n\r\n    def ArucoRectPoint_Printer(point):\r\n        print(\" rectPoint = \" ,  point)\r\n\r\n    def ArucoAngle_Printer(angle):\r\n        print(\" angle = \" , angle)\r\n\r\n    # \ub85c\ubcf4\ucea0 \uac1d\uccb4\ub97c \uc0dd\uc131\ud558\uace0, \ucd08\uae30\ud654 \ud55c \ud6c4, \uce74\uba54\ub77c \uc2a4\ud2b8\ub9bc\uc744 \uc2dc\uc791\ud569\ub2c8\ub2e4.\r\n    rCam = robocam.RoboCam()\r\n    rCam.CameraStreamInit()\r\n    rCam.CameraStream()\r\n\r\n    # ArucoDetector\ub97c \ucd08\uae30\ud654 \ud558\uace0, \uc2dc\uc791\ud569\ub2c8\ub2e4.\r\n    rCam.ArucoDetectorInit()\r\n    rCam.ArucoDetectorStart()\r\n\r\n    # \uc120\uc5b8\ud574\ub193\uc740 \ub370\uc774\ud130 \uc218\uc2e0 \ud568\uc218\ub97c, \uac01 \uc774\ubca4\ud2b8\uc5d0 \ub9de\uac8c \ub85c\ubcf4\ucea0 \uac1d\uccb4\uc5d0 \ub4f1\ub85d\ud569\ub2c8\ub2e4.\r\n    rCam.SetEventHandler(robocam.CameraEvents.RECV_ARUCO_ID, ArucoAngle_Printer)\r\n    rCam.SetEventHandler(robocam.CameraEvents.RECV_ARUCO_IDS, ArucoIds_Printer)\r\n    rCam.SetEventHandler(robocam.CameraEvents.RECV_ARUCO_CENTER_POINTS, ArucoCenterPoint_Printer)\r\n    rCam.SetEventHandler(robocam.CameraEvents.RECV_ARUCO_RECT_POINTS, ArucoRectPoint_Printer)\r\n    rCam.SetEventHandler(robocam.CameraEvents.RECV_ARUCO_ANGLE, ArucoAngle_Printer)\r\n```\r\n#### **5.3.2.7 SketchDetector \ud568\uc218**\r\n|\uc774\ub984|\uc124\uba85|\r\n|---|---|\r\n|SketchDetectorInit()|RoboCam\uc758 \uadf8\ub9bc\uad6c\ubcc4 \ubaa8\ub4c8\uc744 \uc900\ube44\ud558\ub294 \ud568\uc218\uc785\ub2c8\ub2e4.<br>\uac80\uc740 \uc678\uacfd \uc0ac\uac01\ud615 \ub0b4\ubd80\uc5d0 \uadf8\ub824\uc9c4 \uadf8\ub9bc\uc744 \ud559\uc2b5\ud558\uace0 \uad6c\ubcc4\ud569\ub2c8\ub2e4.|\r\n|SketchDetectorStart()|\uadf8\ub9bc\uad6c\ubcc4 \ubaa8\ub4c8\uc744 \uc2dc\uc791\ud558\ub294 \ud568\uc218\uc785\ub2c8\ub2e4.<br>RoboCam\uc5d0 \uc778\uc2dd\ub41c \uadf8\ub9bc \uc678\uacfd\uc5d0 \uc0ac\uac01\ud615\uc73c\ub85c \ud45c\uc2dc\ub429\ub2c8\ub2e4.|\r\n|SketchDetectorStop()|\uadf8\ub9bc\uad6c\ubcc4 \ubaa8\ub4c8\uc744 \uc815\uc9c0\ud558\ub294 \ud568\uc218\uc785\ub2c8\ub2e4.|\r\n|SketchCapture<br>(name:str,captureCount:int=5,path:str)|RoboCam\uc5d0 \uc778\uc2dd\ub41c \uadf8\ub9bc\uc744 name \uc774\ub984\uc73c\ub85c \ucea1\uccd0\ud558\uc5ec path\uc5d0 \uc800\uc7a5\ud558\ub294 \ud568\uc218\uc785\ub2c8\ub2e4.<br>\uc800\uc7a5\ub41c \uc5bc\uad74\uc740 \uc5bc\uad74\uad6c\ubcc4 \ubaa8\ub4c8\uc758 \ud559\uc2b5\ub370\uc774\ud130\ub85c \uc0ac\uc6a9\ub429\ub2c8\ub2e4. RoboCam \ud654\uba74\uc5d0 \uc5bc\uad74\uc774 \uc778\uc2dd\ub418\uc9c0 \uc54a\uc558\ub2e4\uba74 \uc800\uc7a5\ub418\uc9c0 \uc54a\uc2b5\ub2c8\ub2e4.<br><br>**\u25b6 name**<br>\uadf8\ub9bc\uc774 \uc800\uc7a5\ub420 \uc774\ub984\uc785\ub2c8\ub2e4. \uac19\uc740 \uc774\ub984\uc73c\ub85c \uc5ec\ub7ec\ubc88 \uc800\uc7a5\ud558\uba74, \uc790\ub3d9 \ub118\ubc84\ub9c1\ub418\uc5b4 \uc800\uc7a5\ub429\ub2c8\ub2e4.<br>**\u25b6 captureCount**<br>\uadf8\ub9bc\uc774 \uc800\uc7a5\ub420 \ud69f\uc218\uc785\ub2c8\ub2e4. \uc785\ub825\ud558\uc9c0 \uc54a\ub294\ub2e4\uba74 \ub2e4\uc12f\uc7a5\uc758 \uadf8\ub9bc\uc744 \uc800\uc7a5\ud569\ub2c8\ub2e4.<br>**\u25b6 path**<br>\uadf8\ub9bc\uc774 \uc800\uc7a5\ub420 \uacbd\ub85c\uc785\ub2c8\ub2e4. \uae30\ubcf8\uacbd\ub85c\ub294 \ud328\ud0a4\uc9c0 \uc124\uce58\uacbd\ub85c\uc758 '/res/sketch/'\uc785\ub2c8\ub2e4.<br>\uc800\uc7a5 \uacbd\ub85c\ub97c \ubc14\uafb8\uc5b4\uc11c \uc800\uc7a5\ud560 \uacbd\uc6b0, \ubaa8\ub4c8 \ud559\uc2b5 \uc2dc \ubcc0\uacbd\ub41c \uacbd\ub85c\ub85c \uc124\uc815\ud574\uc57c\ud569\ub2c8\ub2e4.|\r\n|TrainSketchData<br>(sketchPath:str)|sketchPath\uc5d0 \uc800\uc7a5\ub41c \uc5bc\uad74 \ub370\uc774\ud130\ub97c \uc5bc\uad74\uad6c\ubcc4 \ubaa8\ub4c8\uc5d0 \ud559\uc2b5\uc2dc\ud0a4\ub294 \ud568\uc218\uc785\ub2c8\ub2e4.<br>\ud559\uc2b5\ub41c \ub370\uc774\ud130\ub97c \uae30\ubc18\uc73c\ub85c RoboCam\uc5d0 \ud655\uc778\ub41c \uc5bc\uad74\uc758 \uc774\ub984\uc774 \ud45c\uc2dc\ub429\ub2c8\ub2e4.<br><br>**\u25b6 sketchPath**<br>\uc5bc\uad74\uc774 \uc800\uc7a5\ub420 \uacbd\ub85c\uc785\ub2c8\ub2e4. \uae30\ubcf8\uacbd\ub85c\ub294 \ud328\ud0a4\uc9c0 \uc124\uce58\uacbd\ub85c\uc758 '/res/sketch/'\uc785\ub2c8\ub2e4.<br>\uc800\uc7a5 \uacbd\ub85c\ub97c \ubc14\uafb8\uc5b4\uc11c \uc800\uc7a5\ud560 \uacbd\uc6b0, \ubaa8\ub4c8 \ud559\uc2b5 \uc2dc \ubcc0\uacbd\ub41c \uacbd\ub85c\ub85c \uc124\uc815\ud574\uc57c\ud569\ub2c8\ub2e4.|\r\n|DeleteSketchData<br>(name:str, sketchPath:str)|sketchPath\uc5d0 \uc800\uc7a5\ub41c name \uc774\ub984\uc744 \uac00\uc9c4 \uadf8\ub9bc \ub370\uc774\ud130\ub97c \uc0ad\uc81c\ud558\ub294 \ud568\uc218\uc785\ub2c8\ub2e4.<br>\ud574\ub2f9 \ud3f4\ub354\uc5d0 \uc811\uadfc\ud558\uc5ec \ub370\uc774\ud130\ub97c \uc0ad\uc81c\ud569\ub2c8\ub2e4. \ub370\uc774\ud130 \uc0ad\uc81c \uc774\ud6c4, TrainFaceData \ud568\uc218\ub97c \ud638\ucd9c\ud574\uc57c \uc5bc\uad74\uad6c\ubcc4 \ubaa8\ub4c8\uc5d0 \uc801\uc6a9\ub429\ub2c8\ub2e4.|\r\n|GetSketchNames()->list|RoboCam\uc5d0 \uc778\uc2dd\ub41c \uadf8\ub9bc\ub4e4\uc758 \uc774\ub984\uc744 list\ud615\ud0dc\ub85c \ubc18\ud658\ud558\ub294 \ud568\uc218\uc785\ub2c8\ub2e4.|\r\n|GetSketchExist(name:str)->bool\t|RoboCam\uc5d0 \uc778\uc2dd\ub41c \uadf8\ub9bc \uc911, name\uc5d0 \ud574\ub2f9\ud558\ub294 \uadf8\ub9bc\uc774 \uc788\ub294\uc9c0 \ubc18\ud658\ud558\ub294 \ud568\uc218\uc785\ub2c8\ub2e4.|\r\n|GetSketchCenterPoint(name:str)->list\t|RoboCam\uc5d0 \uc778\uc2dd\ub41c \uadf8\ub9bc \uc911, name\uc5d0 \ud574\ub2f9\ud558\ub294 \uadf8\ub9bc\uc758 \uc88c\ud45c\ub97c list\ud615\ud0dc\ub85c \ubc18\ud658\ud558\ub294 \ud568\uc218\uc785\ub2c8\ub2e4.|\r\n|GetSketchSize(name:str)->int\t|RoboCam\uc5d0 \uc778\uc2dd\ub41c \uadf8\ub9bc \uc911, name\uc5d0 \ud574\ub2f9\ud558\ub294 \uadf8\ub9bc\uc758 \ud06c\uae30\ub97c \ubc18\ud658\ud558\ub294 \ud568\uc218\uc785\ub2c8\ub2e4.|\r\n|DrawSketchArea(flag:bool)\t|\uc778\uc2dd\ub41c \uadf8\ub9bc\uc758 \uc601\uc5ed\uc744 \ud45c\uc2dc\ud560\uc9c0 \uc815\ud558\ub294 \ud568\uc218\uc785\ub2c8\ub2e4.|\r\n|DrawSketchName(flag:bool)\t|\uc778\uc2dd\ub41c \uadf8\ub9bc\uc758 \uc774\ub984\uc744 \ud45c\uc2dc\ud560\uc9c0 \uc815\ud558\ub294 \ud568\uc218\uc785\ub2c8\ub2e4.|\r\n|DrawSketchSize(flag:bool)\t|\uc778\uc2dd\ub41c \uadf8\ub9bc\uc758 \ud06c\uae30\ub97c \ud45c\uc2dc\ud560\uc9c0 \uc815\ud558\ub294 \ud568\uc218\uc785\ub2c8\ub2e4.|\r\n|DrawSketchPoint(flag:bool)\t|\uc778\uc2dd\ub41c \uadf8\ub9bc\uc758 \uc88c\ud45c\ub97c \ud45c\uc2dc\ud560\uc9c0 \uc815\ud558\ub294 \ud568\uc218\uc785\ub2c8\ub2e4.|\r\n#### **5.3.2.8 NumberRecognizer \ud568\uc218**\r\n|\uc774\ub984|\uc124\uba85|\r\n|---|---|\r\n|NumberRecognizerInit()|RoboCam\uc758 \uc22b\uc790\uad6c\ubcc4 \ubaa8\ub4c8\uc744 \uc900\ube44\ud558\ub294 \ud568\uc218\uc785\ub2c8\ub2e4.<br>\uac80\uc740 \uc678\uacfd \uc0ac\uac01\ud615 \ub0b4\ubd80\uc5d0 \uadf8\ub824\uc9c4 \uc22b\uc790\ub97c \uad6c\ubcc4\ud569\ub2c8\ub2e4.|\r\n|NumberRecognizerStart()|\uc22b\uc790\uad6c\ubcc4 \ubaa8\ub4c8\uc744 \uc2dc\uc791\ud558\ub294 \ud568\uc218\uc785\ub2c8\ub2e4.<br>RoboCam\uc5d0 \uc778\uc2dd\ub41c \uc22b\uc790 \uc678\uacfd\uc5d0 \uc0ac\uac01\ud615\uc73c\ub85c \ud45c\uc2dc\ub429\ub2c8\ub2e4.|\r\n|NumberRecognizerStop()|\uc22b\uc790\uad6c\ubcc4 \ubaa8\ub4c8\uc744 \uc815\uc9c0\ud558\ub294 \ud568\uc218\uc785\ub2c8\ub2e4.|\r\n|GetRecognizedNumbers()->str|RoboCam\uc5d0 \uc778\uc2dd\ub41c \uc22b\uc790\ub97c \ubb38\uc790\uc5f4\uc758 \ud615\ud0dc\ub85c \ubc18\ud658\ud558\ub294 \ud568\uc218\uc785\ub2c8\ub2e4.|\r\n|GetRecognizedNumberPoint()->list|RoboCam\uc5d0 \uc778\uc2dd\ub41c \uc22b\uc790\uc758 \uc88c\ud45c\ub97c list\ud615\ud0dc\ub85c \ubc18\ud658\ud558\ub294 \ud568\uc218\uc785\ub2c8\ub2e4.|\r\n|GetRecognizedNumberSize()->int|RoboCam\uc5d0 \uc778\uc2dd\ub41c \uc22b\uc790\uc758 \ud06c\uae30\ub97c \ubc18\ud658\ud558\ub294 \ud568\uc218\uc785\ub2c8\ub2e4.|\r\n|DrawNumberArea(flag:bool)|\uc778\uc2dd\ub41c \uc22b\uc790\uc758 \uc601\uc5ed\uc744 \ud45c\uc2dc\ud560\uc9c0 \uc815\ud558\ub294 \ud568\uc218\uc785\ub2c8\ub2e4.|\r\n|DrawNumber(flag:bool)|\uc778\uc2dd\ub41c \uc22b\uc790\ub97c \ud45c\uc2dc\ud560\uc9c0 \uc815\ud558\ub294 \ud568\uc218\uc785\ub2c8\ub2e4.|\r\n|DrawNumberPoint(flag:bool)|\uc778\uc2dd\ub41c \uc22b\uc790\uc758 \uc88c\ud45c\ub97c \ud45c\uc2dc\ud560\uc9c0 \uc815\ud558\ub294 \ud568\uc218\uc785\ub2c8\ub2e4.|\r\n|DrawNumberSize(flag:bool)|\uc778\uc2dd\ub41c \uc22b\uc790\uc758 \ud06c\uae30\ub97c \ud45c\uc2dc\ud560\uc9c0 \uc815\ud558\ub294 \ud568\uc218\uc785\ub2c8\ub2e4.|\r\n",
    "bugtrack_url": null,
    "license": "MIT",
    "summary": "Python library for RoboCam",
    "version": "1.0.0.34",
    "project_urls": {
        "Download": "https://github.com/RoboroboLab/RoboCam/archive/master.tar.gz",
        "Homepage": "https://eng.roborobo.co.kr/main"
    },
    "split_keywords": [
        "robocam",
        "roborobo"
    ],
    "urls": [
        {
            "comment_text": "",
            "digests": {
                "blake2b_256": "9fac013e539531529ca9a418b7b7bb59b7f65a507cdf03e3f658d9eb9ab9ddfa",
                "md5": "6c77cadefc9178beb30b927e63376bd2",
                "sha256": "ff69329b5b7631af78b1bf862eefe6db8d2bbc2e863ad2efca847bbe2138e80c"
            },
            "downloads": -1,
            "filename": "RoboCam-1.0.0.34-py3-none-any.whl",
            "has_sig": false,
            "md5_digest": "6c77cadefc9178beb30b927e63376bd2",
            "packagetype": "bdist_wheel",
            "python_version": "py3",
            "requires_python": ">=3",
            "size": 12859696,
            "upload_time": "2023-11-02T06:27:34",
            "upload_time_iso_8601": "2023-11-02T06:27:34.388602Z",
            "url": "https://files.pythonhosted.org/packages/9f/ac/013e539531529ca9a418b7b7bb59b7f65a507cdf03e3f658d9eb9ab9ddfa/RoboCam-1.0.0.34-py3-none-any.whl",
            "yanked": false,
            "yanked_reason": null
        }
    ],
    "upload_time": "2023-11-02 06:27:34",
    "github": true,
    "gitlab": false,
    "bitbucket": false,
    "codeberg": false,
    "github_user": "RoboroboLab",
    "github_project": "RoboCam",
    "github_not_found": true,
    "lcname": "robocam"
}
        
Elapsed time: 0.14506s