raspberry pi 3 B 카메라 입력 받아 출력하기
raspberry pi 에 카메라 입력받는 방법은 여러개 있다.
1. CSI 단자를 이용하기
2. USB 포트를 이용하기
2-1) webcam
2-2) easycap 등 영상 캡쳐보드
마침 나에게 easycap 이 몇개 있다.
1c88:0007 Somagic, Inc. SMI Grabber (EasyCAP DC60+ clone) [SMI-2021CBE]
ls /dev/video* 하니
video10~ video 23번까지나온다
뭔 비디오가 이렇게 많은거지?
카메라는
마침 적당한게 있어서 이 제품으로 진행
제품 정보 링크
https://chepestdiscount.ru/product/321905426843 : 38달러
https://dsccctv.com/index.php?main_page=product_info&products_id=198
https://www.amazon.com/Fisheye-Camera-Panorama-700TVL-Vandalproof/dp/B00N48ZDG6
음. 위에 첫번째 은색 케이스는 리눅스에서 video 값을 가져오지 못한다. easycap video DVR은 드라이버가 한번에 잡힌다.
이미지 캡쳐 체크
sudo apt install fswebcam
fswebcam -r 1280x720 --no-banner /home/pi/webcam_test.jpg
-r 1280x720: 해상도를 1280x720으로 설정
--no-banner: 이미지 하단의 기본 정보를 숨깁니다.
지원 해상도 체크
- v4l2-ctl --list-formats-ext
실시간 영상 확인
sudo apt install cheese
cheese
cheese cogl-warning warning과 error가 뜨면서 화면이 안나타 났다.
문제 해결
1. swap 용량 늘리기
free -h 해서 swap 용량 체크해봤다
swap 용량을 늘려준다.
sudo nano /etc/dphys-swapfile
# CONF_SWAPSIZE=100 <-- 이 부분을 찾습니다.
RAM 1GB 이하: 1024 (1GB) 이상
RAM 2GB: 1024 (1GB) 또는 2048 (2GB)
RAM 4GB 이상: 2048 (2GB) 또는 4096 (4GB)
sudo /etc/init.d/dphys-swapfile stop
sudo /etc/init.d/dphys-swapfile start
또는
sudo systemctl stop dphys-swapfile
sudo systemctl disable dphys-swapfile
다시 체크
free -h
2. sudo usermod -a -G video $USER
video 권한 문제
motion을 이용한 웹 스트리밍
sudo apt install motion
sudo nano /etc/motion/motion.conf
stream_localhost off (외부에서 접속 가능하도록)
stream_port 8081 (스트리밍 포트, 원하는 포트로 변경 가능)
daemon on (백그라운드에서 실행)
webcam_port 8080 (웹캠 포트, 보통 스트리밍 포트와 다르게 설정)
sudo nano /etc/default/motion 파일에서 start_motion_daemon=yes로 변경하여 부팅 시 자동으로 실행되도록 설정할 수도 있습니다.
sudo service motion start
에러
motion[2136]: [0:motion] [EMG] [ALL] motion_startup: Exit motion, cannot create log file /var/log/motion/motion.log: Permission denied
sudo service motion stop
motion -c /etc/motion/motion.conf
sudo motion -b
sudo chmod 666 /var/log/motion/motion.log
sudo chown motion /var/log/motion
sudo touch /var/log/motion.log
sudo chown motion:motion /var/log/motion.log
sudo service motion status
sudo mkdir /tmp/motion
sudo chown motion:motion /tmp/motion
sudo touch /tmp/motion/motion.log
sudo chown motion:motion /tmp/motion/motion.log
/etc/motion/motion.conf
sudo chmod 666 /tmp/motion/motion.log
sudo chown motion /tmp/motion/motion.log
sudo service motion restart
sudo modprobe bcm2835-v4l2
cat /var/log/motion/motion.log
sudo systemctl restart motion
sudo lsof -i -P -n | grep motion
방화벽 포트 열어주기
sudo apt-get install ufw
sudo ufw allow 8081
sudo ufw allow 8081/tcp
v4l2-ctl --list-devices
journalctl -u motion.service
motion -n -c /etc/motion/motion.conf
sudo truncate -s 0 /tmp/motion/motion.log
http://192.168.0.7:8080/
접속 됐다 결국 문제는
motion.log 파일 의 permission 문제와,
motion.conf 값의 설정이다.
인터넷이 느려서인지 지금 화면이 안나온다.
-----------------------------------------------------
sudo apt install python3-opencv
import cv2
# USB 웹캠 연결 (일반적으로 첫 번째 웹캠은 0)
cap = cv2.VideoCapture(0)
# 웹캠이 제대로 열렸는지 확인
if not cap.isOpened():
print("Error: Could not open video device.")
exit()
# 해상도 설정 (선택 사항, 웹캠이 지원하는 해상도 확인 필요)
# cap.set(cv2.CAP_PROP_FRAME_WIDTH, 640)
# cap.set(cv2.CAP_PROP_FRAME_HEIGHT, 480)
while True:
ret, frame = cap.read() # 프레임 읽기
if not ret:
print("Error: Failed to grab frame.")
break
cv2.imshow('USB Camera Feed', frame) # 프레임 화면에 표시
# 'q' 키를 누르면 종료
if cv2.waitKey(1) & 0xFF == ord('q'):
break
# 자원 해제
cap.release()
cv2.destroyAllWindows()
python3 test.py
video0 사용 중인거 체크하고 끄기
sudo lsof /dev/video0
sudo kill -9 <PID>
module 언로드
sudo modprobe -r uvcvideo
sudo modprobe uvcvideo
lsmod | grep uvcvideo
modinfo uvcvideo
활성화 여부 체크
vcgencmd get_camera
usbtv007 칩셋은
lsmod | grep usbtv
커널에 빌트인된 드라이버 확인방법
dmesg | grep -i "video"
dmesg | grep -i "v4l" # Video4Linux 관련
zcat /proc/config.gz | grep "CONFIG_VIDEO_USBTV"
grep "CONFIG_VIDEO_USBTV" /boot/config-$(uname -r)
CONFIG_VIDEO_USBTV=y가 출력된다면, 드라이버는 커널에 빌트인된 상태
ls -l /sys/class/video4linux/video0/device/driver
usb 뺏다가 꽂으니까 (Device or resource busy) 에러 해결
해상도 --------------------------------------------------
라즈베리파이 3의 처리 능력 및 출력 해상도
라즈베리파이 3는 Full HD (1920x1080) 해상도까지 출력이 가능
Fushicai USBTV007 Video Grabber (EasyCAP)의 해상도
Fushicai USBTV007 칩셋을 사용하는 EasyCAP은 아날로그 비디오를 디지털로 변환하는 장치입니다. 주로 DVD 레코딩 표준을 따르므로 지원하는 해상도는 다음과 같습니다:
PAL (유럽 표준): 720 x 576 픽셀 @ 25fps
NTSC (북미 표준): 720 x 480 픽셀 @ 30fps
이 EasyCAP 장치는 아날로그 신호를 디지털로 변환하는 것이기 때문에, 입력되는 아날로그 소스 (예: VHS, DVD 플레이어의 컴포지트 또는 S-Video 출력)의 품질과 해상도에 따라 실제 출력되는 화면의 화질이 결정됩니다.
dsc-pc011080 camera
1920x1080P
해상도 (Resolution):
AHD/TVI/CVI (아날로그 HD): 2.4MP (2.4 메가픽셀) 1080P
Analog (기존 아날로그): 2000TVL (TV 라인)
이 카메라는 1/2.8인치 SONY IMX322 CMOS 센서를 사용하며, 피쉬아이(Fisheye) 렌즈를 통해 넓은 시야각을 제공하는 특징을 가지고 있습니다. 또한, DIP 스위치를 통해 AHD, TVI, CVI, CVBS(기존 아날로그) 신호 출력을 전환할 수 있는 하이브리드 카메라입니다.
이렇게 로봇의 눈은 어안렌즈로 넓은 시야각을 확보 할 수 있게 되었다.
이제 ROS 2에 적용해보도록하자.
'로봇만들기 > raspberry pi 3' 카테고리의 다른 글
raspberry pi 3 samba 설정방법 (0) | 2025.06.23 |
---|---|
Raspberry Pi DRM 출력 예제 (0) | 2025.06.10 |
raspberry pi 3 원격 [폴더설정/terminal] 접속 (0) | 2025.06.04 |
raspberry pi 3 B 우분투 올리기 (0) | 2025.06.04 |