feat: 초기 프로젝트 구조 추가
This commit is contained in:
67
camera/basler.py
Normal file
67
camera/basler.py
Normal file
@@ -0,0 +1,67 @@
|
||||
# Basler pylon SDK를 별도로 설치해야 합니다.
|
||||
# 설치 방법: https://www.baslerweb.com/en/downloads/software-downloads/
|
||||
# SDK 설치 후: pip install pypylon
|
||||
import numpy as np
|
||||
from pypylon import pylon
|
||||
|
||||
|
||||
class BaslerCamera:
|
||||
def __init__(self):
|
||||
self.camera = None
|
||||
|
||||
def connect(self):
|
||||
"""첫 번째 Basler 장치에 연결, ExposureAuto=Continuous"""
|
||||
try:
|
||||
self.camera = pylon.InstantCamera(
|
||||
pylon.TlFactory.GetInstance().CreateFirstDevice()
|
||||
)
|
||||
self.camera.Open()
|
||||
self.camera.ExposureAuto.SetValue("Continuous")
|
||||
print("[Basler] 연결 성공")
|
||||
except Exception as e:
|
||||
print(f"[Basler] 연결 실패: {e}")
|
||||
self.camera = None
|
||||
|
||||
def disconnect(self):
|
||||
if self.camera and self.camera.IsOpen():
|
||||
try:
|
||||
self.camera.Close()
|
||||
except Exception:
|
||||
pass
|
||||
print("[Basler] 연결 종료")
|
||||
|
||||
def is_connected(self) -> bool:
|
||||
return self.camera is not None and self.camera.IsOpen()
|
||||
|
||||
def capture(self) -> np.ndarray:
|
||||
"""단일 프레임 촬영 — GrabOne() 사용 (모든 카메라 모델 호환)"""
|
||||
if not self.camera:
|
||||
return None
|
||||
try:
|
||||
with self.camera.GrabOne(5000) as result:
|
||||
if result.GrabSucceeded():
|
||||
return result.Array.copy()
|
||||
except Exception as e:
|
||||
print(f"[Basler] capture 오류: {e}")
|
||||
return None
|
||||
|
||||
def start_continuous(self):
|
||||
"""GrabStrategy_LatestImageOnly로 연속 grab 시작"""
|
||||
if self.camera:
|
||||
self.camera.StartGrabbing(pylon.GrabStrategy_LatestImageOnly)
|
||||
|
||||
def grab_latest(self) -> np.ndarray:
|
||||
"""최신 프레임 반환"""
|
||||
if not self.camera or not self.camera.IsGrabbing():
|
||||
return None
|
||||
try:
|
||||
with self.camera.RetrieveResult(1000) as result:
|
||||
if result.GrabSucceeded():
|
||||
return result.Array.copy()
|
||||
except Exception as e:
|
||||
print(f"[Basler] grab_latest 오류: {e}")
|
||||
return None
|
||||
|
||||
def stop_continuous(self):
|
||||
if self.camera:
|
||||
self.camera.StopGrabbing()
|
||||
Reference in New Issue
Block a user