質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

ただいまの
回答率

90.76%

  • Java

    13174questions

    Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

  • Android

    6252questions

    Androidは、Google社が開発したスマートフォンやタブレットなど携帯端末向けのプラットフォームです。 カーネル・ミドルウェア・ユーザーインターフェイス・ウェブブラウザ・電話帳などのアプリケーションやソフトウェアをひとつにまとめて構成。 カーネル・ライブラリ・ランタイムはほとんどがC言語/C++、アプリケーションなどはJavaSEのサブセットとAndroid環境で書かれています。

  • Android Studio

    3491questions

    Android Studioは、 Google社によって開発された、 Androidのネイティブアプリケーション開発に特化した統合開発ツールです。

androidで、camera2で顔認識をしたいのにできません。助けてください。

受付中

回答 0

投稿 編集

  • 評価
  • クリップ 0
  • VIEW 495

giant

score -10

public class PlayerActivity extends Activity implements OnClickListener, ExoPlayer.EventListener
{
  //canvassは、画面にfacelineを書き込むためのやつ
  Canvas canvass;
  private AutoFitTextureView mTextureView;
  private CameraFaceLineTextureView mCameraTextureView;


  private TextureView.SurfaceTextureListener mSurfaceTextureListener
          = new TextureView.SurfaceTextureListener() {

    @Override
    public void onSurfaceTextureAvailable(SurfaceTexture surfaceTexture,
                                          int width, int height) {
    }

    @Override
    public void onSurfaceTextureSizeChanged(SurfaceTexture surfaceTexture,
                                            int width, int height) {
      configureTransform(width, height);
    }

    @Override
    public boolean onSurfaceTextureDestroyed(SurfaceTexture surfaceTexture) {
      return true;
    }

    @Override
    public void onSurfaceTextureUpdated(SurfaceTexture surfaceTexture) {
    }

  };



  private TextureView.SurfaceTextureListener mCameraSurfaceTextureListener
          = new TextureView.SurfaceTextureListener() {

    @Override
    public void onSurfaceTextureAvailable(SurfaceTexture surfaceTexture,
                                          int width, int height) {
    }

    @Override
    public void onSurfaceTextureSizeChanged(SurfaceTexture surfaceTexture,
                                            int width, int height) {
      configureTransform(width, height);
      canvass=mCameraTextureView.lockCanvas();
    }

    @Override
    public boolean onSurfaceTextureDestroyed(SurfaceTexture surfaceTexture) {
      return true;
    }

    @Override
    public void onSurfaceTextureUpdated(SurfaceTexture surfaceTexture) {
    }

  };


  private CameraDevice.StateCallback mStateCallback = new CameraDevice.StateCallback() {

    @Override
    public void onOpened(@NonNull CameraDevice cameraDevice) {

    }
  };


  private CaptureRequest.Builder mPreviewBuilder;

  public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);

    setContentView(R.layout.player_activity);
    mTextureView = (AutoFitTextureView) findViewById(R.id.texture);
    mCameraTextureView = (CameraFaceLineTextureView) findViewById(R.id.texture2);

    @Override
    public void onResume() {
      super.onResume();
        mTextureView.setSurfaceTextureListener(mSurfaceTextureListener);
        mCameraTextureView.setSurfaceTextureListener(mCameraSurfaceTextureListener);
    }


  private void startPreview() {

  //多分ここの作業が足りてなかった
    try {
      SurfaceTexture texture = mTextureView.getSurfaceTexture();
      assert texture != null;
      texture.setDefaultBufferSize(mPreviewSize.getWidth(), mPreviewSize.getHeight());
      mPreviewBuilder = mCameraDevice.createCaptureRequest(CameraDevice.TEMPLATE_PREVIEW);
      Surface previewSurface = new Surface(texture);
      mPreviewBuilder.addTarget(previewSurface);

      mCameraDevice.createCaptureSession(Collections.singletonList(previewSurface),
              new CameraCaptureSession.StateCallback() {

                @Override
                public void onClosed(CameraCaptureSession session) {
                }

                @Override
                public void onReady(CameraCaptureSession session) {
                }

                @Override
                public void onConfigured(@NonNull CameraCaptureSession session) {
                  mPreviewSession = session;
                }

              }, mBackgroundHandler);
    } catch (CameraAccessException e) {
    }
  }

  private void startPreview2() {

    //多分ここの作業が足りてなかった
    try {
      SurfaceTexture texture = mCameraTextureView.getSurfaceTexture();
      assert texture != null;
      texture2.setDefaultBufferSize(mPreviewSize.getWidth(), mPreviewSize.getHeight());
      mCameraPreviewBuilder = mCameraDevice.createCaptureRequest(CameraDevice.TEMPLATE_PREVIEW);
      Surface previewCameraSurface = new Surface(texture2);
      mCameraPreviewBuilder.addTarget(previewCameraSurface);

      mCameraDevice.createCaptureSession(Collections.singletonList(previewCameraSurface),
              new CameraCaptureSession.StateCallback() {

                @Override
                public void onClosed(CameraCaptureSession session) {
                }

                @Override
                public void onReady(CameraCaptureSession session) {
                }

                @Override
                public void onConfigured(@NonNull CameraCaptureSession session) {
                  mCameraPreviewSession = session;
                }

              }, mBackgroundHandler);
    } catch (CameraAccessException e) {
    }
  }


  private void startRecordingVideo() {
    if (null == mCameraDevice || !mTextureView.isAvailable() || null == mPreviewSize) {
      return;
    }
    try {
      SurfaceTexture texture = mTextureView.getSurfaceTexture();
      assert texture != null;
      texture.setDefaultBufferSize(mPreviewSize.getWidth(), mPreviewSize.getHeight());

      mPreviewBuilder = mCameraDevice.createCaptureRequest(CameraDevice.TEMPLATE_RECORD);
      List<Surface> surfaces = new ArrayList<>();

      // Set up Surface for the camera preview
      Surface previewSurface = new Surface(texture);
      surfaces.add(previewSurface);
      mPreviewBuilder.addTarget(previewSurface);

      // Set up Surface for the MediaRecorder
      Surface recorderSurface = mMediaRecorder.getSurface();
      surfaces.add(recorderSurface);
      mPreviewBuilder.addTarget(recorderSurface);

      // Start a capture session
      // Once the session starts, we can update the UI and start recording
      mCameraDevice.createCaptureSession(surfaces, new CameraCaptureSession.StateCallback() {

        @Override
        public void onConfigured(@NonNull CameraCaptureSession cameraCaptureSession) {

          mPreviewSession = cameraCaptureSession;
        }
      }, mBackgroundHandler);
    } catch (CameraAccessException | IOException e) {
    }

  }


  private CameraCaptureSession.CaptureCallback mCaptureCallback
          = new CameraCaptureSession.CaptureCallback() {

    private void process(CaptureResult result) {
      Integer mode = result.get(CaptureResult.STATISTICS_FACE_DETECT_MODE);
      Face[] faces = result.get(CaptureResult.STATISTICS_FACES);
      if (faces != null && mode != null)

        for(Face face: faces) {

          Rect r=faceRect2PixelRect(face);
          drawFace(r,Color.argb(255, 255, 0, 255));
        }
      Log.e("tag", "faces : " + faces.length + " , mode : " + mode);
    }

    @Override
    public void onCaptureProgressed(CameraCaptureSession session, CaptureRequest request,
                                    CaptureResult partialResult) {
      process(partialResult);
    }

    @Override
    public void onCaptureCompleted(CameraCaptureSession session, CaptureRequest request,
                                   TotalCaptureResult result) {
      process(result);
    }
  };


  private Paint paint = new Paint();
  public void drawFace(Rect rect1, int color) {

    try {
      if (canvass != null) {
        try {
          canvass.drawColor(Color.TRANSPARENT, PorterDuff.Mode.CLEAR);
          paint.setColor(color);
          canvass.drawRect(rect1,paint);
        } finally {
          mCameraTextureView.unlockCanvasAndPost(canvass);
        }
      }
    } catch (IllegalArgumentException e) {
    }
  }

  private Rect faceRect2PixelRect(Face face) {
    int w = mCameraTextureView.getWidth();
    int h = mCameraTextureView.getHeight();
    Rect r=face.getBounds();
    r.left = w * (-r.top + 1000) / 2000;
    r.right = w * (-r.bottom + 1000) / 2000;
    r.top = h * (-r.left + 1000) / 2000;
    r.bottom = h * (-r.right + 1000) / 2000;
    return r;
  }
}
  • 気になる質問をクリップする

    クリップした質問は、後からいつでもマイページで確認できます。

    またクリップした質問に回答があった際、通知やメールを受け取ることができます。

    クリップを取り消します

  • 良い質問の評価を上げる

    以下のような質問は評価を上げましょう

    • 質問内容が明確
    • 自分も答えを知りたい
    • 質問者以外のユーザにも役立つ

    評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

    teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

    • プログラミングに関係のない質問
    • やってほしいことだけを記載した丸投げの質問
    • 問題・課題が含まれていない質問
    • 意図的に内容が抹消された質問
    • 広告と受け取られるような投稿

    評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

質問への追記・修正の依頼

  • yona

    2017/09/15 17:08 編集

    丸投げはダメですね。お金を出して誰かに依頼したらいいと思いますよ。

    キャンセル

  • giant

    2017/09/15 17:25

    すみません。解決せず雑になっていました。コメントをまとめて修正します。

    キャンセル

  • 退会済みユーザー

    2017/09/16 17:22

    複数のユーザーから「やってほしいことだけを記載した丸投げの質問」という意見がありました
    「質問を編集する」ボタンから編集を行い、調査したこと・試したことを記入していただくと、回答が得られやすくなります。

まだ回答がついていません

15分調べてもわからないことは、teratailで質問しよう!

  • ただいまの回答率 90.76%
  • 質問をまとめることで、思考を整理して素早く解決
  • テンプレート機能で、簡単に質問をまとめられる

関連した質問

同じタグがついた質問を見る

  • Java

    13174questions

    Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

  • Android

    6252questions

    Androidは、Google社が開発したスマートフォンやタブレットなど携帯端末向けのプラットフォームです。 カーネル・ミドルウェア・ユーザーインターフェイス・ウェブブラウザ・電話帳などのアプリケーションやソフトウェアをひとつにまとめて構成。 カーネル・ライブラリ・ランタイムはほとんどがC言語/C++、アプリケーションなどはJavaSEのサブセットとAndroid環境で書かれています。

  • Android Studio

    3491questions

    Android Studioは、 Google社によって開発された、 Androidのネイティブアプリケーション開発に特化した統合開発ツールです。