저는 셀프 서비스 냉장고를 모니터링하기 위해 라즈베리 파이를 사용하고 있습니다. 문이 열리면 문이 다시 닫힐 때까지 이미지를 캡처하는 쉘 스크립트가 실행됩니다. 그러나 문제는 ARM 프로세서의 속도이다. fswebcam을 사용하여 전체 해상도로 캡처하는 데는 2~4초가 소요되는데 이는 너무 깁니다.
이 문제를 해결하기 위한 우리의 아이디어는 프로세스를 분할하는 것입니다.
- 원시 이미지를 캡처하고 메모리 카드에 저장
- 문이 닫힌 후 원시 데이터를 처리합니다. 이에 대한 시간 요구 사항은 없습니다.
이제 내 질문은 다음과 같습니다.
- 이것이 가능합니까/현명합니까?
- 어떤 프로그램을 사용해야 하나요?
답변1
이것이 지금까지 우리가 가지고 있는 것입니다:
#!/bin/bash
tempdir=/tmp/fswebcam
host="167.174.70.42"
destdir=~/fsweb
tformat=%Y-%m-%d_%H-%M-%S
if [ ! -d "$tempdir" ]; then
mkdir $tempdir
fi
cd $tempdir
dooropentime=$(date +$tformat)
for i in {1..3}
do
starttime=$(date +%s%N)
echo -e "\n==== starting capture at" $(date +%H:%M:%S.%N) "==== (# $i)"
fswebcam --device /dev/video0 --input 0 --resolution 1280x720 --timestamp "$tformat" $tformat.jpg
# fswebcam --device RAW:/dev/video0 --palette NV12MB --resolution 1280x720 $tformat.jpg
endtime=$(date +%s%N)
echo -e "==== capture finished at" $(date +%H:%M:%S.%N) "==== (in "$((($endtime - $starttime) / 1000000))"ms)\n"
done
echo "packing..."
tar -cjf $dooropentime.tar.bz2 *.jpg
echo "copying..."
scp *.tar.bz2 pi@$host:$destdir
#cp *.tar.bz2 $destdir
rm -r $tempdir/*
echo "done!"
여전히 원시적이지만 적어도 작동합니다. pi에서 프레임을 캡처하는 데 약 3300밀리초가 걸립니다.
--device RAW:/dev/video0
팔레트 비호환 오류가 발생하고 NV12MB 팔레트(http://www.firestorm.cx/fswebcam/"fswebcam-20060604: NV12MB 팔레트 유형 추가(원시 소스에만 해당)")가 누락된 것 같습니다.
어떤 아이디어가 있나요?