V4L(웹캠) 장치에서 원시 이미지 캡처

V4L(웹캠) 장치에서 원시 이미지 캡처

저는 셀프 서비스 냉장고를 모니터링하기 위해 라즈베리 파이를 사용하고 있습니다. 문이 열리면 문이 다시 닫힐 때까지 이미지를 캡처하는 쉘 스크립트가 실행됩니다. 그러나 문제는 ARM 프로세서의 속도이다. fswebcam을 사용하여 전체 해상도로 캡처하는 데는 2~4초가 소요되는데 이는 너무 깁니다.

이 문제를 해결하기 위한 우리의 아이디어는 프로세스를 분할하는 것입니다.

  1. 원시 이미지를 캡처하고 메모리 카드에 저장
  2. 문이 닫힌 후 원시 데이터를 처리합니다. 이에 대한 시간 요구 사항은 없습니다.

이제 내 질문은 다음과 같습니다.

  1. 이것이 가능합니까/현명합니까?
  2. 어떤 프로그램을 사용해야 하나요?

답변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 팔레트 유형 추가(원시 소스에만 해당)")가 누락된 것 같습니다.

어떤 아이디어가 있나요?

관련 정보