2020年度卒研セミナー(2020/07/16)

就活関連

活動休止中、活動中の方に、大学のキャリア就職課のイシカワさんから連絡がありますので、しっかり対応してください。

卒研関連

例年通り、10月初旬に卒研中間報告書の提出を求められることが明らかになりました。 また、2020年度の卒論審査会は1月中に行われる公算が強くなりました(例年は2月)。 提出締め切りはその1週間~2週間前になります。

そこで、2020年8月6日(木)の卒研セミナーの時間は、各自に関心のあることについて発表していただきたいと思います。パワーポイントのスライド2枚以上でお願いします。

関連サイトと資料

3.Vision on Raspberry Pi 4

あなたの所有物全体がたった1つのラズベリーであり、あなたがそれをあなたの友人に与える世界を想像してください。 / ゲルダ・ヴァイスマン・クライン著『All but My Life』(Hill & Wang,1995)

第1章と第2章では、通常のデスクトップコンピューターでJavaを使用してコンピュータービジョンを実行する方法を説明しました。 セットアップは少し手作業でしたが、さまざまなビルディングブロックはすべて自由に利用できるため、これらのブロックを組み合わせるだけで済みました。

この章では、Raspberry Pi 4を追加します。 この章の最初の目標は、コンピューターで実行したのと同じ種類のタスクを実行することですが、 IoTデバイスでできるだけ実行します。コードを入力し、ローカルデスクトップからコードの実行を制御します。 つまり、コンピューター上で書き込みを行い、ラズベリー上で実行します。

コード実行部分では、特定のハードウェアとケーブルが必要なので、買い物に行く準備をします。 ショッピングリストを提供してから、セットアップに進みます。

具体的には、SDカードの作成とRaspberry Piの設定を行いますが、 これらの手順のほとんどは、他の本やブログですでに適切にカバーされていると想定されます。 ここに示されている基本事項以上のことが必要な場合は、それらを読んでください。

この章の最後では、さまざまな画像処理や画像からの物体検出アルゴリズムを実行することにより、 ラズベリーパイについて、その実行速度や消費電力を理解できるでしょう。 また、この機能をより大規模な音声制御ホームアシスタントに統合して、 個人のホームオートメーションやオフィスオートメーションに拡張する準備を整えます。

Bringing the Raspberry to Life

あなたは賢いのを自慢にしているが、なんて無知なのだ!/メアリー・シェリー著『Frankenstein』(1818)

私たちはフランケンシュタイン博士ではありませんが、Piに命を吹き込むには、ケーブルを接続し、組み立てて、 小さなデバイスの電源をオンにするように、Piを設計するように作業する必要があります。 いくつかの買い物が必要になるでしょう、そして私たちは有用な何かをする前に物理的なハードウェアを集めなければなりません。 幸い、購入するもののほとんどは安価で、他の人の古いコンピュータやおばあちゃんの屋根裏部屋から再利用できます。 彼女は気づかないでしょう。

ショッピングが完了し、Raspberry Piとすべての重要なパーツが組み立てられたら、 第1章と同じVisual Studio Codeにビジョンセットアップを導入し、 JavaでOpenCVを再度プログラミングする方法を学びます。

Shopping

Raspberry Piはそれ自体が堅牢なコンピューターですが、 ほとんどの場合、他にいくつかの追加部品がないと、Raspberry Piで何かを行うことはできません。 この章では、いくつかのアクセサリが必要になります。

表3-1に買い物リストを示しますが、種類や購入場所を決めることができます。

【注意】最近では、さまざまなケーブルと電源アダプターがあります。 オーバークロックを行う場合は、出力が4.8Aから5A程度の電源アダプターを購入してください。 選択したUSBケーブルも電流を流すことができるはずですが、最近ではほとんどのケーブルで可能です。

すべてのパーツを収集したら(図3-1)、Piでソフトウェアを実行します。

Downloading the OS

Raspberry Piは、オペレーティングシステムのないMarcelのような美しい猫を見ることさえ拒否します。 Raspberry Webサイトですぐに利用できるオペレーティングシステムがいくつかあります。

主なものの短いリストは次のとおりです。

Ubuntu MateとUbuntu Coreは新しく優れた代替品ですが、 Raspberryで利用できるドキュメントのほとんどはRaspbianに基づいているため、 公式のオペレーティングシステムであるRaspbianに焦点を当てます。 使い始めるのも簡単です。

RaspbianはDebianベースのオペレーティングシステムであるため、 ほとんどのLinux愛好家は、Raspbianとそれに含まれているaptitudeパッケージマネージャーを使いこなすことができます。 パッケージはRaspberryのARMベースのCPU専用にコンパイルする必要がありますが、 パッケージリストは非常に最新であり、ほとんどがメインのDebianラインと同期しています。

Raspberryが使用できる起動可能なイメージとしてオペレーティングシステムを使用できるようにするには、 まずイメージファイルをローカルコンピューターにダウンロードし、 Raspberry Pi専用の起動可能なディスクを作成する必要があります。

非常に大きなOSファイルをダウンロードするには(電話でテザリング中にこれを試さないでください)、 https://www.raspberrypi.org/downloads/ にアクセスして、図3-2に示すRaspbianアイコンを探します。

アイコンをクリックします。 次に、図3-3に示すように、Raspbian固有のダウンロードページに移動します。 ここには、取得するzipファイルへのリンクがあります。

完全なデスクトップインストールと提案されたすべてのソフトウェアは必要ありませんが、 簡素化を目指して、「Raspbian Buster with desktop」で十分になりました。

Creating the Bootable SD Card

コンピューター上のOSファイルを使用して、起動可能なデバイスを作成する準備が整いました。 RaspberryのWebサイトに記載されているように、PiでOSを取得する最も簡単な方法は、 zipファイルまたは.imgファイルから起動可能なSDカードを作成するソフトウェアであるEtcherを使用することです。

Etcherは https://www.balena.io/etcher/ から入手でき、 macOS、Windows、Linuxなどの任意のプラットフォームで実行できます。 この本のスクリーンショットはWindowsで撮影されたものです。

アプリケーションを起動した後の最初のステップは、図3-4に示すように、 ダウンロードしたzipファイルを選択することです。

図3-5に示すように、選択したイメージファイルとコンピューターのSDスロットに挿入されたSDカードで、 OSを書き込むSDカードを選択します。

ここで使用されているカードは非常に大きいため、特に選択されました。 図3-6に示すように、そのサイズについて表示されたメッセージは無視してください。

最後に、先に進み、カードを「フラッシュ」します。 つまり、ファイルをカードに書き込みます。 図3-7に示すように、進行状況が表示され、2〜3分程度で完了します。

図3-8に示すように、最後のステップで、Etcherはコピーされたデータの整合性をチェックします。

フラッシュと検証が完了すると、Windowsは以前と同様にドライブを使用しようとしますが、 図3-9に示すように、SDカードのフォーマットは特定のドライバーなしでは読み取れなくなります。 安全にメッセージを無視して、[キャンセル]をクリックできます。

カードがここにあるので、Piのケーブルを接続します。

Connecting the Cables

物事をつなぐことは非常に楽しくリラックスできることがわかり、実際に私たちが住んでいる厳しい世界のパーソナルセラピーに使用できる可能性があります。

表3-2に、確立する必要がある接続の完全なリストを示します。

注:最後に、電源アダプターまたはUSB-C to Raspberryアダプターを必ず差し込んでください。 さもなければ、電源は何もすることなくボードをオンにします。

通常、写真を使用すると物事が理解しやすくなります。したがって、図3-10を参照して、実際のボードのどこに物が合うかを確認してください。

最後に、マイクロSDカードをRaspberry Pi 4に挿入すると、電源を入れる準備が整います(または、すでに電源を入れていますか?)。

First Boot

最初の起動はかなり高速です。 ブートプロセスには、ファイルシステムのサイズを変更する必要があるステップが含まれます。 これは、最初のブート時にRaspbianによって自動的に処理されるようになりました。 図3-11に示すようなウェルカム画面が表示されます。

キーボード、マウス、画面を接続すれば、かなりの作業を行うことができますが、 この章で行うほとんどのタスクでは、ネットワーク接続を必要とするSSHを介して作業する必要があります。

イーサネットケーブルをPiのイーサネットポートに接続できますが、WiFiは非常にうまく機能します。 図3-12に示すように、右上にあるWiFiアイコンをクリックし、ダイアログボックスにWiFi設定を入力します。

SSH経由で接続する前に、最後のステップが1つ必要です。 これは、Raspberry Piに組み込まれたOpenSSHサーバーを有効にすることです。 これは、次のメニューから有効にできます。

図3-13に示すように、SSHサーバーをクリックして有効にします。

次に、SSH経由でRaspberryに接続します。

Finding Your Raspberry Using nmap

おそらくご存知のとおり、Raspberry Piにリモートで接続するには、そのIPアドレスが必要です。 IPアドレスは、Raspberry Pi内からターミナルを開いて次のように入力することで確認できます。

Raspberry Piへの接続に使用する必要があるIPアドレスが表示されます。

運が悪く、キーボード、画面、マウス、またはこれらすべてがない場合、いくつかの簡単なコマンド対策に戻り、 nmapを使用してネットワーク上のすべてのRaspberry Pi(およびすべてのコンピューター)を見つけることができます。

これは、メインコンピューターから次のようなコマンドを実行することによって行われます。

ここで、192.168.1。*は、独自のデスクトップIPアドレスの始まりであり、Raspberryの場所です。 これが機能するためには、コンピューターとRaspberryが同じネットワーク上にあると想定しています。

コマンドは実際には何をしますか? つまり、nmapはローカルネットワークをスキャンして、使用可能なマシンと開いているポートを探します。

-pスイッチは指定されたポートをスキャンし、-Oスイッチは見つかった各ホストについて可能な限り多くの情報を収集するように指示します。

前のnmapコマンドをローカルネットワークで実行すると、図3-14のような結果が得られます。

ラズベリー(うまくいけばあなたのもの!)がネットワーク上で見つかりました。 これで、次のコマンドを使用して、デフォルトのユーザー名/パスワード(pi / raspberryである必要があります)を使用してSSHで接続できます。

図3-15に示すように接続されます。

1つの接続を作成しましたが、これらの接続手順を何度も繰り返す必要があるため、 ローカルとリモートのRaspberryの両方で構成ファイルを変更して、 後で使用できるようにいくつかのSSH設定を保存します。

Setting Up SSH Easily

通常、SSH経由で接続するときは、パスワード認証、特にRaspberry Piのデフォルト認証を無効にし、 ローカルマシンからキーを設定してリモートマシンに接続し、そのリモートマシンが1つのキーのみを受け入れるように設定します。 ランダムなセキュリティ攻撃を防ぐために、それらの数を制限しました。

これは次のように機能します。

  1. SSHで使用する個人鍵ペアを作成します。 1つの秘密鍵がコンピューターに残り、1つの公開鍵がリモートマシンの既知のエンティティとして追加されます。 量子コンピューティングが登場するまで、その鍵ペアは安全であると言われており、 公開鍵を知っているだけでは自分の秘密鍵を推測することはほぼ不可能です。 この詳細については、 https://commandlinefanatic.com/cgi-bin/showarticle.cgi?article=art054 にあるJoshua Daviesの記事を参照してください。
  2. リモートデバイス(ここではRaspberry Pi)で生成された公開鍵を登録します。 先に進んで、公開鍵を好きなだけ多くの人に渡してください。 デフォルトでは、これは.pub拡張子で終わるファイルです。
  3. ショートカットを介してRaspberryに接続するときに、生成された秘密鍵を使用するようにSSHの構成を追加します。 ただし、その秘密鍵はあなたのものなので、誰にも教えないでください。

アマゾンウェブサービス(AWS)では、通常、新しい実行中のインスタンスを介して接続する.pemファイルを取得します。 その.pemファイルは新しいVMに自動的に登録されるため、新しく作成されたVMにアクセスできるのは自分だけなので、 クラウド内のマシンに安全にアクセスできます。

独自のローカルマシンで鍵を作成するには、ssh-keygenを-tスイッチとともに使用してアルゴリズムを指定し、 -bスイッチを使用してビット数を指定します(現在、4,096は非常に安全であると見なされています)。

コマンドが正常に実行されると、id_rsa.pubファイルとid_rsaファイルの2つのファイルが生成されます。 pubは誰にでも公開できる公開鍵であり、id_rsaは秘密鍵であり、細心の注意を払って処理する必要があります。

Raspberry Piに公開鍵を通知して認識させるには、それを/home/pi/.ssh/authorized_keysファイルに1行で追加し、 必要に応じてファイルと.ssh親フォルダーを作成します。

これが完了したら、コンピューターで、SSH接続設定の詳細を$HOME/.ssh/configファイルに追加し、ファイルがない場合は再度作成します。

接続設定の意味は次のとおりです。

これらすべての設定を使用すると、これだけの価値があるかどうか疑問に思われるかもしれません。 それがそうだったことを証明するために、ちょっとした満足感を得ましょう。 SSH接続を介して、付属のChromiumブラウザなどのUIでアプリケーションを開きます。

Raspberry画面のウィンドウの表示を切り替えるには、DISPLAY変数の設定を変更します。

コマンドのリストは次のとおりです。

図3-16は、PiでChromiumが実行されているが、コンピューターでウィンドウが開いている様子を示しています。

Setting Up Visual Studio Code for Remote Use

この本の主な概念の1つは、大画面のマシンでコードを記述し、 それをリモートデバイスで実行して、ビジュアル出力を大画面にリダイレクトできるようにすることです。

これまでは、Visual Studio Codeでコードを記述してローカルで実行してきました。 今後は、コードをローカルで記述してリモートで実行します。

Visual Studio CodeにはRemote-SSHという名前のプラグインがあり、 SSHのセットアップが完了すると残りのすべてが自動的に行われ、 エディターのエコシステムと完全に統合されるため、 この章で前述したすべてのSSHセットアップの取り組みが行われました。

図3-17に示すように、最初にRemote-SSHプラグインをインストールします。

プラグインがインストールされ、エディタがすばやく更新されたら、 図3-18に示すように、コマンドランチャーから利用できる[Connect to Host]コマンドを開始できます。

注意:現在のプロジェクトに含まれるファイルが多すぎると、Remote-SSHプラグインが正しく機能しない場合があります。 その場合は、新しいリモートSSHセッションを開く前に、Visual Studio Codeで新しい空白のウィンドウを開いてください。

図3-19、図3-20、および図3-21は、Raspberry Piに接続するために必要な手順を示しています。 pi4ショートカットは、$HOME/.ssh/configファイルで設定したものから取得されていることに注意してください。 別のショートカットを使用した場合、これは異なります。



この段階では、Visual Studio Code内から、Raspberry Piにリモートで接続された端末を持っています。 つまり、リモートコマンドを自由に起動できますが、Raspberry Piからキーボードとマウスを取り外すこともできます。 残りはほとんどローカルコンピュータから行われます。

最初のチェックとして、次に示すように、PiのIPアドレスをチェックするコマンドを実行できます。

図3-22に示すように、出力はVisual Studio Codeの[ターミナル]タブに表示されます。

IPアドレスの出力は明らかにその端末で実行できる主なことではないので、次に進んで、必要なJava開発キットをインストールします。

Setting Up the Java OpenJDK

この本のコードはすべてJavaコードであるため、Raspberry PiにJava開発キットとランタイムをインストールする必要があります。

オプションの依存関係として、Mavenをインストールすることもできます。 本のほとんどの例ではMavenは実際には必要ありませんが、 これにより、Visual Studio Codeが(不要な)Maven実行可能ファイルを見つけられないという迷惑なメッセージが表示されなくなります。

それでは、Visual Studio Codeの[ターミナル]タブで、 Javaをインストールするためのソフトウェアパッケージインストーラー(apt)を取得しましょう。 これは、次に示す小さなスニペットを介して行われます。

必要に応じて、次のコマンドを実行してMavenをインストールします。

各コマンドラインの先頭にあるsudoは、 aptを使用して新しいソフトウェアをインストールするために必要なエスカレートされた権限を取得するために使用されます。

前のコマンドの出力は、図3-23のようになります。

Alternative to Setting Up the Java SDK

Buster(最新のRaspbianバージョン)を実行しているRaspberry Pi 4での現在のJDKの選択は非常に印象的です。 ただし、場合によっては、特に古いバージョンのRaspbianの場合、かなり古い間、古いJDKが表示されることがあります。

AzulやBellsoftなどの企業が、 Raspberry Piで実行されるプロセッサであるARM CPU用に特別にコンパイルされたJDKの最新バージョンをリリースしたことは注目に値します。

JDKパッケージへの直接リンクについては、次の2つのサイトにアクセスしてください。

次の短いスニペットは、BellsoftからJDK 11をダウンロードしてインストールします。

次の出力に示すように、使用可能なバージョンは確かにJava 11です。

Java開発キットがRaspberry Piにインストールされたので、この章の要点に進み、JavaとPiでOpenCVコードを実行します。

Checking Out the OpenCV/Java Template

まず、Raspberryで直接OpenCV / Javaプロジェクトテンプレートをチェックアウトします。 これを行うにはいくつかの方法があります。 3つの主要なものは次のとおりです。

これら3つを1つずつ簡単に確認してみましょう。

Performing a Git Clone

Visual Studio Codeから直接Piにコードをチェックアウトすることは可能で便利です。 これはコマンドパレットを介して行われ、gitで始まるものを入力します。

図3-24に示すように、いくつかのオプションが表示されます。そのうちの1つがGit:Cloneです。

ここから、図3-25に示すように、テンプレートリポジトリの場所を次のように入力します。

https://github.com/hellonico/opencv-java-template.git

最後に、ダイアログボックスで[開く]をクリックして確認します(図3-26)。

これでプロジェクトはRaspberryでチェックアウトされ、実行する準備ができました。

Downloading the Zip File

または、プロジェクトテンプレートからzipファイルをダウンロードすることもできます。 これは、Gitをまったく使用しない場合に備えて、ターミナルでwgetコマンドを使用して実行できます。

図3-27は、Visual Code Studioの[ターミナル]タブを示しています。

これにはGitに依存しないという利点がありますが、異なるRaspberry Pi間で更新を共有することが難しくなるという結果になります。

Using Maven

プロジェクトを設定する3番目の方法は、最初にGitテンプレートリポジトリを作成するために使用したのと同じ手法です。 つまり、ビルドツールMavenを使用します。 Javaエコシステムでは、かなりの数の人がMavenの道を進むことを少し恐れていますが、 一連の所定のタスクでは、Mavenはかなり確かな選択肢です。

Mavenをインストールすると、Mavenアーキタイプを通じて必要なすべてのファイルを含むプロジェクトを作成できます。

次のコマンドをコピーして[ターミナル]タブに貼り付けると、次に示すようにプロジェクト構造が生成されます。

コマンドの重要なパラメーターは、前のスニペットで強調表示されており、ここで説明されています。

ここでは、古いバージョンのアーキタイププラグインを使用しています。 このバージョンでは、repository.hellonico.infoのカスタムMavenリポジトリからアーティファクトを簡単に取得できます。

アーキタイププラグインの以降のバージョンでは、Mavenフレームワークの深い知識が必要ですが、この本の範囲外です。

どちらの方法を使用しても、リモートフォルダーを開くことができます。 図3-28のツリーのようなものが表示されます。

繰り返しになりますが、ファイルはRaspberry Piにあり、JavaコードはRaspberry Piで実行されますが、 エディターはローカルコンピューターで効果的に実行されます。

Installing the Visual Code Java Extension Pack Remotely

第1章を覚えている場合は、プラグインをインストールして、Visual Studio CodeがJavaを理解して実行できるようにしました。 ここでも同じことを行いますが、今回はRaspberry Piを使用します。

図3-29は、[マーケットプレイス]タブを示しています。このタブでは、以前にインストールされたものと同じプラグイン、Java拡張パックを検索できます。 図3-30では、RaspberryにプラグインをインストールするかどうかをVisual Studio Codeが適切に尋ねていることに注意してください。


図3-31および図3-32は、Raspberry PiにVisual Code Javaプラグインをインストールする最後の2つのステップを示しています。


これで、図3-33に示すように、おなじみの実行リンクとデバッグリンクがエディターに直接表示されるようになりました。

最初はすべてのステップがかなり長くなりましたが、これでいくつかの良い時間の準備が整いました。 Raspberry PiでOpenCV / Javaを実行するためのすべての準備が整いました。

Running the First OpenCV Example

さっそく実行ボタンをクリックして、プログラムを実行してみましょう。

実行ボタンをクリックすると、第1章と同じプログラムが実行されますが、今回はRaspberry Piで実行されます。 図3-34のように、出力にはおなじみの3×3マトリックスが表示されます。

最初の実行では、さまざまなダウンロードがバックグラウンドで行われるため、 コマンドに少し時間がかかることに注意してください。 2回目の実行では、処理が速くなります。

念のため、ここではデバッグは第1章と同じように機能します。 演習として、ブレークポイントを追加して、Debugの実行後にプログラムの実行を一時停止し、 System.getProperty()にウォッチ式を追加してjava.vm.vendorの値を表示します。 ここではRaspberry Piで実行しているため、図3-35に示すように、値はRaspbianになります。

Running on Linux or a VM with AWS Instead

では、実際にRaspberry PiではなくリモートのLinuxサーバーまたはクラウド仮想マシンで実行している場合はどうでしょうか。

これまでに行ったすべての設定は実際には非常に一般的なものでした。 そのため、SSHアクセスがあれば、Linuxを実行している標準のボックスに接続できたはずです。

たとえば、図3-36では、リモートのLinuxボックスに接続して、 私のお気に入りのデスクトップディストリビューションであるManjaro Linuxを実行している同じセットアップを見ることができます。

さらに創造的なアイデアを提供するために、アマゾンウェブサービスのリモートマシンへの接続にも同じ設定を使用しています。

Capturing a Video Live Stream

WebカメラがUSBポート経由で正しく接続されている場合は、 IoTデバイスから直接ビデオストリームをキャプチャするためのコードを記述する準備ができています。

ここでは、2つのビルディングブロックを使用して開始します。

また、適切なバイナリOpenCVライブラリを検索して読み込むOrigami.init()と呼ばれる便利なメソッドでOpenCVの初期化を行います。

リスト3-1は、この最初のストリーミングの例の完全なコードを示しています。

リスト3-1
package hello;
     
import org.opencv.core.Mat;
import org.opencv.videoio.VideoCapture;
import origami.ImShow;
import origami.Origami;
     
public class Webcam {
   
  public static void main(String[] args) {
    Origami.init();
      
    VideoCapture cap = new VideoCapture(0);
   
    Mat matFrame = new Mat();
    ImShow ims = new ImShow("Camera", 800, 600);
    while (cap.grab()) {
      cap.retrieve(matFrame);
      ims.showImage(matFrame);
    }
   
    cap.release();
  }
}
    

コードはかなり標準的なOpenCVコードです。 コードを実行すると、図3-37のような画像が表示されます(フレームレートは表示されません)。

速度がリアルタイムに非常に近いことがわかります。 図3-38に示すように、リスト3-2のコードをフレームループに追加して、フレームレートを表示できます。

リスト3-2
long now = System.currentTimeMillis();
frame++;
Imgproc.putText(matFrame, "FPS " + (frame / (1 + (now - start) / 1000)), new Point(50, 50),
Imgproc.FONT_HERSHEY_COMPLEX, 2.0, new Scalar(255, 255, 255));
    

通常、この演習では、1秒あたり15〜20フレームが期待されます。

前の例の実行中に問題が発生する可能性があります。 以下に示すスタックトレースでプログラムが停止する場合があります。

現在実行しているように、SSH経由でグラフィックプログラムを実行するには、Javaでシステム環境変数を設定する必要があります。 ご覧のとおり、この変数の名前はDISPLAYです。 次のようにして、[ターミナル]タブでその値を確認できます。

この変数の値に応じて、次の3つの主要な状態があります。

変数を適切に設定すると、図3-39に示すように、ストリームがコンピューター画面に表示されます。

リモート開発用にPiを設定することについて、あなたはすべて知っています。 ビデオストリームのコンテンツを分析するためのいくつかのレシピに移りましょう。

Playing a Video

常にビデオストリームにアクセスできるとは限らず、記録された映像の再生に戻る必要がある場合があります。 これは、VideoCaptureクラスでも機能します。 次に示すように、再生するビデオファイルへのパスを指定できます。

public class PlayVideo {
  
  public static void main(String[] args) {
    Origami.init();
      
    VideoCapture cap = new VideoCapture("marcel_1.mp4");

    Mat matFrame = new Mat();
    ImShow ims = new ImShow("Camera", 400, 300);
    long start = System.currentTimeMillis();
    long frame = 0;
    while (cap.grab()) {
      cap.retrieve(matFrame);
      long now = System.currentTimeMillis();
      frame++;
      Imgproc.putText(matFrame, "FPS " + (frame / (1 + (now - start) / 1000)), new Point(50, 50), Imgproc.FONT_HERSHEY_COMPLEX, 2.0, new Scalar(255, 255, 255));
      ims.showImage(matFrame);
    }

    cap.release();
  }
}
    

このコードは、ファイル名がVideoCaptureコンストラクターのパラメーターであることを除いて、Webカメラから取得したストリームの再生と同じです。

次のWebサイトで無料のサンプルビデオを見つけることもできます。

https://sample-videos.com/index.php

図3-40は、マルセルの朝の活動の一部を示しています。

VideoCaptureへのパスとしてhttp:// URLを入力しようとすると、予想どおりに機能しないことがわかります。 再生したいリモートビデオが読み込まれません。

パス内のURLは、静的ファイルではなく、ネットワークWebカメラからのストリームの再生に使用されます。 手元にある場合は、WebカメラのWeb URLを直接VideoCaptureオブジェクトに接続することをお勧めします。