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

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

新規登録して質問してみよう
ただいま回答率
85.48%
Java

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

Android

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

Android Studio

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

Q&A

1回答

413閲覧

Rect L=face.getBounds(); の L.top などの値の規則性がわからない。

giant

総合スコア132

Java

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

Android

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

Android Studio

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

0グッド

0クリップ

投稿2017/09/22 10:05

編集2017/09/26 05:21

Rect L=face.getBounds();の値のtop、left、right、bottomを取得して紙にまとめました。
規則性を見出そうとしたのですが、わかりませんでした。
タブレットを横にしてインカメラで顔を枠の位置に合わせて数値を取得しています。
規則性を教えていただけないでしょうか?
イメージ説明

java

1 public void drawFace(Face face) { 2 try { 3 canvas = surfaceHolder.lockCanvas(); 4 Paint paint = new Paint(); 5 try { 6 paint.setStyle(Paint.Style.STROKE); 7 Rect L=face.getBounds(); 8 canvas.drawColor(Color.TRANSPARENT, PorterDuff.Mode.CLEAR); 9 paint.setColor(Color.GRAY); 10 11//画面の左上、左下、右上、右下、中央(小、中、大)それぞれの場所に顔を置いた場合に、取得した数値を下のログで出力して、紙にまとめました。 12 Log.e(TAG,"L.top"+L.top); 13 Log.e(TAG,"L.left"+L.left); 14 Log.e(TAG,"L.right"+L.right); 15 Log.e(TAG,"L.bottom"+L.bottom); 16 17 canvas.drawRect(L,paint); 18 } finally { 19 surfaceHolder.unlockCanvasAndPost(canvas); 20 } 21 } catch (IllegalArgumentException e) { 22 Log.w(TAG, e.toString()); 23 } 24 }

java

1//いろんなサンプルをみて試して見たのですがダメでした。 2@Override 3 public void surfaceChanged(SurfaceHolder holder, int format, int width, int height) { 4 screen_width = width; 5 screen_height = height; 6 Log.e(TAG, "surfaceChanged"); 7 } 8 9 public void drawFace(Face face) { 10 try { 11 canvas = surfaceHolder.lockCanvas(); 12 13 Paint paint = new Paint(); 14 15 try { 16 paint.setStyle(Paint.Style.STROKE); 17 Rect L=face.getBounds(); 18 canvas.drawColor(Color.TRANSPARENT, PorterDuff.Mode.CLEAR); 19 paint.setColor(Color.GRAY); 20 21 L=faceRect2PixelRect(L); 22 23 24 //変換 25 Matrix matrix = new Matrix(); 26// スケールの算出 27 matrix.postScale(screen_width / 2000f, screen_height / 2000f); 28// 座標の移動 29 matrix.postTranslate(screen_width / 2f, screen_height / 2f); 30// Canvas の保存 31 int saveCount = canvas.save(); 32// Matrix を適用 33 canvas.concat(matrix); 34// 描画 35 36 37 38 39 // 検出した顔を中心に矩形と認識精度を描画 40 float x = (L.right + L.left) / 2; 41 float y = (L.top + L.bottom) / 2; 42 String score = String.valueOf(face.getScore()); 43 canvas.drawText(score, x, y, paint); 44 45 canvas.drawRect(L, paint); 46 47// リストア//これ以降はcanvasを使えない 48 canvas.restoreToCount(saveCount); 49 50 51 } finally { 52 surfaceHolder.unlockCanvasAndPost(canvas); 53 } 54 55 } catch (IllegalArgumentException e) { 56 Log.w(TAG, e.toString()); 57 } 58 } 59 private Rect faceRect2PixelRect(Rect L) { 60 61 Rect rectss = new Rect(); 62 63 64// // フロントカメラなので左右反転、portraitなので座標軸反転 65// rectss.left = screen_width * (-L.top + 1000) / 2000; 66// rectss.right = screen_width * (-L.bottom + 1000) / 2000; 67// rectss.top = screen_height * (-L.left + 1000) / 2000; 68// rectss.bottom = screen_height * (-L.right + 1000) / 2000; 69 70 // フロントカメラなので左右反転、portraitなので座標軸反転してないようにできてる? 71 rectss.left = screen_width * (-L.right + 1000) / 2000; 72 rectss.right = screen_width * (-L.left + 1000) / 2000; 73 rectss.top = screen_height * (-L.top + 1000) / 2000; 74 rectss.bottom = screen_height * (-L.bottom + 1000) / 2000; 75 76 return rectss; 77 } 78

気になる質問をクリップする

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

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

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

単に各辺の座標(上下はy座標、左右はx座標)を表しているはずですが。
一部対応が間違っているか、画面回転などが起きていませんか?

投稿2017/09/23 04:39

swordone

総合スコア20651

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

giant

2017/09/23 04:42

faceをMatrixを使って変換することで、画面の左上が0,0だったものを画面の中心が0,0になるように変更ししました。 フロントカメラを使っているため左右を反転させて表示、またタブレットを横向きに使っているので取得データを-90度して画面に書き出すことや様々な角度も試したのですが 、顔枠の位置が規則的に動かず、縦に顔を移動した時は斜め上に枠が動き横に移動しても枠の位置は変わらないという謎の動きをしています。
giant

2017/09/23 04:43

ただ人数が増えると枠の数は増えます。それと顔を近づけると枠は大きくなり、遠ざけると小さくなります。
giant

2017/09/23 04:45

自分がデータから書き出した写真では、左上のbottomは255、右上は229、左下は-69で、右下が391という数値になっていてなぜなのかが全くわかりません。
giant

2017/09/23 10:06

Face[] faces = result.get(CaptureResult.STATISTICS_FACES); for (Face face : faces) { このfaceを使っていることは間違えていないでしょうか?
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

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

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問