Controlling IoT cameras with libptp

了解有關使用 libptp 控制 IoT 攝像機的更多詳細信息。

捕獲光和圖像數據時,通常將小型計算機或 MCU 連接到攝像機以處理數據,然后將部分數據發送到云。幾年來,我一直與一個在線開發者社區合作,使用運行 Raspian 的樹莓派或運行 L4T 的 NVIDIA Jetson 構建相機項目,該項目源自 Ubuntu 18.04。

您可能還喜歡:
相機中的計算

在解釋如何調整您的項目以控制使用 USB 電纜的攝像機之前,讓我們了解一下由社區朋友構建的 360 攝像機項目。Hugues Perret 采用 Wi-Fi 數據傳輸和 USB 攝像機控制的組合。機器人上有一個樹莓派。

FOX SEWER ROVER by Hugues Perret

福克斯·塞弗·羅弗·胡格斯·佩雷特

在下面的示例中,工業無人機制造商 VTRUS 在自動駕駛機器人上安裝了 RICOH THETA 360 度攝像機。

VTRUS has a RICOH THETA 360 degree camera mounted on an autonomous flying robot

VTRUS 的 RICOH THETA,一個安裝在自主飛行機器人上的 360 度攝像頭。

其他項目有一個固定攝像頭由USB供電從樹莓派,并使用PoE為Pi供電。 例如,哈佛大學的科恩·赫夫肯斯教授的虛擬森林項目作為國家科學基金會項目的一部分,已經在偏遠的哈佛森林中運作了多年。

VirtualForest project

虛擬森林項目

USB 連接的優勢

使用 USB 電纜而不是 Wi-Fi 或藍牙連接攝像機的優點包括:

  • USB 電纜可以在發送命令時無限期地為攝像機供電

  • USB-C 連接提供比 5Ghz 或 2.4Ghz Wi-Fi 更穩定的大圖像和視頻的快速傳輸

  • 您可以將相機置于睡眠狀態,并通過 USB 電纜將其喚醒

此體系結構的主要用途是:

  • 帶輪子的陸基無人機

  • 飛行無人機

  • 長期監控,包括多月延時

PTP 和 MTP 傳輸協議

要使用 USB 電纜控制攝像機,大多數人使用圖片傳輸協議 (PTP)或擴展媒體傳輸協議(MTP)

在基于 Linux 的主板上使用 libptp

在Linux上,這是樹莓派和NVIDIAJetson最常見的操作系統,最常用的庫是libptp。說實話,這個庫是舊的,需要從源編譯是有用的。它不是一個即插即用的解決方案,但它確實可以工作。

修改數據包長度

下載源并修改 ptp.h 行 77。 PTP_USB_INT_PACKET設置為 28。

Image title

Image title

ptplib 構建演練

我在樹莓派上用拉西比安·杰西將 libptp2-1.2.0 和libusb-1.0.21放在開發目錄中的 RPi 上。

[email protected]:~/Development$ ls -l
total 992
-rw-r--r-- 1 pi pi 404105 Oct  4 04:11 libptp2-1.2.0.tar.gz
-rw-r--r-- 1 pi pi 607417 Oct  4 04:14 libusb-1.0.21.tar.bz2
[email protected]:~/Development$

[email protected]:~/Development$ tar xvf libusb-1.0.21.tar.bz2
libusb-1.0.21/
libusb-1.0.21/aclocal.m4

[email protected]:~/Development$ cd libusb-1.0.21/
[email protected]:~/Development/libusb-1.0.21$ ls
aclocal.m4  config.guess  COPYING   install-sh        Makefile.am  PORTING
android     config.h.in   depcomp   libusb            Makefile.in  README
AUTHORS     config.sub    doc       libusb-1.0.pc.in  missing      tests
ChangeLog   configure     examples  ltmain.sh         msvc         TODO
compile     configure.ac  INSTALL   m4                NEWS         Xcode
[email protected]:~/Development/libusb-1.0.21$

為了構建ptplib,您必須首先安裝libusb。與拉斯皮比亞杰西安裝的默認 libusb 將不起作用。

安裝利布德夫-德和使 libusb

$ sudo apt-get install libudev-dev
Reading package lists... Done
Building dependency tree

運行配置,然后進行:

$ make
make  all-recursive
make[1]: Entering directory '/home/pi/Development/libusb-1.0.21'
Making all in libusb
make[2]: Entering directory '/home/pi/Development/libusb-1.0.21/libusb'
  CC       libusb_1_0_la-core.lo
  CC       libusb_1_0_la-descriptor.lo
....
make[2]: Leaving directory '/home/pi/Development/libusb-1.0.21/libusb'
Making all in doc
make[2]: Entering directory '/home/pi/Development/libusb-1.0.21/doc'
make[2]: Nothing to be done for 'all'.
make[2]: Leaving directory '/home/pi/Development/libusb-1.0.21/doc'
make[2]: Entering directory '/home/pi/Development/libusb-1.0.21'
make[2]: Leaving directory '/home/pi/Development/libusb-1.0.21'
make[1]: Leaving directory '/home/pi/Development/libusb-1.0.21'
[email protected]:~/Development/libusb-1.0.21$

進行安裝。

將 /usr/本地/lib 添加到鏈接器路徑:

$ export LDFLAGS='-L/usr/local/lib/'

安裝 libptp

此時,您現在可以提取 libptp2、配置、制作和 sudo 進行安裝。

使用 ptpcam

ptpcam 包含在 libptp 中。它是一個命令行程序,您可以在 bash 腳本內部使用。 盡管 bash 是我們相機開發社區中最流行的腳本語言,但我個人更喜歡使用 Python,因為我發現語法更易于閱讀。

為了開始使用,讓我們從 shell 中查看一些基本命令。我首先要出口我的LD_LIBRARY_PATH環境變量。 然后,我會跑去 ptpcam -i 獲取相機上的信息序列號:”00101082″
設備版本: 1.00.2
擴展 ID: 0x00000006
擴展說明:(空)
擴展版本: 0x006e

[email protected]:/家/皮/開發*ptpcam -c

啟動捕獲…
對象添加 0x400d0004

列出文件

[email protected]:/home/pi/Development# ptpcam -L

Listing files...
Camera: RICOH THETA V
Handler:           Size:        Captured:       name:
0x0000002d:      1970120        2017-09-28 12:58        R0010025.JPG
0x0000002e:      2402374        2017-09-28 12:58        R0010026.JPG
0x0000002f:      2136165        2017-09-28 12:58        R0010027.JPG
0x00000030:      2810985        2017-09-28 12:59        R0010028.JPG
0x00000031:     97458043        2017-09-28 21:08        R0010029.MP4
0x00000032:      1064880        2017-10-02 15:31        R0010030.JPG
0x00000033:    722622498        2017-10-02 15:53        R0010031.MP4
0x00000034:    131377941        2017-10-02 15:57        R0010032.MP4
0x00000035:      1040761        2017-10-02 16:02        R0010033.JPG
0x00000039:      1295975        2017-10-03 22:00        R0010034.JPG

[email protected]:/home/pi/Development#

檢查相機電池電量

# ptpcam --show-property=0x5001

Camera: RICOH THETA V
'Battery Level' is set to: 70
[email protected]:/home/pi/Development#

在這個階段,你想知道我從哪里得到”0x5001″。

您可以使用 ptpcam -o 獲取操作列表:

Image title

您可以看到帶有 ptpcam -p 的參數:

Image title

您還可以查看特定攝像機的 API 文檔,或參閱媒體傳輸協議規范。就我而言,相機供應商有一個包含十六進制代碼和命令的網頁。

文檔非常簡單,但它可以完成工作。您的攝像機可能使用相同的代碼,因為代碼是所有符合 MTP 規范的攝像機的標準。供應商網站上的大多數命令與存儲在 ptpcam 中的命令相同。

Image title

從靜止圖像更改為視頻

# ptpcam --set-property=0x5013 --val=0x8002

Camera: RICOH THETA V
'Still Capture Mode' is set to: [Normal]
Changing property value to 0x8002 [(null)] succeeded.
[email protected]:/home/pi/Development#

后續步驟

您應該能夠通過使用 ptpcam 幫助或咨詢 PTP 規范來獲取其余命令。對于大多數人來說,困難在于安裝 libptp,而不是實際使用 ptpcam 或訪問 PTP API。

使用阿杜伊諾

可以使用 Arduino 控制一些佳能 EOS 和 Powershot 攝像機以及尼康 DSLR 和 P&S 相機。如果您有這些攝像機之一,請查看奧列格·馬祖羅夫的PTP_2.0為 Arduino。不幸的是,這個庫不能與RICOH THETA配合使用,而且很難讓它與我的相機配合使用。

此外,我想在計算機上做更多的圖像和視頻處理比Arduino的能力,所以像NVIDIAJetson的東西是一個更好的平臺對我來說

其他提示

由于使用這種技術的人很可能是在制造機器人,所以我將分享一些我從社區學到的教訓。

在下圖中,360 攝像機用 360 LED 燈條包裹,以提供全局照明。 燈條看起來像三條黃色條紋。

Image title

Image title

您將需要穩定相機在飛行無人機與云臺。

Image title

如果您正在將無人機的 360 視頻源實時流式傳輸到 VR 耳機中,則需要對減少延遲的技術進行一些研究,并在無人機上使用專門的無線電發射器。

Image title

如果您在 Linux 計算機上處理圖像和視頻,最常見的庫是 OpenCV 和 TensorFlow。

總結

對于許多相機型號來說,讓應用程序通過 USB 電纜控制攝像機可能非常棘手。 好消息是,一旦應用程序運行,命令易于使用,連接是穩定的。

如果找出一次配置,則可以將其用于所有機器人和監控項目。盡管 Linux 上的 libptp 庫很舊,而且需要一些工作才能正確配置,但由于它在飛行和滾動機器人中的使用增加,從而將數據傳輸或觸發數據傳輸到基于云的系統,因此它正出現新的流行浪潮。

進一步閱讀

相機中的計算

如何將亞歷克薩添加到樹莓派

Comments are closed.