Python library for RoboCam
Project description
RoboCam
1. RoboCam Python Library 소개
RoboCam Python Library는 Python에서 RoboCam을 사용하여 영상 스트리밍 및 영상처리 기능을 쉽게 사용할 수 있도록 도와주는 라이브러리입니다.
2. 설치 및 삭제
해당 라이브러리의 경우 타 라이브러리와의 상호작용이 많아 버전에 민감하므로 가상환경을 사용하는 것을 권장합니다. (2.1 가상환경 생성 및 실행 참조)
2.1. 가상환경 생성 및 실행
2.1.1 Powershell 보안 해제
Powershell을 관리자 권한으로 열고 아래의 명령어를 입력합니다.
Set-ExecutionPolicy Unrestricted
2.1.2 Python 프로젝트를 실행할 폴더 접근
Powershell, VSCode Terminal 등을 이용하여 아래의 예시와 같이 프로젝트 폴더에 접근합니다.
cd C:\Workspace\python-sample
2.1.3 Python 프로젝트를 실행할 폴더 접근
Powershell, VSCode Terminal 등을 이용하여 아래의 예시와 같이 프로젝트 폴더에 접근합니다.
cd C:\Workspace\python-sample
2.1.4 가상 환경 생성
아래의 명령어를 입력하여 python 가상 환경을 생성합니다.
python -m venv .venv
(python2.7 버전과 python3.xx 버전이 동시에 설치되어 정상 작동이 되지 않는 경우 아래의 코드를 사용합니다.)
python3 -m -venv .venv
2.1.5 Python 가상 환경 활성화
아래의 명령어를 입력하여 가상환경을 활성화합니다. 정상적으로 활성화된 경우 터미널 좌측에 (.venv)의 문자열이 추가됩니다. 앞으로의 실행에 있어 새 창의 터미널을 실행하는 경우 항상 해당 명령어를 사용하여 가상 환경을 활성화하여 사용합니다.
.venv\Scripts\activate
2.1.6 가상 환경에 RoboCam 설치
아래의 명령어를 입력하여 가상 환경에 RoboCam 패키지를 설치합니다.
pip install robocam
(python2.7 버전과 python3.xx 버전이 동시에 설치되어 정상 작동이 되지 않는 경우 아래의 코드를 사용합니다.)
pip3 install robocam
2.1.7 설치된 라이브러리 버전 확인
아래의 명령어를 실행하고, '5.1 권장 패키지 버전'을 참조하여 라이브러리 버전 정보가 일치하는 지 확인합니다. (opencv-python-contrib, numpy, tensorflow, tflite 중심으로 확인)
pip list
2.1.8 가상 환경에서 Python 코드 실행(Powershell 명령어 입력)
python 코드를 실행하기 전에 powershell(또는 VSCode 터미널) 앞에 (.venv)표기가 있는지 확인하고 기존과 동일하게 python 명령어를 사용하여 코드를 실행합니다.
python python-test.py
2.1.8.1 가상 환경에서 Python 코드 실행(VSCode F5 눌러서 실행)
- Ctrl+Shift+P 를 입력합니다.
- Python: Select Interpreter를 입력하여 클릭합니다.
- 프로젝트 폴더 안에 있는 python.exe를 선택합니다. (ex. C:\Workspace\python-sample.venv\Script\pytho.exe)
- F5를 눌러 실행합니다.
2.2. 설치 (전체 환경)
아래의 명령을 실행하시면 RoboCam이 설치됩니다.
pip3 install RoboCam
최신 버전이 설치되지 않는다면 아래의 명령을 사용하시기를 바랍니다.
pip3 --no-cache-dir install RoboCam
2.2.1. 필요 라이브러리
라이브러리 설치시에는 꼭! 관리자 권한으로 설치해야 합니다.(가상환경 )
인식 정보를 전달 하기 위한 numpy라이브러리가 필요합니다. 아래의 명령을 실행하시면 numpy가 설치됩니다.
pip3 install numpy
영상 처리를 위해 opencv2 라이브러리가 필요합니다. 아래의 명령을 실행하시면 opencv2가 설치됩니다. 해당 명령을 통해 opencv2의 설치 및 최신화를 할 수 있습니다.
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의 설치 및 최신화를 할 수 있습니다.
pip3 install tflite
pip3 install --upgrade tflite
2.2.2. 업그레이드
최신 버전으로 업그레이드 하시려면 아래의 명령을 실행하시면 됩니다.
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
-
위의 텍스트를 복사하여 .txt 파일로 저장합니다.
-
pip를 이용하여 관련 라이브러리를 모두 삭제합니다.
정상적인 삭제가 안되는 경우 Powershell을 관리자 권한으로 열어 해당 명령어를 입력합니다.pip uninstall -r "파일 경로" -y
(ex. pip uninstall -r "C:\Users\david\Documents\KakaoTalk Downloads\robocam_lib_version.txt" -y) -
RoboCam Library를 재설치합니다.
정상적인 설치가 안되는 경우 Powershell을 관리자 권한으로 열어 해당 명령어를 입력합니다.pip install robocam
-
정상적으로 설치되었는지 확인합니다. 하단의 '5.1 권장 패키지 버전' 에 있는 패키지 버전과 대조하여 확인합니다.
pip list
2.2.4 삭제
아래의 명령을 실행하시면 RoboCam이 삭제됩니다.
pip3 uninstall RoboCam
3 실습 예제
3.1 얼굴 인식
3.1.1 예시 코드
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 예시 코드
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 예시 코드
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”***로 설정합니다.
( https://chev.me/arucogen/ )
3.4.2 예시 코드
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 예시 코드
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 코드
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마커 감지, 그림 감지, 숫자 감지를 지원합니다.
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 (event:CameraEvents, func) |
event가 인식되었을 때 호출될 func을 등록합니다. ▶ event 영상처리 모듈이 발생시키는 이벤트 종류입니다. CameraEvents를 참조하십시오. ▶ func 영상처리 모듈이 이벤트를 발생시켰을 때, 호출될 함수포인터입니다. 매개변수를 확인하여 사용해야합니다. |
RemoveEventHandler (event:CameraEvents) |
등록된 event를 더 이상 발생시키지 않기 위해, 제거하는 함수입니다. ▶ event 영상처리 모듈이 발생시키는 이벤트 종류입니다. CameraEvents를 참조하십시오. |
5.3.2.2 Stream 함수
이름 | 설명 |
---|---|
CameraStreamInit (width:int = 512, height:int = 512) |
RoboCam의 스트리밍을 준비하는 함수입니다. width x height의 해상도로 스트리밍 됩니다. 함수 호출 전, RoboCam과 와이파이 연결이 되어있어야합니다. RoboCam의 기본 주소는 http://192.168.4.1:81/stream 입니다. ▶ width RoboCam의 가로 해상도입니다. (기본값 : 512) ▶ height RoboCam의 세로 해상도입니다. (기본값 : 512) |
CameraStream() | RoboCam의 영상스트리밍을 시작하는 함수입니다. |
CameraStreamInit | 함수가 호출된 후 사용해야합니다. |
CameraStreamOff() | RoboCam의 영상스트리밍을 종료하는 함수입니다. |
WebcamStreamInit (width:int = 640, height:int = 480) |
Webcam의 스트리밍을 준비하는 함수입니다. width x height의 해상도로 스트리밍 됩니다. 함수 호출 전, Webcam과 USB 연결이 되어있어야합니다. ▶ width WebCam의 가로 해상도입니다. (기본값 : 640) ▶ height webCam의 세로 해상도입니다. (기본값 : 480) |
WebcamStream() | Webcam의 영상스트리밍을 시작하는 함수입니다. WebcamStreamInit 함수가 호출된 후 사용해야합니다. |
WebcamStreamOff() | Webcam의 영상스트리밍을 종료하는 함수입니다. |
LeftRightFlipMode (flag:bool) |
RoboCam의 영상스트리밍을 flag에 따라 좌우 반전 시키는 함수입니다. ▶ flag True : 좌우반전 ON, False : 좌우반전 OFF |
UpDownFlipMode (flag:bool) |
RoboCam의 영상스트리밍을 flag에 따라 상하 반전 시키는 함수입니다. ▶ flag True : 상하반전 ON, False : 상하반전 OFF |
MosaicMode (rate:int) |
RoboCam의 영상스트리밍에 모자이크를 rate 비율로 설정하는 함수입니다. ▶ rate 영상 모자이크의 비율입니다. 단위 : 퍼센트(%), 기본값 : 0 |
RotateMode (angle:int) |
RoboCam의 영상스트리밍을 angle만큼 회전시키는 함수입니다. ▶ angle 영상 회전각도 입니다. 단위 : 각도(˚), 기본값 : 90 |
5.3.2.3 Facedetector 함수
이름 | 설명 |
---|---|
FacedetectorInit() | RoboCam의 얼굴인식 모듈을 준비하는 함수입니다. 얼굴감지, 구별, 랜드마크 인식을 초기화 합니다. |
FacedetectorStart() | 얼굴감지 모듈을 실행하는 함수입니다. RoboCam 화면 안에 들어온 얼굴을 인식하여 외곽선에 사각형을 표시합니다. 눈,코,입 등 얼굴의 랜드마크의 좌표들에 작은원으로 표시합니다. 학습된 데이터가 있다면, 학습된 데이터와 비교하여 인식된 이름을 표시합니다. |
FacedetectorStop() | 얼굴감지 모듈을 중지하는 함수입니다. |
GetFaceCount() -> int | 화면에 인식된 얼굴의 갯수를 반환하는 함수입니다. |
GetFaceRects() -> list | 화면에 인식된 얼굴을 표시하는 외곽 사각형의 좌표들을 반환하는 함수입니다. |
DrawFaceArea(flag:bool) | 화면에 인식된 얼굴의 영역을 표시할지 정하는 함수입니다. |
DrawFacePoint(flag:bool) | 화면에 인식된 얼굴의 좌표를 표시할지 정하는 함수입니다. |
DrawFaceSize(flag:bool) | 화면에 인식된 얼굴의 크기를 표시할지 정하는 함수입니다. |
5.3.2.4 FaceRecognizer 함수
이름 | 설명 |
---|---|
FaceCapture (name:str, captureCount:int=5, path:str) |
감지된 얼굴을 name 이름으로 captureCount 횟수 만큼 캡쳐하여 path 위치에 저장하는 함수입니다. 저장된 얼굴은 얼굴구별 모듈의 학습데이터로 사용됩니다. RoboCam 화면에 얼굴이 인식되지 않았다면 저장되지 않습니다. ▶ name 얼굴이 저장될 이름입니다. 같은 이름으로 여러번 저장하면, 자동 넘버링되어 저장됩니다. ▶ captureCount 얼굴을 저장할 횟수입니다. 0.1초 간격으로 지정된 횟수만큼 저장합니다. ▶ path 얼굴이 저장될 경로입니다. 기본경로는 패키지 설치경로의 '/res/face/'입니다. 저장 경로를 바꾸어서 저장할 경우, 모듈 학습 시 변경된 경로로 설정해야합니다. |
TrainFaceData (facePath:str) |
facepath에 저장된 얼굴 데이터를 얼굴구별 모듈에 학습시키는 함수입니다. 학습된 데이터를 기반으로 RoboCam에 확인된 얼굴의 이름이 표시됩니다. ▶ facePath 얼굴이 저장될 경로입니다. 기본경로는 패키지 설치경로의 '/res/face/'입니다. 저장 경로를 바꾸어서 저장할 경우, 모듈 학습 시 변경된 경로로 설정해야합니다. |
DeleteFaceData (name:str, facePath:str) |
facepath에 저장된 name 이름을 가진 얼굴 데이터를 삭제하는 함수입니다. 해당 폴더에 접근하여 데이터를 삭제합니다. 데이터 삭제 이후, TrainFaceData 함수를 호출해야 얼굴구별 모듈에 적용됩니다. |
GetFaceNames() -> list | RoboCam에 확인된 얼굴들의 이름을 list 형태로 반환하는 함수입니다. 현재 인식된 얼굴이 없다면 빈 리스트를 반환합니다. |
GetFaceExist(name:str) -> bool | RoboCam에 인식된 얼굴 중, name의 이름을 가진 얼굴이 있는지 반환하는 함수입니다. ▶ name 검출할 얼굴의 이름입니다. |
GetFaceSize(name:str) -> int | RoboCam에 인식된 얼굴 중, name의 이름을 가진 얼굴의 크기를 반환하는 함수입니다. ▶ name 사이즈를 구할 얼굴의 이름입니다. 입력하지 않는다면, 학습되지 않은 얼굴의 사이즈를 반환합니다. |
GetFaceCenterPoint(name:str) -> list | RoboCam에 확인된 얼굴들 중 name의 이름을 가진 얼굴의 중심좌표를 반환하는 함수입니다. ▶ name 좌표를 구할 얼굴의 이름입니다. 입력하지 않는다면, 학습되지 않은 얼굴의 사이즈를 반환합니다. |
DrawFaceName(flag:bool) | 화면에 인식된 얼굴의 이름을 표시할지 정하는 함수입니다. |
5.3.2.5 FaceLandmark 함수
이름 | 설명 |
---|---|
GetLeftIrisPoint(name:str)->list | RoboCam에 확인된 얼굴의 왼쪽 눈동자의 좌표를 반환하는 함수입니다. ▶ name 검출할 얼굴의 이름입니다. |
GetLeftEyebrowPoint(name:str)->list | RoboCam에 확인된 얼굴의 왼쪽 눈썹의 좌표를 반환하는 함수입니다. ▶ name 검출할 얼굴의 이름입니다. |
GetRightIrisPoint(name:str)->list | RoboCam에 확인된 얼굴의 오른쪽 눈동자의 좌표를 반환하는 함수입니다. ▶ name 검출할 얼굴의 이름입니다. |
GetRightEyebrowPoint(name:str)->list | RoboCam에 확인된 얼굴의 오른쪽 눈썹의 좌표를 반환하는 함수입니다. ▶ name 검출할 얼굴의 이름입니다. |
GetNosePoint(name:str)->list | RoboCam에 확인된 얼굴의 코의 좌표를 반환하는 함수입니다. ▶ name 검출할 얼굴의 이름입니다. |
GetMouthPoint(name:str)->list | RoboCam에 확인된 얼굴의 입의 좌표를 반환하는 함수입니다. ▶ name 검출할 얼굴의 이름입니다. |
GetJawPoint(name:str)->list | RoboCam에 확인된 얼굴의 턱의 좌표를 반환하는 함수입니다. ▶ name 검출할 얼굴의 이름입니다. |
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] 형태로 반환하는 함수입니다. ▶ id 검출할 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 함수의 사용법
# 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의 그림구별 모듈을 준비하는 함수입니다. 검은 외곽 사각형 내부에 그려진 그림을 학습하고 구별합니다. |
SketchDetectorStart() | 그림구별 모듈을 시작하는 함수입니다. RoboCam에 인식된 그림 외곽에 사각형으로 표시됩니다. |
SketchDetectorStop() | 그림구별 모듈을 정지하는 함수입니다. |
SketchCapture (name:str,captureCount:int=5,path:str) |
RoboCam에 인식된 그림을 name 이름으로 캡쳐하여 path에 저장하는 함수입니다. 저장된 얼굴은 얼굴구별 모듈의 학습데이터로 사용됩니다. RoboCam 화면에 얼굴이 인식되지 않았다면 저장되지 않습니다. ▶ name 그림이 저장될 이름입니다. 같은 이름으로 여러번 저장하면, 자동 넘버링되어 저장됩니다. ▶ captureCount 그림이 저장될 횟수입니다. 입력하지 않는다면 다섯장의 그림을 저장합니다. ▶ path 그림이 저장될 경로입니다. 기본경로는 패키지 설치경로의 '/res/sketch/'입니다. 저장 경로를 바꾸어서 저장할 경우, 모듈 학습 시 변경된 경로로 설정해야합니다. |
TrainSketchData (sketchPath:str) |
sketchPath에 저장된 얼굴 데이터를 얼굴구별 모듈에 학습시키는 함수입니다. 학습된 데이터를 기반으로 RoboCam에 확인된 얼굴의 이름이 표시됩니다. ▶ sketchPath 얼굴이 저장될 경로입니다. 기본경로는 패키지 설치경로의 '/res/sketch/'입니다. 저장 경로를 바꾸어서 저장할 경우, 모듈 학습 시 변경된 경로로 설정해야합니다. |
DeleteSketchData (name:str, sketchPath:str) |
sketchPath에 저장된 name 이름을 가진 그림 데이터를 삭제하는 함수입니다. 해당 폴더에 접근하여 데이터를 삭제합니다. 데이터 삭제 이후, 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의 숫자구별 모듈을 준비하는 함수입니다. 검은 외곽 사각형 내부에 그려진 숫자를 구별합니다. |
NumberRecognizerStart() | 숫자구별 모듈을 시작하는 함수입니다. RoboCam에 인식된 숫자 외곽에 사각형으로 표시됩니다. |
NumberRecognizerStop() | 숫자구별 모듈을 정지하는 함수입니다. |
GetRecognizedNumbers()->str | RoboCam에 인식된 숫자를 문자열의 형태로 반환하는 함수입니다. |
GetRecognizedNumberPoint()->list | RoboCam에 인식된 숫자의 좌표를 list형태로 반환하는 함수입니다. |
GetRecognizedNumberSize()->int | RoboCam에 인식된 숫자의 크기를 반환하는 함수입니다. |
DrawNumberArea(flag:bool) | 인식된 숫자의 영역을 표시할지 정하는 함수입니다. |
DrawNumber(flag:bool) | 인식된 숫자를 표시할지 정하는 함수입니다. |
DrawNumberPoint(flag:bool) | 인식된 숫자의 좌표를 표시할지 정하는 함수입니다. |
DrawNumberSize(flag:bool) | 인식된 숫자의 크기를 표시할지 정하는 함수입니다. |
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distributions
Built Distribution
File details
Details for the file RoboCam-1.0.0.34-py3-none-any.whl
.
File metadata
- Download URL: RoboCam-1.0.0.34-py3-none-any.whl
- Upload date:
- Size: 12.9 MB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/4.0.2 CPython/3.11.3
File hashes
Algorithm | Hash digest | |
---|---|---|
SHA256 | ff69329b5b7631af78b1bf862eefe6db8d2bbc2e863ad2efca847bbe2138e80c |
|
MD5 | 6c77cadefc9178beb30b927e63376bd2 |
|
BLAKE2b-256 | 9fac013e539531529ca9a418b7b7bb59b7f65a507cdf03e3f658d9eb9ab9ddfa |