motion에 uvc 대응을 넣어 보았다

2672 단어 UVCFreeBSDmotion
웹캠에서의 움직임 인식에는 다음과 같은 오픈 소스가 있습니다.

  • motion - C로 작성된 경량 코드. V4L 등의 디바이스를 사용할 수 있습니다.

  • ZoneMinder - 슈퍼 거대한 구현. onvif라는 perl 라이브러리를 사용하고 있습니다.

  • OpenCV - 이미지 처리를 위한 라이브러리로 움직임 인식도 가능합니다.

  • motion을 조금 살펴보기로 결정했습니다.
    FreeBSD의 ports를 빌드하려고 하면 에러가 되었으므로 github에 있던 출처 을 fork하고 clone하여 빌드를 시도했습니다.
    github의 소스에는 configure가 없으므로 autoheader/autoconf로 만듭니다. configure.ac의 pkg-config 설명이 오류가 발생하기 때문에 이것은 주석 처리되었습니다.
    libmicrohttpd와 jpeg의 pkg가 있으면 아래와 같이 configure하고 gmake로 빌드 할 수 있습니다.
    % ./configure --without-ffmpeg --without-sqlite3
    motion은 무려 bktr도 서포트하고 있어 BSD인 개발자도 있었던 것 같습니다. bktr은 자신이 만난 첫 FreeBSD 코드였습니다. BT878 보드는 여전히 가지고 있으며 Hammer 기계에 들어 있습니다.
    FreeBSD에서는 V4L 호환의 webcamd를 사용해 이용할 수 있는 것 같습니다만, webcamd가 의존이 심하게 갈 수 없었기 때문에, 뭔가 다른 좋은 방법이 없는가 생각해 보았습니다.
    여러가지 찾고 있었다면 우연히 SAITOU Toshihide씨가 쓰여진 UVC의 코드를 ML로 찾아, 이것을 갓짱코하기로 했습니다.
    당초, 캡쳐 처음으로 1프레임으로 멈추고의 실장으로 하고 있었습니다만, 그다지 효율이 좋지 않기 때문에, pthread로 연속해 캡쳐 해, 프레임이 필요한 때만 메모리에 떨어뜨리게 했습니다.
    UVC에서 전송되는 데이터는 YUV라는 1 픽셀 16 비트 데이터로 motion에 변환 코드가 이미 있었으므로 그것을 사용하여 변환하고 있습니다.
    우선 움직이게 되었기 때문에 PullReq 하면 안의 사람에게 libuvc가 좋은 것 같은 것이라고 말해지고 있습니다. :(

    usb가 루트로만 액세스할 수 있으면 sudo로 시작합니다.
    % sudo ./motion -c motion-dist.conf
    사용법은 motion-dist.conf의 webcontrol_localhost와 stream_localhost를 off로 하면 네트워크를 통해 확인할 수 있게 됩니다. 브라우저에서 8080에 액세스하면 다음과 같은 표시가 됩니다.

    움직이는 것이 들어가면 커멘드 라인에 이하의 로그가 나옵니다.
    [1:Unknown] [NTC] [ALL] motion_detected: Motion detected - starting event 1
    [1:Unknown] [NTC] [ALL] mlp_actions: End of event 1
    
    conf의 event_gap에서 인식에서 End까지의 간격을 지정할 수 있습니다. 또한 picture_output을 on으로 설정하면 인식중인 이미지를 jpeg로 저장할 수 있습니다. on_event_start에 sh 스크립트를 지정하면 인식 시작시 실행됩니다.
    FreeBSD/mips로 움직이고 싶습니다만 usb가 조금 매운 것 같습니다. . .
    덧붙여서 1프레임이 640x480x2로 614400바이트로 1프레임/Sec에서도 1ms의 패킷에 614바이트가 됩니다. 상당히 큽니다.
    FreeBSD/amd64의 motion의 pkg는 이상한 구성으로 의존이 많이 발생하고 있습니다. 괜찮다고 생각하고 있어요, 하지만 안 됩니다.
    리눅스에서도 libusb가 들어 있으면 사용할 수 있다고 생각하기 때문에 uvc_device_list의 webcam을 가지고 있고 configure를 --without-v4l로 빌드하면 시도할 수 있다고 생각합니다. 라고 생각했습니다만, Ubuntu로 떨어지는 것 같습니다. 누군가 디버깅하십시오.
    안의 사람에게 복수 카메라 대응해 주세요라고 말해졌으므로, bktr의 코드등을 참고에 만져 보았습니다. camera 지시어로 conf를 나누면 복수의 카메라를 사용할 수 있는 것 같기 때문에, 누군가 시험해 주지 않겠습니까?

    좋은 웹페이지 즐겨찾기