昨今様々な自治体で、オープンデータやスマートシティへの取り組みが進められています。その際に重要となるパーツがデータ連携基盤であり、特にそのコアとなるのはデータを仲介するブローカー機能だと言われています。1
このデータ連携基盤を実現する際には、EUの第7次研究枠組計画で開発されオープンソースとして維持運用されているFIWAREを利用することが多く、FIWAREのブローカー機能であるorionを中心にFIWAREの様々なコンポーネントを組み合わせてインフラを組み立てることになります。2
しかしFIWARE orionはテキストデータのブローカー機能に特化しているため、画像や映像を直接的に取り扱うことはできません。FIWAREのコンポーネントにはKurentoやOpenViduといった映像ストリームや音声ストリームを扱うものがありますが、FIWARE orionと容易に連携できるものではありません。3
そこで今回は、USBカメラを接続したRaspberry Piを監視カメラに見立て、監視カメラが撮影した画像をクラウドストレージに保存し、同時に「いつ・どこで画像を撮影したか」「その画像が保存されているクラウドストレージのパス」をFIWAREに登録するという仕組みを紹介します。
今回のアーキテクチャ
今回は、Microsoft Azureが提供するManaged Kubernetes ServiceであるAzure AKS上にFIWAREのデータ連携基盤を構築し、Managed Object StorageであるAzure Blob Storageと連携させます。
KubernetesやAPI Gatewayを活用することである程度の可用性とセキュリティは担保していますが、バックアップを考慮していないなど、あくまでも検証用のインフラであることにはご留意ください。
環境構築
それではまず、クラウド側のインフラを構築します。スクリプト類はgithubで公開(qiita_fiware_camera)していますので、リポジトリをcloneしてください。
またMicrosoft Azureを操作するためにazure-cliを、Kubernetesを操作するために、kubectlとhelm、及びenvsubstをインストールしておいてください。
変数設定
まずはenv.tempをもとに、変数の値を設定したenvファイルを作成します。
envファイルを作成
nmatsui@:qiita_fiware_camera (main =)$ cp variables/env.temp variables/env
nmatsui@:qiita_fiware_camera (main =)$ vi variables/env
Microsoft Azureのテナント名やAzure DNSのドメイン名など、" << "と" >> "で囲まれた変数は環境ごとに異なるため、自らの環境にあわせて適切に設定してください(この記事では、nmatsui.workというドメインを利用したという形で解説しています)。
Azure AKSとAzure Blob Storageの準備
installation
ディレクトリに移動し、Microsoft Azure上にAzure AKSとAzure Blob Storageを起動します。
installationディレクトリに移動
nmatsui@:qiita_fiware_camera (main =)$ cd installation/
01_azure_login.shを実行するとブラウザが立ち上がるので、Microsoft Azureへログインしてください。
Microsoft Azureにログイン
nmatsui@:installation (main =)$ ./01_azure_login.sh
02_azure_create_resourcegroup.shを実行して今回作成するクラウドリーソースを格納するResource Groupを作成します。
リソースグループを作成
nmatsui@:installation (main =)$ ./02_azure_create_resourcegroup.sh
03_azure_start_aks.shを実行するとAzure AKSが起動します。5分程度かかりますので、コマンドが終了するまで待ってください。
Azure AKSを起動
nmatsui@:installation (main =)$ ./03_azure_start_aks.sh
{
"aadProfile": null,
"addonProfiles": null,
"agentPoolProfiles": [
{
"availabilityZones": null,
"count": 3,
"creationData": null,
"currentOrchestratorVersion": "1.24.0",
"enableAutoScaling": false,
"enableEncryptionAt
...
"type": "Microsoft.ContainerService/ManagedClusters",
"windowsProfile": null
}
Merged "qfcaks" as current context in /Users/nmatsui/.kube/config
nmatsui@:installation (main =)$ kubectl get nodes
NAME STATUS ROLES AGE VERSION
aks-nodepool1-14606101-vmss000000 Ready agent 7m12s v1.24.0
aks-nodepool1-14606101-vmss000001 Ready agent 7m14s v1.24.0
aks-nodepool1-14606101-vmss000002 Ready agent 7m17s v1.24.0
04_azure_blobstorage.shを実行して、Azure Blob Storageを利用可能にします。また監視カメラから画像をアップロードするためのコンテナも作成しておきます。
Azure Blob Storageを設定
nmatsui@:installation (main =)$ ./04_azure_blobstorage.sh
{
"accessTier": "Hot",
"allowBlobPublicAccess": true,
"allowCrossTenantReplication": null,
"allowSharedKeyAccess": null,
...
"storageAccountSkuConversionStatus": null,
"tags": {},
"type": "Microsoft.Storage/storageAccounts"
}
{
"created": true
}
FIWAREの準備
次にFIWARE orionとcygnus、及びそれらが依存するMongoDBをKubernetes上に起動します。
05_fiware_start_mongodb.shを実行すると、MongoDBのPRIMARY Nodeを1つ、SECONDARY Nodeを2つ起動します。立ち上がるまで数分待ちましょう。
MongoDBのStatefulSetを起動
nmatsui@:installation (main =)$ ./05_fiware_start_mongodb.sh
...
NAME: mongodb
LAST DEPLOYED: Sun Jun 26 21:26:58 2022
NAMESPACE: default
STATUS: deployed
REVISION: 1
TEST SUITE: None
NOTES:
CHART NAME: mongodb
CHART VERSION: 12.1.20
APP VERSION: 5.0.9
...
Then, run the following command:
mongosh admin --host "mongodb-0.mongodb-headless.default.svc.cluster.local:27017,mongodb-1.mongodb-headless.default.svc.cluster.local:27017,mongodb-2.mongodb-headless.default.svc.cluster.local:27017"
nmatsui@:installation (main =)$ kubectl get statefulsets
NAME READY AGE
mongodb 3/3 2m49s
nmatsui@:installation (main =)$ kubectl get pods -l app.kubernetes.io/name=mongodb
NAME READY STATUS RESTARTS AGE
mongodb-0 1/1 Running 0 2m55s
mongodb-1 1/1 Running 0 2m
mongodb-2 1/1 Running 0 65s
MongoDBの3つのPodが立ち上がった後、06_fiware_setup_mongodb.shを実行してクラスタ化します。
MongoDBをクラスタ化
nmatsui@:installation (main =)$ ./06_fiware_setup_mongodb.sh
...
If you don't see a command prompt, try pressing enter.
[
{
name: 'mongodb-0.mongodb-headless.default.svc.cluster.local:27017',
stateStr: 'PRIMARY'
},
{
name: 'mongodb-1.mongodb-headless.default.svc.cluster.local:27017',
stateStr: 'SECONDARY'
},
{
name: 'mongodb-2.mongodb-headless.default.svc.cluster.local:27017',
stateStr: 'SECONDARY'
}
]
pod "mongodb-client" deleted
07_fiware_start_orion.shを実行してFIWARE orionを立ち上げます。
FIWARE orionは監視カメラから送られてきたデータを受け取り、条件に従って適切なコンポーネントを呼び出してそのデータの処理を依頼するといった、ブローカー機能を実現するコンポーネントです。
orionを起動
nmatsui@:installation (main =)$ ./07_fiware_start_orion.sh
service/orion created
deployment.apps/orion created
nmatsui@:installation (main =)$ kubectl get deployments
NAME READY UP-TO-DATE AVAILABLE AGE
orion 3/3 3 3 4m33s
nmatsui@:installation (main =)$ kubectl get pods -l app=orion
NAME READY STATUS RESTARTS AGE
orion-54c98d69c7-4tjmh 1/1 Running 0 4m48s
orion-54c98d69c7-964st 1/1 Running 0 4m48s
orion-54c98d69c7-kgxrl 1/1 Running 0 4m48s
08_fiware_start_cygnus.shを実行してFIWARE cygnusを立ち上げます。
FIWARE cygnusはorionにデータが到着するごとにorionから呼び出され、到着したデータを時系列でデータベースに記録します。cygnusは様々なデータベースが利用できますが、今回は構築済みのMongoDBにデータを記録するように設定しました。
cygnusを起動
nmatsui@:installation (main =)$ ./08_fiware_start_cygnus.sh
service/cygnus created
deployment.apps/cygnus created
nmatsui@:installation (main =)$ kubectl get deployments
NAME READY UP-TO-DATE AVAILABLE AGE
cygnus 3/3 3 3 89s
orion 3/3 3 3 9m55s
nmatsui@:installation (main =)$ kubectl get pods -l app=cygnus
NAME READY STATUS RESTARTS AGE
cygnus-6dc69bdd9f-l6kql 1/1 Running 0 105s
cygnus-6dc69bdd9f-pzplw 1/1 Running 0 105s
cygnus-6dc69bdd9f-w8dss 1/1 Running 0 105s
API Gatewayの準備
FIWAREが立ち上がりましたので、API Gatewayとしてkongを起動しFIWARE orionと連携させます。FIWARE orionを直接インターネットと接続せず、API Gateway経由でインターネットに公開することで、通信経路の暗号化や利用者の認証認可、また必要に応じてレートリミットやIP制限などを実現できるようになります。
ただし今回は検証なので、簡易的な固定Tokenによる認証でお茶を濁しています。実際に運用する場合は、OpenID Connect等を用いて適切な認証・認可を設定すべきでしょう。
09_kong_start_kong.shを実行してkongのカスタムリソースやIngress Controller等を立ち上げます。同時に、Azure Load BalancerとAzure AKSが連携し、インターネットからkongへリクエストができるようになります。ただしDNSもTLSもルーティングも設定していないため、この時点ではあまり意味がありません。
kongを起動
nmatsui@:installation (main =)$ ./09_kong_start_kong.sh
...
service/kong-proxy created
service/kong-validation-webhook created
deployment.apps/ingress-kong created
ingressclass.networking.k8s.io/kong created
deployment.apps/ingress-kong scaled
nmatsui@:installation (main =)$ kubectl -n kong get deployments
NAME READY UP-TO-DATE AVAILABLE AGE
ingress-kong 3/3 3 3 4m37s
nmatsui@:installation (main =)$ kubectl -n kong get pods
NAME READY STATUS RESTARTS AGE
ingress-kong-6454f9b96b-nbfsp 2/2 Running 0 4m52s
ingress-kong-6454f9b96b-xz6mh 2/2 Running 0 4m52s
ingress-kong-6454f9b96b-zx9qw 2/2 Running 0 4m52s
nmatsui@:installation (main =)$ kubectl -n kong get services
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
kong-proxy LoadBalancer 10.0.104.182 20.194.150.71 80:31629/TCP,443:30182/TCP 3m31s
kong-validation-webhook ClusterIP 10.0.37.181 <none> 443/TCP 3m31s
nmatsui@:installation (main =)$ curl -i http://20.194.150.71/
HTTP/1.1 404 Not Found
Date: Sun, 26 Jun 2022 13:08:35 GMT
Content-Type: application/json; charset=utf-8
Connection: keep-alive
Content-Length: 48
X-Kong-Response-Latency: 0
Server: kong/2.8.1
{"message":"no Route matched with those values"}
10_kong_start_cert-manager.shを実行し、Azure DNSにAレコードを登録した後にLet's EncryptからTLS証明書を取得します。
DNSの登録とTLS証明書の取得
nmatsui@:installation (main =)$ ./10_kong_start_cert-manager.sh
namespace/cert-manager created
customresourcedefinition.apiextensions.k8s.io/certificaterequests.cert-manager.io created
...
"provisioningState": "Succeeded",
"resourceGroup": "dns-zone",
"targetResource": {
"id": null
},
"ttl": 3600,
"type": "Microsoft.Network/dnszones/A"
}
clusterissuer.cert-manager.io/letsencrypt-prod created
11_kong_setup_kong.shを実行し、kongにFIWARE orionへのルーティングを設定します。その際、TLS証明書の適用と固定Tokenによる認証、httpのhttpsへのリダイレクトも同時に設定することで、インターネットへ公開するorion APIのセキュリティを向上させます。
FIWARE orionへのルーティング定義とAPIセキュリティの設定
nmatsui@:installation (main =)$ ./11_kong_setup_kong.sh
kongingress.configuration.konghq.com/https-only created
secret/kong-keyauth created
kongconsumer.configuration.konghq.com/kong-keyauth created
kongplugin.configuration.konghq.com/key-auth created
ingress.networking.k8s.io/orion-ingress created
nmatsui@:installation (main =)$ curl -i http://fiware-camera.nmatsui.work/
HTTP/1.1 404 Not Found
Date: Sun, 26 Jun 2022 13:25:25 GMT
Content-Type: application/json; charset=utf-8
Connection: keep-alive
Content-Length: 48
X-Kong-Response-Latency: 0
Server: kong/2.8.1
{"message":"no Route matched with those values"}
nmatsui@:installation (main =)$ curl -i http://fiware-camera.nmatsui.work/version
HTTP/1.1 301 Moved Permanently
Date: Sun, 26 Jun 2022 13:26:10 GMT
Content-Type: text/html
Content-Length: 134
Connection: keep-alive
Location: https://fiware-camera.nmatsui.work/version
X-Kong-Response-Latency: 0
Server: kong/2.8.1
<html>
<head><title>301 Moved Permanently</title></head>
<body>
<center><h1>301 Moved Permanently</h1></center>
</body>
</html>
nmatsui@:installation (main =)$ curl -i https://fiware-camera.nmatsui.work/version
HTTP/2 401
date: Sun, 26 Jun 2022 13:26:37 GMT
content-type: application/json; charset=utf-8
www-authenticate: Key realm="kong"
content-length: 45
x-kong-response-latency: 0
server: kong/2.8.1
{
"message":"No API key found in request"
}
nmatsui@:installation (main =)$ curl -i -H "Authorization: ${API_TOKEN}" https://fiware-camera.nmatsui.work/version
HTTP/2 200
content-type: application/json
content-length: 656
fiware-correlator: f3fe3f82-f553-11ec-82c3-4a55b25ab823
date: Sun, 26 Jun 2022 13:29:06 GMT
x-kong-upstream-latency: 4
x-kong-proxy-latency: 2
via: kong/2.8.1
{
"orion" : {
"version" : "3.4.0",
"uptime" : "0 d, 0 h, 48 m, 20 s",
"git_hash" : "e8ed9c5f363ab503ac406a9e62a213640d9c2864",
"compile_time" : "Tue Dec 14 09:34:09 UTC 2021",
"compiled_by" : "root",
"compiled_in" : "5221bc0800ef",
"release_date" : "Tue Dec 14 09:34:09 UTC 2021",
"machine" : "x86_64",
"doc" : "https://fiware-orion.rtfd.io/en/3.4.0/",
"libversions": {
"boost": "1_66",
"libcurl": "libcurl/7.61.1 OpenSSL/1.1.1k zlib/1.2.11 nghttp2/1.33.0",
"libmosquitto": "2.0.12",
"libmicrohttpd": "0.9.70",
"openssl": "1.1",
"rapidjson": "1.1.0",
"mongoc": "1.17.4",
"bson": "1.17.4"
}
}
}
FIWAREのEntityとSubscriptionの定義
クラウド上のFIWARE orionのAPIへアクセスできるようになりましたので、監視カメラに相当するEntityを登録し、そのEntityが更新されるとcygnusがデータを記録するようにSubscriptionを定義します。
setupディレクトリに移動
nmatsui@:installation (main =)$ cd ../setup/
監視カメラのEntityを登録
nmatsui@:setup (main =)$ ./01_create_camera_entity.sh
HTTP/2 201
content-length: 0
location: /v2/entities/camera01?type=camera
fiware-correlator: 3e0f4e94-f555-11ec-b8fc-4a55b25ab823
date: Sun, 26 Jun 2022 13:38:20 GMT
x-kong-upstream-latency: 101
x-kong-proxy-latency: 1
via: kong/2.8.1
cygnusを呼び出すSubscriptionを定義
nmatsui@:setup (main =)$ ./02_subscribe_camera_entity.sh
HTTP/2 201
content-length: 0
location: /v2/subscriptions/62b86186fa263b47d742d76b
fiware-correlator: 60a34aa0-f555-11ec-94c9-eebfce5fe69a
date: Sun, 26 Jun 2022 13:39:18 GMT
x-kong-upstream-latency: 44
x-kong-proxy-latency: 1
via: kong/2.8.1
これによりFIWARE orionへ以下のEntityが登録され、このEntityが更新されるとcygnus経由でMongoDBにデータが時系列で記録されるようになります。
nmatsui@:setup (main =)$ source ../variables/env
nmatsui@:setup (main =)$ curl -sS -H "Authorization: ${API_TOKEN}" -H "Fiware-Service: ${FIWARE_SERVICE}" https://fiware-camera.nmatsui.work/v2/entities/ | jq .
[
{
"id": "camera01",
"type": "camera",
"created_at": {
"type": "ISO8601",
"value": "2022-06-26T13:38:19.000Z",
"metadata": {}
},
"location": {
"type": "geo:json",
"value": {
"type": "Point",
"coordinates": [
0,
0
]
},
"metadata": {}
},
"path": {
"type": "string",
"value": "/",
"metadata": {}
}
}
]
監視カメラの準備
最後にRaspberry Pi 3にUSBカメラを接続して監視カメラにします。今回はpython 3.10上でOpenCV 4を動作させてUSBカメラを扱います。pyenv等を用いてRaspberry Pi 3にpython 3.10を導入し、poetryをインストールしておいてください。
なおazure-storage-blobが依存するcryptographyは、ビルド時にrustが必要となります。公式手順を参考に、rustもインストールしておいてください。
まずはcamera_client
ディレクトリをRaspberry Pi 3へSCPします。
camera_clientディレクトリをscp
nmatsui@:setup (main =)$ cd ../
nmatsui@:qiita_fiware_camera (main =)$ scp -r camera_client pi@raspberrypi.local:/home/pi/
また監視カメラの実行時に必要となるため、Azure Blob Storageへの接続文字列を取得しておき、同時に編集済みのenvファイルもSCPしておいてください。
Azure Blob Storageへの接続文字列を取得
nmatsui@:qiita_fiware_camera (main =)$ cd variables/
nmatsui@:variables (main =)$ ./01_azure_storage_connectionstring.sh
...................<<接続文字列>>....................
envファイルをscp
nmatsui@:variables (main =)$ scp ./env pi@raspberrypi.local:/home/pi/
では新しいターミナルを起動してraspberry pi 3にSSHし、opencv-pythonやAzure Blob Storageのpythonライブラリazure-storage-blobをインストールしましょう。
ただしopencv-pythonをビルドするためには様々なライブラリが必要となるため、このページなどを参考にエラーメッセージを見ながら地道に足りないライブラリを追加してください。ライブラリが全部揃っている状態でも、raspberry pi 3でopencvをビルドするには4~5時間はかかります。。。
raspberry pi 3にssh
nmatsui@:~$ ssh pi@raspberrypi.local
ライブラリをインストール
pi@raspberrypi:~ $ cd camera_client/
pi@raspberrypi:~/camera_client $ poetry install
poetryのshellに入り、opencv等がインストール済みのpython仮想環境をactivateします。またenvファイルの変数を環境変数として読み込み、Azure Blob Storageへの接続文字列も環境変数としてセットします。
仮想環境をactivate
pi@raspberrypi:~/camera_client $ poetry shell
envファイルの変数を環境変数として読み込み
(camera-client-4j-8aR1T-py3.10) pi@raspberrypi:~/camera_client $ set -a;source ~/env; set +a
Azure Blob Storageへの接続文字列を環境変数としてセット
(camera-client-4j-8aR1T-py3.10) pi@raspberrypi:~/camera_client $ export AZURE_STORAGE_CONNECTION_STRING="...................<<接続文字列>>...................."
監視カメラとFIWARE&クラウドストレージの連携
諸々準備できましたので、監視カメラを動作させFIWARE及びクラウドストレージと連携させてみましょう。今回は main.py
を実行するだけです。想定通りに環境が準備できていれば、finish script
と表示されるはずです。
監視カメラを動作
(camera-client-4j-8aR1T-py3.10) pi@raspberrypi:~/camera_client $ ./main.py
start script
finish script
無事に実行できましたら、FIware orionのEntityを確認してください。今撮影した監視カメラの映像の情報(撮影日時や場所)と、Azure Blob Storageのパスが記録されているはずです。4
nmatsui@:variables (main =)$ curl -sS -H "Authorization: ${API_TOKEN}" -H "Fiware-Service: ${FIWARE_SERVICE}" https://fiware-camera.nmatsui.work/v2/entities/ | jq .
[
{
"id": "camera01",
"type": "camera",
"created_at": {
"type": "ISO8601",
"value": "2022-06-26T14:27:22.170Z",
"metadata": {}
},
"location": {
"type": "geo:json",
"value": {
"type": "Point",
"coordinates": [
139.932983435,
37.487650993
]
},
"metadata": {}
},
"path": {
"type": "string",
"value": "photos/2022-06-26T23_27_22.170270.jpg",
"metadata": {}
}
}
]
何度か撮影を繰り返してみましょう。FIWARE orionは最新の情報だけを保持するため、常に最後の撮影の情報がEntityに格納されています。過去の撮影記録を含め時系列に情報を知りたい場合は、cygnusが記録したデータベースを参照すると良いでしょう。
nmatsui@:variables (main =)$ kubectl run mongodb-client --rm --tty -i --restart='Never' --image marketplace.azurecr.io/bitnami/mongodb:4.4.15-debian-10-r2 --command -- \
> mongosh admin --host 'mongodb-0.mongodb-headless.default.svc.cluster.local:27017,mongodb-1.mongodb-headless.default.svc.cluster.local:27017,mongodb-2.mongodb-headless.default.svc.cluster.local:27017'
...
rs0 [primary] admin> use sth_fiware_camera
rs0 [primary] sth_fiware_camera> db.sth_x002f.find()
[
{
_id: ObjectId("62b86cce266c7040087246bd"),
entityId: 'camera01',
entityType: 'camera',
path: 'photos/2022-06-26T23_27_22.170270.jpg',
created_at: ISODate("2022-06-26T14:27:22.170Z"),
location: { type: 'Point', coordinates: [ 139.932983435, 37.487650993 ] },
recvTime: ISODate("2022-06-26T14:27:24.735Z")
},
{
_id: ObjectId("62b86ebc370e400b96d1a443"),
entityId: 'camera01',
entityType: 'camera',
path: 'photos/2022-06-26T23_35_37.381996.jpg',
created_at: ISODate("2022-06-26T14:35:37.381Z"),
location: { type: 'Point', coordinates: [ 139.932983435, 37.487650993 ] },
recvTime: ISODate("2022-06-26T14:35:39.858Z")
},
{
_id: ObjectId("62b86eeb266c7040087246be"),
entityId: 'camera01',
entityType: 'camera',
path: 'photos/2022-06-26T23_36_21.931998.jpg',
created_at: ISODate("2022-06-26T14:36:21.931Z"),
location: { type: 'Point', coordinates: [ 139.932983435, 37.487650993 ] },
recvTime: ISODate("2022-06-26T14:36:24.368Z")
}
]
上記のpath
で記録されている画像が、Azure Blob Storageに保存されていることも確認できます。
ちなみにこんな画像がAzure Blob Storageに保存されていました。この監視カメラはどこを監視したいのでしょうか?
まとめ
ということで、Azure AKS上のFIWAREとAzure Blob Storageを連携させ、監視カメラが取得した画像とその撮影記録を保管する仕組みを検証してみました。今回の検証はただ単に記録するだけでしたが、FIWARE orionがcygnusだけでなく画像解析プログラムも呼び出すように設定すれば、監視カメラに何か不審なものが映っていた場合に通報するような仕組みを作ることも可能でしょう。
FIWAREの得意不得意を踏まえて上手く活用し、皆様も良きFIWAREライフを送りましょう!
参考)検証した環境の情報
種類 | コンポーネント | バージョン |
---|---|---|
開発環境 | macOS Big Sur | 11.6.7 |
azure-cli | 2.37.0 | |
kubectl | 1.24.2 | |
helm | 3.9.0 | |
envsubst | 0.21 | |
クラウド | Azure AKS | 1.24.0 |
Azure BLOB Storage | ||
Azure DNS | ||
FIWARE Orion | 2.4.0 | |
FIWARE Cygnus | 2.15.0 | |
MongoDB | 4.2.7 | |
Kong | 2.8.1 | |
監視カメラ | Raspberry Pi 3 | Model B Plus Rev 1.3 |
USBカメラ | LOGICOOL C270n | |
Raspbian GNU/Linux 11 (bullseye) | 5.15.32-v7+ #1538 | |
python | 3.10.5 | |
opencv-python | 4.6.0 | |
azure-storage-blob | 12.12.0 | |
requests | 2.28.0 |
-
出典:デジタル庁, デジタル田園都市国家構想実現会議(第4回), 資料8 データ連携基盤の整備について, 2022/2/24, https://www.cas.go.jp/jp/seisaku/digital_denen/dai4/siryou8.pdf ↩
-
出典:FIWARE Foundation, FIWARE Catalogue, https://github.com/FIWARE/catalogue ↩
-
KurentoやOpenViduは、カメラやマイク(映像や音声の送信元)とブラウザ(再生デバイス)をWebRTCで直結してリアルタイムに映像や音声を配信するコンポーネントです。映像を伝送する途中で画像解析処理と通信処理を割り込ませ、例えばカメラが撮影した自動車のナンバープレートを読み取り、そのテキストデータをFIWARE orionに登録する、といったことをさせることも可能です。ただしリアルタイムに映像が伝送できるインフラの準備と、リアルタイムな画像解析・通信処理の実装は、かなりハードルが高くなってしまいます。 ↩
-
今回はGNSSモジュールが手に入らなかったため、位置情報を取得する実装はダミーです。 ↩