ポイント
Webでリアルタイム顔認識を動かしてみる
  Webで簡単に最新のDeepLearningによるWebカメラ+リアルタイム顔認識を試すための記事
- 
	Point 1FaceApi.jsを試用FaceApi.jsはTensorFlowを利用した学習済みネットワークによる顔認識ライブラリです.JavaScriptでクライアントサイドのブラウザ内で完結し、GPU等は特別必要なく10fpsほどの処理を行います
- 
	Point 2Webカメラを使用Webカメラの動画を使用して、許可をもらった上で顔認識をします.
- 
	Point 3複数人の顔認識を描く顔のパーツ付きで実現複数人の顔を検出し顔のパーツを頂上表示. 各点の座標を取得可能です.
 
  
  
  ステップ概要
Webでリアルタイム顔認識を動かしてみる
	   何よりもまず顔認識のサンプルコードを準備します.
	 
	 
	 
	 
	 
       
	   Pythonを使って簡易的なWebサーバを立てます
	 
	 
	 
	 
	 
       
	   実行して実際にWebカメラによるリアルタイム顔認識を確認します
	 
	 
	 
	 
	 
       
	   カメラの整備や初期化などコード全体の解説
	 
	 
	 
	 
	 
       
	   顔認識を実行している箇所に関して解説
	 
	 
	 
	 
	 
       
	   結果表示を行なっている箇所の解説
	 
	 
	 
       Step
 
		  顔認識プログラムを準備
		  
		
		    次にプログラムを用意し、動かすことを優先します.全体の解説は追って行います.
以下のようなフォルダの構造になるように次のファイルを置いてください.
    
続いて各ファイルの中身です.
まず,face-api-sample.htmlは以下のコードとなります.
  
また、jsonとshard1のファイルに関しては下記のレポジトリのパスより取得ください.
  
    
    
    
    
    
    
    
      
  
libフォルダにあるface-api.min.jsに関しては下記より取得ください.
  以下のようなフォルダの構造になるように次のファイルを置いてください.
Folder : 顔認識プログラムのフォルダ
 face-api-sample.html
 face_landmark_68_model-shard1
 face_landmark_68_model-weights_manifest.json
 face_landmark_68_tiny_model-shard1
 face_landmark_68_tiny_model-weights_manifest.json
 tiny_face_detector_model-shard1
 tiny_face_detector_model-weights_manifest.json
 lib/
 face-api.min.js
まず,face-api-sample.htmlは以下のコードとなります.
HTML : FaceApi.jsによるリアルタイムWebカメラ顔認識
  face-api-sample.js
  
    
<html>
    <head>
        <script src="./lib/face-api.min.js"></script>
        <script type="text/javascript" src="https://code.jquery.com/jquery-2.1.1.min.js"></script>
    </head>
    <body>
        <div  style="position: relative">
            <video id="video" onloadedmetadata="onPlay(this)"  muted autoplay width="640" height="480"></video>
            <canvas id="facecanvas" style="  position: absolute;  top: 0; left: 0;" width="640" height="480"></canvas>
        </div>
        <script>
	const canvas = document.getElementById( 'facecanvas' );
	const videoEl = document.getElementById( 'video' );
	const inputSize = 224;
	const scoreThreshold = 0.5;
	const options = new faceapi.TinyFaceDetectorOptions({ inputSize, scoreThreshold });
	    
	async function onPlay()
	{
            if(videoEl.paused || videoEl.ended || !faceapi.nets.tinyFaceDetector.params)
                return setTimeout(() => onPlay())
	    
            const result = await faceapi.detectSingleFace(videoEl, options).withFaceLandmarks()
            if (result) {
                const dims = faceapi.matchDimensions(canvas, videoEl, true)
                const resizedResult = faceapi.resizeResults(result, dims)
                faceapi.draw.drawDetections(canvas, resizedResult)
                faceapi.draw.drawFaceLandmarks(canvas, resizedResult)
            }
            setTimeout(() => onPlay())
  	};
	    
        async function run(){
            await faceapi.nets.tinyFaceDetector.load('/')
            await faceapi.loadFaceLandmarkModel('/')
	    const stream = await navigator.mediaDevices.getUserMedia({ video: {} })
	    videoEl.srcObject = stream;
        }
      	$(document).ready(function() {
            run();
        });
	    
        </script>
    </body>
</html>
    
  
	jsonファイルやshard1のファイル
      
      
	リンク
      
    
	face-api.min.js
      
      
	リンク
      
    
 
	    


 










