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
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2017/09/23 04:42
2017/09/23 04:43
2017/09/23 04:45
2017/09/23 10:06