Watson Visual Recognitionの顔検出機能を用いて、人の全身画像から顔部分のみの画像に加工してみた

## はじめに
Watson Visual RecognitionのDetect Faceという顔検出機能を使うと、人の年齢、性別、画像における顔の位置を読み取ることができます。
今回は、Detect Faceという顔検出機能を使って人の画像から顔の位置を検出し、顔部分のみの画像に加工するというコードをJavaで実装しました。


## Javaの実行環境構築
1. JDKのインストール  
JDKのインストールは下記URLから行います。  
http://www.oracle.com/technetwork/java/javase/downloads/index.html  

　インストール方法は、下記URLを参考にしてください。
http://qiita.com/hiesiea/items/54e49dabfb5606edb54d#2-jdk%E3%81%AE%E3%82%A4%E3%83%B3%E3%82%B9%E3%83%88%E3%83%BC%E3%83%AB
　　
2. eclipseのインストール
eclipseのインストールは下記URLから行います。 
http://www.eclipse.org/downloads/  

　インストール方法は、下記URLを参考にしてください。
http://qiita.com/hiesiea/items/54e49dabfb5606edb54d#3-eclipse%E3%81%AE%E3%82%A4%E3%83%B3%E3%82%B9%E3%83%88%E3%83%BC%E3%83%AB
　　
3. Maven projectの作成
eclipseの「New」→「Project」→「Maven Project」を作成します。
![maven1.png](https://qiita-image-store.s3.amazonaws.com/0/185050/604984fb-4bb5-00b6-2918-45461ae66789.png)

## コードの入手、設定
1. コードのダウンロード
下記のURLから、コードをダウンロードします。  
https://github.com/takana-at/VisualRecognition-training  
ダウンロードしたら、コードを展開します。  
　　
2. コードの配置  
sample.appプロジェクトに下記クラスをコピーします。  
　・DetectFaces.java  
　・DetectFacesThread.java  
　・TrainingDefinition.java  



## Visual Recognitionの顔検出機能の実装
### Visual Recognitionサービスの作成
1. Bluemix上でVisual Recognitionのサービスを作成します。  
下記URLからBluemixにログインし、「カタログ」→「Watson」→「Visual Recognition」サービスを作成します。  
https://console.bluemix.net/  

2.　Visual Recognitionのサービスを作成したら、「サービス資格情報」→「Credentials-1」から、{api_key}を確認し、メモしておきます。  
![visual_recognition1.png](https://qiita-image-store.s3.amazonaws.com/0/185050/9d230951-9c49-e420-b093-89cdf285de9f.png)

### Javaのコードを実行する  
今回は人の画像を、顔部分だけ切り取って保存するコードである DetectFaces.javaを実行します。  
1. DetectFacesThread.javaのコードを変更します。
このクラスのコードの{api_key}を先ほどメモしたapi_keyに変更します。

2.　顔検出したい画像を配置します。
画像は、project直下に「trainImage」フォルダを作成し、「trainImage」フォルダ内に「画像ID名」のフォルダを作成し、「画像ID名」のフォルダに画像を配置してください。
この画像IDは、人物ごとに振り分けるために使用していますので、同一人物は同じ画像ID名のフォルダ内に配置してください。

```
PROJECTNAME
|-trainImage
   |-IMGID_NAME
      |-IMG  
      |-IMG
```

たとえば、下記のように「femaleA」という画像ID名のフォルダに、「m010462.jpg」、「m010469.jpg」の画像を格納します。

![reface1.png](https://qiita-image-store.s3.amazonaws.com/0/185050/d7da86f1-7db1-2000-f0fc-57fb7401d83a.png)

※今回使用した画像
・https://model.foto.ne.jp/free/product_info.php/cPath/24_252_256/products_id/300378
・https://model.foto.ne.jp/free/product_info.php/cPath/24_252_256/products_id/302141
  

3.　引数には、下記を入れて実装します。
  「./trainImage」
![DetectFaces2.png](https://qiita-image-store.s3.amazonaws.com/0/185050/01806334-f726-bd18-c540-8f56c4bc8d6e.png)

4.　実行結果は以下のようになります。
![face2.png](https://qiita-image-store.s3.amazonaws.com/0/185050/96d0747f-2bb8-f6fe-a2c1-df72d6554e59.png)


5.　実行後は、プロジェクト直下にfaceImageフォルダに画像のIDのフォルダが作成され、その画像IDフォルダに画像が保存されます。

![reface2.png](https://qiita-image-store.s3.amazonaws.com/0/185050/9b4516e8-48aa-e0ee-0575-557fc5bce892.png)


6.　このfaceImage配下の画像は、trainImage配下の画像を顔部分だけ抽出し、リネームし、保存した画像になります。
【trainImage/female/m010462.jpg】
<img width="250px" alt="m010462.jpg" src="https://qiita-image-store.s3.amazonaws.com/0/185050/22f99709-12e1-5bc8-b49b-e9de72f0d778.jpeg">
　　　　　　　↓
【faceImage/female/m010462.jpg_face.jpg】
　　　<img width="160px" alt="m010462.jpg_face.jpg" src="https://qiita-image-store.s3.amazonaws.com/0/185050/79344e4f-219f-3572-5a21-f804bed52274.jpeg">