2016-08-17 8 views
12

セキュリティ関連のプロジェクトを1つ開発しています。顔が検出されたかどうかを確認する必要があります。 。検出された顔を見つける方法は、実際か偽であるか

すべてが完璧な作業ですが、私はSurfaceHolder.Callbackを実装し、その開いたカメラとカメラにされSurfaceViewを使用しています1人のメソッドの名前は、私が顔を検出この方法を使用してstartFaceDetectionである持っています。

参照

public class SurfaceViewPreview extends SurfaceView implements SurfaceHolder.Callback { 

    private SurfaceHolder mHolder; 
    private Camera mCamera; 

    public SurfaceViewPreview(Context context, AttributeSet attrs) { 
     super(context, attrs); 
     setWillNotDraw(false); 
     mHolder = getHolder(); 
     mHolder.addCallback(this); 
     mHolder.setType(SurfaceHolder.SURFACE_TYPE_PUSH_BUFFERS); 
    } 

    public void surfaceCreated(SurfaceHolder holder) { 
     try { 
      if (Camera.getNumberOfCameras() <= 0 || ContextCompat.checkSelfPermission(getContext(), Manifest.permission.WRITE_EXTERNAL_STORAGE) 
        != PackageManager.PERMISSION_GRANTED) 
       return; 

      mCamera = Camera.open(0); 
      mCamera.setPreviewDisplay(mHolder); 
     } catch (Exception e) { 
      e.printStackTrace(); 
      if (this.mCamera != null) { 
       this.mCamera.release(); 
       this.mCamera = null; 
      } 
     } 
    } 

    public void surfaceDestroyed(SurfaceHolder holder) { 
     if (Camera.getNumberOfCameras() <= 0 || ContextCompat.checkSelfPermission(getContext(), Manifest.permission.WRITE_EXTERNAL_STORAGE) 
       != PackageManager.PERMISSION_GRANTED) 
      return; 
     mCamera.stopPreview(); 
     mCamera.release(); 
     mCamera = null; 
    } 

    public void surfaceChanged(SurfaceHolder holder, int format, int w, int h) { 
     if (Camera.getNumberOfCameras() <= 0 || ContextCompat.checkSelfPermission(getContext(), Manifest.permission.WRITE_EXTERNAL_STORAGE) 
       != PackageManager.PERMISSION_GRANTED) 
      return; 

     mCamera.startPreview(); 
     mCamera.setFaceDetectionListener(new Camera.FaceDetectionListener() { 
      @Override 
      public void onFaceDetection(Camera.Face[] faces, Camera camera) { 
       // face is detected. 
      } 
     }); 

     mCamera.startFaceDetection(); 
    } 
} 

ためのコード、問題はどんな人間投稿する場合、私はカメラに示す場合は、人間として検出し、しかし、私は本物の人間の顔検出ではない偽のポスターの顔をしたいです。

私の要件を処理する方法があります。

1)定期的に10個の画像をキャプチャし、すべてのバリエーションが同じであることを確認すると、壁に取り付けられたポスターのような静的な顔があることを意味します。

2)検出された顔に本当の人間か偽の顔かを示す適切なアルゴリズムを書く。

3)人間の顔が本当に利用可能かどうかを示すライブラリがあります。

誰もが考えてください、どのように上記の問題(任意のコードは、私と共有して利用可能です)を提案してください、応答は高く評価されます!

どのようにして実際の偽の画像/ビデオフレームと結論づける適応学習方法を使用できますか。

+0

を助けましたあなたの "可能な方法"の?あなたはどのようにビデオから偽の顔を検出したいですか? – Micka

+0

本物の偽の画像/ビデオフレームと結論づけるための学習方法の適応方法 \t 私はビデオから検出したくない、カメラから検出したい、カメラを実行し続けて顔が検出されているかどうかを確認する –

+1

瞳孔と虹彩の検出を行い、分類器でそれを確認すると目を偽るのは難しい顔に(表情に。私はコードのいくつかの行を置くことがこの問題を解決するとは思わない。この目標に達するには、画像解析に関する多くの知識が必要です。 –

答えて

1

視差効果を使用できます。まず、2cm離れた2つの異なる場所から2枚の写真を撮ります。彼らは非常に異なっている場合、それが3Dフェイス

です*彼らは(ほぼ同じ)に非常に類似している場合は、画像が2Dであり、それは、ポスター

です*

を:あなたは画像を比較して見ることができました

これを行う別の方法は、カメラのフラッシュを使用することです。フラッシュは写真に少しの反射を引き起こし、これは人々が画面を迂回するためにビデオを使用することを防ぎ、多くのグレアが原因でカメラが顔を検出できないようにする。あなたがする必要があるだろうすべては、フラッシュを追加している(好ましくは、人々はそれを見ることができないので、100Hzのように点滅しているが、それは絵に表示されます)

私はこのことを願って、あなたがいずれかを試すんでした:)

+0

あなたはそのフラッシュのアイデアにいくつかの参照を追加することができます、私はそれがOPの方が良いと思う。 (と私:P) – Raskayu

+0

しかし、私のカメラは静的なので、2つの場所からどのようにキャプチャすることができます –

+0

@Hulk最小量でも回転できますか? – Paul

関連する問題