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

就活関連

関連サイトと資料

1.Get Started

この本の目的の1つは、長いインストールプロセスを回避して、 迅速にリアルタイムIoTイメージングを実行する準備をすることです。 迅速に準備を整えるということは、ショートカットをするということではなく、 ツールの使い方よりも、作成プロセスに集中できるようにすることです。 この章では、最初の例を実行します。

Visual Studio Code Primer

準備ができていないなら、好機を開くドアをノックすることなんてできない。 / ブルーノ・マーズ

この本で紹介されている遊び場のセットアップは、コードを書くことに慣れている人にとっては かなり標準的なものです。また、「ブロックを与えられた新しい子供」のような感じが少しあります。 クールな子供だけがブロックを使用します。 使用するスタックまたは環境は、次のもので構成されます。

基本的には、これで全部です。

Windows、Mac、Linuxのいずれを使用しているかは関係ありません。 XXのすべての異なる部分はどこでも実行できるように作られています。 Visual Studio Codeをインストールするには、https://code.visualstudio.com/にアクセスする必要があります。

ページの右上にあるダウンロードボタンをクリックします。 ボタンをクリックすると、図1-1に示すように、 コンピュータパッケージごとに1つずつ、さまざまなパッケージのオプションが表示されます。

執筆時点では、現在のバージョンは1.40ですが、新しいバージョンの方が優れているだけです。

インストーラーを実行してVisual Studio Codeを初めて開くと、図1-2のような画面が表示されます。

2番目のステップは、Javaがまだインストールされていない場合はインストールすることです。 OpenJDK Webサイト(https://jdk.java.net/)にアクセスしてzipファイルをダウンロードするか、 Oracle Webサイトにアクセスして、ご使用のマシン用のすぐに使用できるインストーラーをダウンロードできます(図1-3および 図1-4)。 具体的には、https://www.oracle.com/technetwork/java/javase/downloads/index.htmlにアクセスできます。


インストーラーを最後まで実行し、実行中に別のインストーラーを開こうとしても停止しないでください。 Javaは開発キットであるため、適切にインストールされていることを確認するための特別なアプリケーションは付属していません。 そのため、Javaのインストールが完了したら、Visual Studio Codeでターミナルを開くことで簡単に確認できます。 Javaのバージョンを確認してください。

Ctrl + Shift + @を押してVisual Studio Code内でターミナルを開くか、 図1-5に示すようにメニューからターミナルを開くことができます。

これにより、通常はエディターの下部にある小さなタブがポップアップします(図1-6を参照)。

次に、ターミナル内で次のコマンドを入力します

java -version
    

図1-7は、OpenJDKバージョンをインストールした場合に期待されるバージョンの出力を示しています。

Javaバージョン自体は重要ではないことに注意してください。 8から14までのすべてのバージョンが機能すると予想されます。 さて、楽観的にしましょう。物事は予見可能な将来にも機能するはずです。

すべての設定が完了したので、もう少しお待ちください。 Visual Studio Codeでは、記述したものはすべて単純なテキストとして処理されます。 基本的に、コンピュータでテキストの処理方法を指定しないと、何も実行されません。

Javaプラグインをインストールして、Javaファイルを理解するようVisual Studio Codeに伝えましょう。

エディターの左側のサイドバーにはかなりかわいいアイコンのセットがあり、 図1-8の下部にあるアイコンをクリックすると、Visual Studio Code Marketplaceにアクセスできます。

ここから、エディターにプラグインをインストールして、さまざまな方法でプラグインを拡張できます。 この本ではプラグインを多用し、他の状況で再利用および拡張できるセットアップを構築します。

ここでは、エディタ内からJavaサポートをインストールします。 これは、検索バーを使用して「java extension」を検索することで実行されます(図1-9を参照)。

図1-10に示すように、左側のプラグインを選択すると、右側のタブに詳細な説明が表示されます。

Java拡張機能は実際にはプラグインのコレクションであり、 Visual Studio Codeのドキュメントで利用可能な完全なエントリと説明があります。 https://code.visualstudio.com/docs/java/extensions

基本的に、Java Extension Packをインストールすると、次のプラグインがインストールされます。

これらのプラグインを使用すると、オートコンプリート、コードインスペクション、デバッグなど、 コードの記述に役立つすべてのタスクを実行できます。

この段階で、エディターをリロードすると、基本的にインストール手順は完了です。 楽しい開発環境が完成しました。 1ペニーもかかりません。 また、個人情報が漏洩することはほとんどありません。

Running Your First Java Application

エディターを開いた状態で、ファイルを作成し、その中にJavaコードを記述して、 エディター内から直接コードを実行する方法を見てみましょう。

Javaでコードを実行することは、通常、コンパイル手順を意味します。 ここで、Javaテキストファイルは、コンピューター(ここではJavaランタイム)が 実行できる形式に変換されます。

私たちのセットアップでは、これらのすべてのステップがVisual Studio Codeによって バックグラウンドで処理されています。

最初の例では、正常に動作するコンピュータプログラムの場合と同様に、挨拶を出力します。

まず、First.javaという名前のファイルを作成して、非常に基本的なJavaコードをいくつかドロップします。 コードはいくつかの基本的な挨拶テキストを出力します。 これは、セットアップが完全に機能していることを確認するのにも役立ちます。

リスト1-1の内容をJavaファイルに書きましょう。

リスト1-1
public class First {
  public static void main(String[] args) {
    System.out.println("Hello Java");
  }
}
    

このコードを入力した後(または提供されているサンプルを開いただけ)、 エディター自体でいくつかの動的な更新が行われていることがわかります。 図1-11に示すように、エディタはコードを強調表示し、さまざまなJava機能を入力に関連付けます。

コードのオートコンプリートは無料で含まれており、図1-12に示すように、Tabキーを使用してトリガーできます。

図1-13に示すように、キーボードの組み合わせCtrl +スペースバーを使用して、Javaドキュメントにアクセスすることもできます。

図1-14に示すように、メインのJavaメソッドの上部にある[実行]および[デバッグ]リンクにもすでに気付いているでしょう。 これらのリンクをクリックするか、キーボードショートカットでトリガーできます。 F5キーを押してデバッグし、Ctrl + F5キーを押してコードを実行します。

期待どおり、[実行]ボタンをクリックすると、エディター内でコードの実行がトリガーされ、 先ほど開いた[ターミナル]タブにテキストが表示されます(図1-15)。

Importing Core Java Packages

最終的には、外部クラスをロードする必要があります。 これは、エディターのインポート機能を使用して行うことができます。 これはこの段階ではささいなことのようですが、JavaでOpenCVを使用する場合、 特に多くのコードサンプルが簡潔にするためにインポートを記述しない場合は、 一部のパッケージを理解するのが困難です。

まず、現在の時刻を表示するコードを書きましょう。 これを行う最も簡単な方法は、リスト1-2に示すように、単にDateオブジェクトを使用することです。

リスト1-2
public class First {
  public static void main(String[] args) {
    Date d = new Date();
    System.out.println(String.format("hello java. it is %s", d));
  }
}
    

この本の印刷版ではすべてが正常に見えますが、Visual Studioでは、 エディターは正しくコンパイルできないコードの部分を正しく強調表示します。 図1-16では、コンパイラーがコードを理解できず、下線が引かれていることに注目してください。

クラスをインポートするには、赤の下線が引かれた日付の単語の横にある小さな電球をクリックします(図1-17)。

または、Ctrl + Shift + PまたはCommand + Shift + Pを押してVisual Studioコマンドメニューをトリガーし、 バーに「インポートの整理」と入力し始めることもできます(図1-18を参照)。

現在のファイルにインポートする必要がある正確なJavaクラス(ここではjava.util.Date)を選択できます(図1-19を参照)。

コードが修正されたので、再度実行する準備ができました。 同じ実行リンクをクリックするか、F5キーボードショートカットを使用して実行を開始します。

図1-20に示すように、実行出力が再びターミナルに表示されます。

Debugging Lesson

これはあなたの本なので、必要に応じて、デバッグに関するこのセクションをスキップして、 後で戻ってくることができます。 簡単なコードで作業しているときに、今すぐデバッグに関するこのセクションを追加することにしました。 この部分を事前に行うことで、OpenCVコードをよりよくマスターし、 各OpenCV計算ステップを素晴らしく簡単に実行できるようになるためです。

この部分を読み続けることにした場合は、すばらしいです! Visual Studio Code内からJavaコードをデバッグする方法を少しだけ見ていきます。

ご覧のとおり、コードを実行することはエディター内から非常に簡単でした。 Javaでは、このセットアップにより、無料のデバッガーも入手できます。 現在、WebページからJavaScriptコードを実行している場合、 ブラウザーで無料のデバッガーを入手することもできます。

デバッガはなぜそれほど重要なのですか? デバッガーを使用すると、コードの任意の時点で実行を停止し、ローカルで実行を検査して、 停止したコードの位置から動作することができます。

つまり、コードの実行を開始できるだけでなく、 ランタイムにどこにでも停止するように要求することもできます。 また、コードを開始する前に、コードの実行を停止する場所を選択する必要はありません。 たとえば、リアルタイムでビデオ処理を行っており、ある段階で、 カメラフィードを分析するコードが期待どおりにオブジェクトを見つけられない理由を知りたいとします。 その場合、フレームキャプチャループでコードの実行を停止し、画像をダンプするか、 分析を段階的に再実行して、モデルが間違っているか、画像が予期しないサイズもしくはカラーモードであるかを確認できます。

Java自体には、本当に役立つread-eval-print-loop(REPL)がありません。 REPLを使用すると、コードを1行ずつ実行できます。 REPLは、私のお気に入りの言語であるClojure、さらにはKotlinやもちろんPythonでも非常にうまく機能します。 Javaでは、行ごとに簡単に実行および追加することはできません。 これは、デバッグがVisual Studio Codeから非常に簡単になったので、ほとんど許されます。

十分に話して、デバッガを使用して基本的なデバッグタスクを実行する方法を見てみましょう。

Add a Breakpoint

ブレークポイントは、その名前が示すように、休憩を取る時点です。 行番号の左側でマウスを動かすと、エディタに赤い点として表示されます(図1-21)。

ブレークポイントを作成するには、実行を停止する行番号をクリックするだけです。 図のように、ブレークポイントはその行のコードが実行される前にコードを停止するため、 5行目にブレークポイントを追加しても、実行が停止したときにDateオブジェクトは表示されませんが、 6行目にドットを追加すると表示されます。

Execute the Code Step-by-Step

[デバッグ]リンクをクリックすると、デバッグモードで実行が開始され、 6行目に追加した最初のブレークポイントで停止します。 図1-22に示すように、エディターには少し異なるレイアウトが表示されます。

左側には、小さな[コールスタック]タブがあり、コードの実行が停止しています。 ここでは、メインメソッドのFirstクラスの6行目にあります(図1-23)。

また、Dateオブジェクトである変数dの値を確認したり、 プログラムに与えられた入力パラメーターがある場合はそれを確認したりすることもできます。 ここでは、空の配列が表示されています(図1-24)。

もちろん、図1-25に示すように、さまざまな矢印を操作して、拡張されたコンテンツを再帰的に表示し、 各変数のフィールドを1つずつ表示できます。

図1-25では、Dateオブジェクトにcdateという名前のフィールドがあり、 そのフィールドのすべてのフィールドを再帰的に確認できます。

Resume Execution

ブレークポイントから実行を再開または終了するには、 デバッグセッションの実行中にエディターの上部にあるランタイムバーで使用できる いくつかのオプションがあります(図1-26)。

左から右に、表1-1で説明されているアクションを実行できます。

ほとんどの場合に使用するアクションはステップオーバーで、 コードを1行ずつ実行します。 これにより、変更された変数と、新しく割り当てられた変数とその値の概要がわかります。 図1-27を参照してください。

次の行に移動してから次の行に移動すると、プログラムの実行が最終的に終了します。 理想的には、ターミナルウィンドウに適切なメッセージが表示されます。

Watch an Expression

エディタの左側にある[監視]タブに気づいたかもしれませんが、それが何のためにあるのかすでに疑問に思っているかもしれません。

左上の[変数]タブでは、オブジェクトとフィールドの直接の値を確認できますが、 [ウォッチ]タブでは、使用可能なすべてのオブジェクト(いわゆるウォッチ式)に関数呼び出しを追加できます。 ウォッチ式は、変数またはオブジェクトがインスタンス化される前に定義できます。

オブジェクトビジョンでは、直接レンダリングを実行しながら、 ウォッチ式を使用していくつかの副作用を生成したり、たとえば、入力画像を色付きから白黒に変えたり、 輪郭のみのバージョンをすばやく作成するための関数を作成したりできます。 もちろん、これらすべてをリアルタイムで行うこともできますが、 以降の章では低処理能力と小メモリという環境で作業するため、 余分なメモリと計算を最小限に抑えるために、コードの実行を一時停止し、 ウォッチ式への1回限りの呼び出しを使用します。

この最初の章では、監視式に単純な計算を追加します。 1つは副作用がなく、入力パラメーターに基づいて値を直接返すもので、 もう1つは副作用がログファイルに出力されるものです。

リスト1-3のコードサンプルから始めます。 これは、whileループでインクリメントされる値を単にループするだけです。 これを実行している間はコンピューターを焼き付けたくないので、 ループ内に短いスリープコールを追加して、実行ループに時間を与えます。

リスト1-3
public class Second {
  public static void main(final String[] args) throws Exception {
    int i = 0;
    while (true) {
      i++;
      Thread.sleep(500);
    }
  }
}
    

ウォッチ式に式i + 2を追加し、実際にまだブレークポイントを設定せずにデバッグセッションを開始します。

しばらく待ってから、6行目にクリックしてブレークポイントを追加し、 実行を開始する前にブレークポイントを設定したかのようにエディターが停止するのを確認します。

Visual Studioコードのレイアウトは、図1-28のようになります。

ブレークポイントをクリックして作成すると、実行が停止され、デバッグレイアウトが表示されます。 ご覧のとおり、変数iの値は既に7であり、i + 2の監視式は正しい値9を示しています。

次に、自分で試すことができるいくつかの演習について説明します。 2つの関数を実装して、2つのウォッチ式内で使用してみてください。

これには約5〜10分かかります。 幸運を! 完了したら、コードを読んでリスト1-4と比較できます。

リスト1-4
import java.io.BufferedWriter;
import java.io.FileWriter;
import java.io.Writer;
  
public class SecondFinal {
  static int myfunction1(final int i) {
    return 3 + i + 2;
  }
  
  final static String filePath = "my.log";
  
  static void myfunction2(final int i) {
    try (Writer writer = new BufferedWriter(new FileWriter(filePath))) {
      writer.write(String.format(">> %d\n", i));
    } catch (Exception e) {
    }
  }
  
  public static void main(final String[] args) throws Exception {
    int i = 0;
    while (true) {
      i++;
      Thread.sleep(500);
    }
  }
}
    

Visual Studio Codeのデバッグレイアウトの左側に、さまざまなウォッチ式が期待どおりに表示されます(図1-29)。

それはそれほど難しくなかったでしょう? 良いニュースは、イメージングライブラリOpenCVで作業するときにこれらの手法を再利用できることです。 たとえば、次のことができます。

ウォッチモードは、デバッグモードでコード実行を開始した後で追加できるので、必要なときにいつでも追加できます。

Change a Variable Value

完了する前にVisual Studio Codeでデバッグすることについて最後に知っておくべきことは、 [変数]タブから直接、変数の値をリアルタイムで変更できることです。

これを行うには、図1-30に示すように、変更する変数の値をダブルクリックします。

図1-31で、関連するウォッチ式がどのように再計算されているかを確認します。

イメージングおよびニューラルネットワークのコンテキストでは、 アルファ、ガンマ、コントラストなどを直接更新し、再計算された画像や検出をリアルタイムで実行できます。

Wrapping Things Up

私たちはデバッグに少し時間を費やしたので、 イメージングとオブジェクト検出のコンテキストで今見たテクニックを再利用することで、 どれだけのことができるかを想像してください。

たとえば、図1-32は、適切に設計されたデバッグレイアウトをフルユーザーインターフェイスとして使用して、 セピア変換の値を更新する方法を示しています。

このレイアウトでは、以下を確認できます。

Visual Code Studio内からどのように作業できるかがわかったところで、OpenCVの楽しみに移りましょう。