{"id":485,"date":"2022-11-21T09:04:11","date_gmt":"2022-09-03T09:29:54","guid":{"rendered":"https:\/\/www.silicloud.com\/ja\/blog\/index.php\/2023\/11\/30\/%e3%82%a2%e3%83%b3%e3%83%89%e3%83%ad%e3%82%a4%e3%83%89%e3%81%ae%e9%a1%94%e6%a4%9c%e5%87%ba\/"},"modified":"2025-07-31T23:56:55","modified_gmt":"2025-07-31T14:56:55","slug":"%e3%82%a2%e3%83%b3%e3%83%89%e3%83%ad%e3%82%a4%e3%83%89%e3%81%ae%e9%a1%94%e6%a4%9c%e5%87%ba","status":"publish","type":"post","link":"https:\/\/www.silicloud.com\/ja\/blog\/%e3%82%a2%e3%83%b3%e3%83%89%e3%83%ad%e3%82%a4%e3%83%89%e3%81%ae%e9%a1%94%e6%a4%9c%e5%87%ba\/","title":{"rendered":"\u30a2\u30f3\u30c9\u30ed\u30a4\u30c9\u306e\u9854\u691c\u51fa"},"content":{"rendered":"<p>Google Play \u30b5\u30fc\u30d3\u30b9 7.8 \u306e\u30ea\u30ea\u30fc\u30b9\u306b\u3088\u308a\u3001Google \u306f Mobile Vision API \u3092\u5c0e\u5165\u3057\u3001\u9854\u691c\u51fa\u3001\u30d0\u30fc\u30b3\u30fc\u30c9\u691c\u51fa\u3001\u30c6\u30ad\u30b9\u30c8\u691c\u51fa\u304c\u53ef\u80fd\u306b\u306a\u308a\u307e\u3057\u305f\u3002\u3053\u306e\u30c1\u30e5\u30fc\u30c8\u30ea\u30a2\u30eb\u3067\u306f\u3001Android \u306e\u9854\u691c\u51fa\u30a2\u30d7\u30ea\u3092\u958b\u767a\u3057\u3001\u753b\u50cf\u4e2d\u306e\u4eba\u9593\u306e\u9854\u3092\u691c\u51fa\u3059\u308b\u3053\u3068\u304c\u3067\u304d\u307e\u3059\u3002<\/p>\n<h3>\u30a2\u30f3\u30c9\u30ed\u30a4\u30c9\u306e\u9854\u691c\u51fa<\/h3>\n<p>\u30a2\u30f3\u30c9\u30ed\u30a4\u30c9\u306e\u9854\u691c\u51faAPI\u306f\u3001\u76ee\u3001\u9f3b\u3001\u8033\u3001\u982c\u3001\u53e3\u306a\u3069\u306e\u30e9\u30f3\u30c9\u30de\u30fc\u30af\u3092\u4f7f\u7528\u3057\u3066\u5199\u771f\u3084\u52d5\u753b\u5185\u306e\u9854\u3092\u8ffd\u8de1\u3057\u307e\u3059\u3002\u500b\u3005\u306e\u7279\u5fb4\u3092\u691c\u51fa\u3059\u308b\u306e\u3067\u306f\u306a\u304f\u3001API\u306f\u4e00\u5ea6\u306b\u9854\u3092\u691c\u51fa\u3057\u3001\u5b9a\u7fa9\u3055\u308c\u3066\u3044\u308c\u3070\u30e9\u30f3\u30c9\u30de\u30fc\u30af\u3068\u5206\u985e\u3082\u691c\u51fa\u3057\u307e\u3059\u3002\u3055\u3089\u306b\u3001API\u306f\u3055\u307e\u3056\u307e\u306a\u89d2\u5ea6\u3067\u9854\u3092\u691c\u51fa\u3059\u308b\u3053\u3068\u3082\u3067\u304d\u307e\u3059\u3002<\/p>\n<h3>\u30a2\u30f3\u30c9\u30ed\u30a4\u30c9\u306e\u9854\u691c\u51fa &#8211; \u9854\u306e\u7279\u5fb4\u70b9<\/h3>\n<p>\u30e9\u30f3\u30c9\u30de\u30fc\u30af\u306f\u3001\u9854\u306e\u4e2d\u3067\u8208\u5473\u306e\u3042\u308b\u30dd\u30a4\u30f3\u30c8\u3067\u3059\u3002\u5de6\u76ee\u3001\u53f3\u76ee\u3001\u9f3b\u306e\u57fa\u90e8\u306f\u3059\u3079\u3066\u30e9\u30f3\u30c9\u30de\u30fc\u30af\u306e\u4f8b\u3067\u3059\u3002\u4ee5\u4e0b\u306f\u3001\u73fe\u5728\u306eAPI\u3067\u898b\u3064\u3051\u308b\u3053\u3068\u304c\u3067\u304d\u308b\u30e9\u30f3\u30c9\u30de\u30fc\u30af\u306e\u4e00\u90e8\u3067\u3059\u3002<\/p>\n<ol>\n<li style=\"list-style-type: none;\">\n<ol>\u5de6\u53f3\u306e\u76ee<\/ol>\n<\/li>\n<\/ol>\n<p>&nbsp;<\/p>\n<ol>\n<li style=\"list-style-type: none;\">\n<ol>\u5de6\u53f3\u306e\u8033<\/ol>\n<\/li>\n<\/ol>\n<p>&nbsp;<\/p>\n<ol>\n<li style=\"list-style-type: none;\">\n<ol>\u5de6\u53f3\u306e\u8033\u306e\u5148<\/ol>\n<\/li>\n<\/ol>\n<p>&nbsp;<\/p>\n<ol>\n<li style=\"list-style-type: none;\">\n<ol>\u9f3b\u306e\u6839\u5143<\/ol>\n<\/li>\n<\/ol>\n<p>&nbsp;<\/p>\n<ol>\n<li style=\"list-style-type: none;\">\n<ol>\u5de6\u53f3\u306e\u982c<\/ol>\n<\/li>\n<\/ol>\n<p>&nbsp;<\/p>\n<ol>\n<li style=\"list-style-type: none;\">\n<ol>\u53e3\u5143\u306e\u5de6\u53f3\u306e\u89d2<\/ol>\n<\/li>\n<\/ol>\n<p>&nbsp;<\/p>\n<ol>\u53e3\u5143\u306e\u6839\u5143<\/ol>\n<p>\u300c\u5de6\u300d\u3068\u300c\u53f3\u300d\u306f\u3001\u4e3b\u4f53\u306b\u5bfe\u3057\u3066\u76f8\u5bfe\u7684\u306b\u4f7f\u7528\u3055\u308c\u3066\u3044\u307e\u3059\u3002\u4f8b\u3048\u3070\u3001LEFT_EYE\u30de\u30fc\u30ab\u30fc\u306f\u3001\u753b\u50cf\u3092\u8868\u793a\u3057\u305f\u969b\u306b\u5de6\u5074\u306b\u3042\u308b\u76ee\u3067\u306f\u306a\u304f\u3001\u4e3b\u4f53\u306e\u5de6\u76ee\u3092\u610f\u5473\u3057\u307e\u3059\u3002<\/p>\n<h3>\u5206\u985e<\/h3>\n<p>\u5206\u985e\u306f\u7279\u5b9a\u306e\u9854\u306e\u7279\u5fb4\u304c\u5b58\u5728\u3059\u308b\u304b\u3069\u3046\u304b\u3092\u5224\u65ad\u3057\u307e\u3059\u3002\u73fe\u5728\u3001Android\u306eFace API\u306f2\u3064\u306e\u5206\u985e\u3092\u30b5\u30dd\u30fc\u30c8\u3057\u3066\u3044\u307e\u3059\u3002<\/p>\n<ul class=\"post-ul\">\n<li>eyes open : getIsLeftEyeOpenProbability() and getIsRightEyeOpenProbability() method are used.<\/li>\n<li>smiling : getIsSmilingProbability() method is used.<\/li>\n<\/ul>\n<h3>\u9854\u306e\u5411\u304d (Kao no muki)<\/h3>\n<p>\u9854\u306e\u5411\u304d\u306f\u3001\u30aa\u30a4\u30e9\u30fc\u89d2\u3092\u4f7f\u7528\u3057\u3066\u6c7a\u5b9a\u3055\u308c\u307e\u3059\u3002\u3053\u308c\u306f\u3001\u9854\u306eX\u8ef8\u3001Y\u8ef8\u3001\u304a\u3088\u3073Z\u8ef8\u306e\u56de\u8ee2\u89d2\u5ea6\u3092\u6307\u3057\u307e\u3059\u3002- \u30aa\u30a4\u30e9\u30fcY\u306f\u3001\u9854\u304c\u5de6\u3092\u5411\u3044\u3066\u3044\u308b\u306e\u304b\u53f3\u3092\u5411\u3044\u3066\u3044\u308b\u306e\u304b\u3092\u793a\u3057\u307e\u3059\u3002<\/p>\n<ul class=\"post-ul\">\n<li>Euler Z tells us if the face is rotated\/slated<\/li>\n<li>Euler X tells us if the face is looking up or down (currently not supported)<br \/>\nNote: If a probability can\u2019t be computed, it\u2019s set to -1. Let\u2019s jump into the business end of this tutorial. Our application shall contain a few sample images along with the functionality to capture your own image. Note: The API supports face detection only. Face Recognition isn\u2019t available with the current Mobile Vision API.<\/li>\n<\/ul>\n<h3>\u30a2\u30f3\u30c9\u30ed\u30a4\u30c9\u306e\u9854\u691c\u51fa\u306e\u4f8b\u306e\u30d7\u30ed\u30b8\u30a7\u30af\u30c8\u69cb\u9020<\/h3>\n<div><img decoding=\"async\" class=\"post-images\" title=\"\" src=\"https:\/\/cdn.silicloud.com\/blog-img\/blog\/img\/65649035daa94e2bdf7bddb4\/14-0.png\" alt=\"android face detection api project structure\" \/><\/div>\n<h3>\u30a2\u30f3\u30c9\u30ed\u30a4\u30c9\u9854\u691c\u51fa\u306e\u30b3\u30fc\u30c9<\/h3>\n<p>\u3042\u306a\u305f\u306e\u30a2\u30d7\u30ea\u30b1\u30fc\u30b7\u30e7\u30f3\u306ebuild.gradle\u30d5\u30a1\u30a4\u30eb\u5185\u306b\u3001\u6b21\u306e\u4f9d\u5b58\u95a2\u4fc2\u3092\u8ffd\u52a0\u3057\u3066\u304f\u3060\u3055\u3044\u3002<\/p>\n<pre class=\"post-pre\"><code>compile 'com.google.android.gms:play-services-vision:11.0.4'\r\n<\/code><\/pre>\n<p>\u4ee5\u4e0b\u306e\u3088\u3046\u306b\u3001AndroidManifest.xml \u30d5\u30a1\u30a4\u30eb\u306e application \u30bf\u30b0\u306e\u5185\u90e8\u306b\u30e1\u30bf\u30c7\u30fc\u30bf\u3092\u8ffd\u52a0\u3057\u3066\u304f\u3060\u3055\u3044\u3002<\/p>\n<pre class=\"post-pre\"><code>&lt;meta-data\r\n            android:name=\"com.google.android.gms.vision.DEPENDENCIES\"\r\n            android:value=\"face\"\/&gt;\r\n<\/code><\/pre>\n<p>\u3053\u306e\u3053\u3068\u306b\u3088\u308a\u3001Vision\u30e9\u30a4\u30d6\u30e9\u30ea\u306b\u30a2\u30d7\u30ea\u30b1\u30fc\u30b7\u30e7\u30f3\u5185\u3067\u9854\u306e\u691c\u51fa\u3092\u3059\u308b\u4e88\u5b9a\u3067\u3042\u308b\u3053\u3068\u304c\u4f1d\u308f\u308a\u307e\u3059\u3002&#8221;AndroidManifest.xml&#8221; \u306e manifest \u30bf\u30b0\u5185\u306b\u3001\u30ab\u30e1\u30e9\u306e\u6a29\u9650\u306b\u95a2\u3059\u308b\u4ee5\u4e0b\u306e\u30d1\u30fc\u30df\u30c3\u30b7\u30e7\u30f3\u3092\u8ffd\u52a0\u3057\u3066\u304f\u3060\u3055\u3044\u3002<\/p>\n<pre class=\"post-pre\"><code>&lt;uses-feature\r\n        android:name=\"android.hardware.camera\"\r\n        android:required=\"true\"\/&gt;\r\n    &lt;uses-permission\r\n        android:name=\"android.permission.WRITE_EXTERNAL_STORAGE\"\/&gt;\r\n<\/code><\/pre>\n<p>\u4e0b\u8a18\u306factivity_main.xml\u30ec\u30a4\u30a2\u30a6\u30c8\u30d5\u30a1\u30a4\u30eb\u306e\u30b3\u30fc\u30c9\u3067\u3059\u3002<\/p>\n<pre class=\"post-pre\"><code>&lt;?xml version=\"1.0\" encoding=\"utf-8\"?&gt;\r\n\r\n&lt;ScrollView xmlns:android=\"https:\/\/schemas.android.com\/apk\/res\/android\"\r\n    xmlns:app=\"https:\/\/schemas.android.com\/apk\/res-auto\"\r\n    xmlns:tools=\"https:\/\/schemas.android.com\/tools\"\r\n    android:layout_width=\"match_parent\"\r\n    android:layout_height=\"match_parent\"&gt;\r\n\r\n    &lt;android.support.constraint.ConstraintLayout xmlns:app=\"https:\/\/schemas.android.com\/apk\/res-auto\"\r\n        xmlns:tools=\"https:\/\/schemas.android.com\/tools\"\r\n        android:layout_width=\"match_parent\"\r\n        android:layout_height=\"wrap_content\"\r\n        tools:context=\"com.scdev.facedetectionapi.MainActivity\"&gt;\r\n\r\n        &lt;ImageView\r\n            android:id=\"@+id\/imageView\"\r\n            android:layout_width=\"300dp\"\r\n            android:layout_height=\"300dp\"\r\n            android:layout_marginTop=\"8dp\"\r\n            android:src=\"@drawable\/sample_1\"\r\n            app:layout_constraintLeft_toLeftOf=\"parent\"\r\n            app:layout_constraintRight_toRightOf=\"parent\"\r\n            app:layout_constraintTop_toTopOf=\"parent\" \/&gt;\r\n\r\n        &lt;Button\r\n            android:id=\"@+id\/btnProcessNext\"\r\n            android:layout_width=\"wrap_content\"\r\n            android:layout_height=\"wrap_content\"\r\n            android:layout_marginTop=\"8dp\"\r\n            android:text=\"PROCESS NEXT\"\r\n            app:layout_constraintHorizontal_bias=\"0.501\"\r\n            app:layout_constraintLeft_toLeftOf=\"parent\"\r\n            app:layout_constraintRight_toRightOf=\"parent\"\r\n            app:layout_constraintTop_toBottomOf=\"@+id\/imageView\" \/&gt;\r\n\r\n        &lt;ImageView\r\n            android:id=\"@+id\/imgTakePic\"\r\n            android:layout_width=\"250dp\"\r\n            android:layout_height=\"250dp\"\r\n            android:layout_marginTop=\"8dp\"\r\n            app:layout_constraintLeft_toLeftOf=\"parent\"\r\n            app:layout_constraintRight_toRightOf=\"parent\"\r\n            app:layout_constraintTop_toBottomOf=\"@+id\/txtSampleDescription\"\r\n            app:srcCompat=\"@android:drawable\/ic_menu_camera\" \/&gt;\r\n\r\n        &lt;Button\r\n            android:id=\"@+id\/btnTakePicture\"\r\n            android:layout_width=\"wrap_content\"\r\n            android:layout_height=\"wrap_content\"\r\n            android:layout_marginTop=\"8dp\"\r\n            android:text=\"TAKE PICTURE\"\r\n            app:layout_constraintLeft_toLeftOf=\"parent\"\r\n            app:layout_constraintRight_toRightOf=\"parent\"\r\n            app:layout_constraintTop_toBottomOf=\"@+id\/imgTakePic\" \/&gt;\r\n\r\n        &lt;TextView\r\n            android:id=\"@+id\/txtSampleDescription\"\r\n            android:layout_width=\"match_parent\"\r\n            android:layout_height=\"wrap_content\"\r\n            android:layout_marginBottom=\"8dp\"\r\n            android:layout_marginTop=\"8dp\"\r\n            android:gravity=\"center\"\r\n            app:layout_constraintBottom_toTopOf=\"@+id\/txtTakePicture\"\r\n            app:layout_constraintLeft_toLeftOf=\"parent\"\r\n            app:layout_constraintRight_toRightOf=\"parent\"\r\n            app:layout_constraintTop_toBottomOf=\"@+id\/btnProcessNext\"\r\n            app:layout_constraintVertical_bias=\"0.0\" \/&gt;\r\n\r\n        &lt;TextView\r\n            android:id=\"@+id\/txtTakePicture\"\r\n            android:layout_width=\"wrap_content\"\r\n            android:layout_height=\"wrap_content\"\r\n            android:layout_marginTop=\"8dp\"\r\n            android:gravity=\"center\"\r\n            app:layout_constraintLeft_toLeftOf=\"parent\"\r\n            app:layout_constraintRight_toRightOf=\"parent\"\r\n            app:layout_constraintTop_toBottomOf=\"@+id\/btnTakePicture\" \/&gt;\r\n\r\n    &lt;\/android.support.constraint.ConstraintLayout&gt;\r\n\r\n&lt;\/ScrollView&gt;\r\n<\/code><\/pre>\n<p>\u79c1\u305f\u3061\u306f\u30012\u3064\u306eImageView\u3001TextView\u3001\u304a\u3088\u3073Button\u3092\u5b9a\u7fa9\u3057\u307e\u3057\u305f\u3002\u305d\u308c\u3089\u306e\u3046\u30611\u3064\u306f\u3001\u30b5\u30f3\u30d7\u30eb\u753b\u50cf\u3092\u30eb\u30fc\u30d7\u3057\u3066\u7d50\u679c\u3092\u8868\u793a\u3059\u308b\u305f\u3081\u306b\u4f7f\u7528\u3055\u308c\u307e\u3059\u3002\u3082\u30461\u3064\u306f\u3001\u30ab\u30e1\u30e9\u304b\u3089\u753b\u50cf\u3092\u30ad\u30e3\u30d7\u30c1\u30e3\u3059\u308b\u305f\u3081\u306b\u4f7f\u7528\u3055\u308c\u307e\u3059\u3002MainActivity.java\u30d5\u30a1\u30a4\u30eb\u306e\u30b3\u30fc\u30c9\u306f\u4ee5\u4e0b\u306e\u901a\u308a\u3067\u3059\u3002<\/p>\n<pre class=\"post-pre\"><code>package com.scdev.facedetectionapi;\r\n\r\nimport android.Manifest;\r\nimport android.content.Context;\r\nimport android.content.Intent;\r\nimport android.content.pm.PackageManager;\r\nimport android.graphics.Bitmap;\r\nimport android.graphics.BitmapFactory;\r\nimport android.graphics.Canvas;\r\nimport android.graphics.Color;\r\nimport android.graphics.Paint;\r\nimport android.net.Uri;\r\nimport android.os.Environment;\r\nimport android.provider.MediaStore;\r\nimport android.support.annotation.NonNull;\r\nimport android.support.v4.app.ActivityCompat;\r\nimport android.support.v7.app.AppCompatActivity;\r\nimport android.os.Bundle;\r\nimport android.util.SparseArray;\r\nimport android.view.View;\r\nimport android.widget.Button;\r\nimport android.widget.ImageView;\r\nimport android.widget.TextView;\r\nimport android.widget.Toast;\r\n\r\nimport com.google.android.gms.vision.Frame;\r\nimport com.google.android.gms.vision.face.Face;\r\nimport com.google.android.gms.vision.face.FaceDetector;\r\nimport com.google.android.gms.vision.face.Landmark;\r\n\r\nimport java.io.File;\r\nimport java.io.FileNotFoundException;\r\n\r\npublic class MainActivity extends AppCompatActivity implements View.OnClickListener {\r\n\r\n    ImageView imageView, imgTakePicture;\r\n    Button btnProcessNext, btnTakePicture;\r\n    TextView txtSampleDesc, txtTakenPicDesc;\r\n    private FaceDetector detector;\r\n    Bitmap editedBitmap;\r\n    int currentIndex = 0;\r\n    int[] imageArray;\r\n    private Uri imageUri;\r\n    private static final int REQUEST_WRITE_PERMISSION = 200;\r\n    private static final int CAMERA_REQUEST = 101;\r\n\r\n    private static final String SAVED_INSTANCE_URI = \"uri\";\r\n    private static final String SAVED_INSTANCE_BITMAP = \"bitmap\";\r\n\r\n    @Override\r\n    protected void onCreate(Bundle savedInstanceState) {\r\n        super.onCreate(savedInstanceState);\r\n        setContentView(R.layout.activity_main);\r\n\r\n        imageArray = new int[]{R.drawable.sample_1, R.drawable.sample_2, R.drawable.sample_3};\r\n        detector = new FaceDetector.Builder(getApplicationContext())\r\n                .setTrackingEnabled(false)\r\n                .setLandmarkType(FaceDetector.ALL_CLASSIFICATIONS)\r\n                .setClassificationType(FaceDetector.ALL_CLASSIFICATIONS)\r\n                .build();\r\n\r\n        initViews();\r\n\r\n    }\r\n\r\n    private void initViews() {\r\n        imageView = (ImageView) findViewById(R.id.imageView);\r\n        imgTakePicture = (ImageView) findViewById(R.id.imgTakePic);\r\n        btnProcessNext = (Button) findViewById(R.id.btnProcessNext);\r\n        btnTakePicture = (Button) findViewById(R.id.btnTakePicture);\r\n        txtSampleDesc = (TextView) findViewById(R.id.txtSampleDescription);\r\n        txtTakenPicDesc = (TextView) findViewById(R.id.txtTakePicture);\r\n\r\n        processImage(imageArray[currentIndex]);\r\n        currentIndex++;\r\n\r\n        btnProcessNext.setOnClickListener(this);\r\n        btnTakePicture.setOnClickListener(this);\r\n        imgTakePicture.setOnClickListener(this);\r\n    }\r\n\r\n    @Override\r\n    public void onClick(View v) {\r\n        switch (v.getId()) {\r\n            case R.id.btnProcessNext:\r\n                imageView.setImageResource(imageArray[currentIndex]);\r\n                processImage(imageArray[currentIndex]);\r\n                if (currentIndex == imageArray.length - 1)\r\n                    currentIndex = 0;\r\n                else\r\n                    currentIndex++;\r\n\r\n                break;\r\n\r\n            case R.id.btnTakePicture:\r\n                ActivityCompat.requestPermissions(MainActivity.this, new\r\n                        String[]{Manifest.permission.WRITE_EXTERNAL_STORAGE}, REQUEST_WRITE_PERMISSION);\r\n                break;\r\n\r\n            case R.id.imgTakePic:\r\n                ActivityCompat.requestPermissions(MainActivity.this, new\r\n                        String[]{Manifest.permission.WRITE_EXTERNAL_STORAGE}, REQUEST_WRITE_PERMISSION);\r\n                break;\r\n        }\r\n    }\r\n\r\n    @Override\r\n    public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) {\r\n        super.onRequestPermissionsResult(requestCode, permissions, grantResults);\r\n        switch (requestCode) {\r\n            case REQUEST_WRITE_PERMISSION:\r\n                if (grantResults.length &gt; 0 &amp;&amp; grantResults[0] == PackageManager.PERMISSION_GRANTED) {\r\n                    startCamera();\r\n                } else {\r\n                    Toast.makeText(getApplicationContext(), \"Permission Denied!\", Toast.LENGTH_SHORT).show();\r\n                }\r\n        }\r\n    }\r\n\r\n    @Override\r\n    protected void onActivityResult(int requestCode, int resultCode, Intent data) {\r\n        if (requestCode == CAMERA_REQUEST &amp;&amp; resultCode == RESULT_OK) {\r\n            launchMediaScanIntent();\r\n            try {\r\n                processCameraPicture();\r\n            } catch (Exception e) {\r\n                Toast.makeText(getApplicationContext(), \"Failed to load Image\", Toast.LENGTH_SHORT).show();\r\n            }\r\n        }\r\n    }\r\n\r\n    private void launchMediaScanIntent() {\r\n        Intent mediaScanIntent = new Intent(Intent.ACTION_MEDIA_SCANNER_SCAN_FILE);\r\n        mediaScanIntent.setData(imageUri);\r\n        this.sendBroadcast(mediaScanIntent);\r\n    }\r\n\r\n    private void startCamera() {\r\n        Intent intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);\r\n        File photo = new File(Environment.getExternalStorageDirectory(), \"photo.jpg\");\r\n        imageUri = Uri.fromFile(photo);\r\n        intent.putExtra(MediaStore.EXTRA_OUTPUT, imageUri);\r\n        startActivityForResult(intent, CAMERA_REQUEST);\r\n    }\r\n\r\n    @Override\r\n    protected void onSaveInstanceState(Bundle outState) {\r\n        if (imageUri != null) {\r\n            outState.putParcelable(SAVED_INSTANCE_BITMAP, editedBitmap);\r\n            outState.putString(SAVED_INSTANCE_URI, imageUri.toString());\r\n        }\r\n        super.onSaveInstanceState(outState);\r\n    }\r\n\r\n\r\n    private void processImage(int image) {\r\n\r\n        Bitmap bitmap = decodeBitmapImage(image);\r\n        if (detector.isOperational() &amp;&amp; bitmap != null) {\r\n            editedBitmap = Bitmap.createBitmap(bitmap.getWidth(), bitmap\r\n                    .getHeight(), bitmap.getConfig());\r\n            float scale = getResources().getDisplayMetrics().density;\r\n            Paint paint = new Paint(Paint.ANTI_ALIAS_FLAG);\r\n            paint.setColor(Color.GREEN);\r\n            paint.setTextSize((int) (16 * scale));\r\n            paint.setShadowLayer(1f, 0f, 1f, Color.WHITE);\r\n            paint.setStyle(Paint.Style.STROKE);\r\n            paint.setStrokeWidth(6f);\r\n            Canvas canvas = new Canvas(editedBitmap);\r\n            canvas.drawBitmap(bitmap, 0, 0, paint);\r\n            Frame frame = new Frame.Builder().setBitmap(editedBitmap).build();\r\n            SparseArray&lt;Face&gt; faces = detector.detect(frame);\r\n            txtSampleDesc.setText(null);\r\n\r\n            for (int index = 0; index &lt; faces.size(); ++index) {\r\n                Face face = faces.valueAt(index);\r\n                canvas.drawRect(\r\n                        face.getPosition().x,\r\n                        face.getPosition().y,\r\n                        face.getPosition().x + face.getWidth(),\r\n                        face.getPosition().y + face.getHeight(), paint);\r\n\r\n\r\n                canvas.drawText(\"Face \" + (index + 1), face.getPosition().x + face.getWidth(), face.getPosition().y + face.getHeight(), paint);\r\n\r\n                txtSampleDesc.setText(txtSampleDesc.getText() + \"FACE \" + (index + 1) + \"\\n\");\r\n                txtSampleDesc.setText(txtSampleDesc.getText() + \"Smile probability:\" + \" \" + face.getIsSmilingProbability() + \"\\n\");\r\n                txtSampleDesc.setText(txtSampleDesc.getText() + \"Left Eye Is Open Probability: \" + \" \" + face.getIsLeftEyeOpenProbability() + \"\\n\");\r\n                txtSampleDesc.setText(txtSampleDesc.getText() + \"Right Eye Is Open Probability: \" + \" \" + face.getIsRightEyeOpenProbability() + \"\\n\\n\");\r\n\r\n                for (Landmark landmark : face.getLandmarks()) {\r\n                    int cx = (int) (landmark.getPosition().x);\r\n                    int cy = (int) (landmark.getPosition().y);\r\n                    canvas.drawCircle(cx, cy, 8, paint);\r\n                }\r\n\r\n\r\n            }\r\n\r\n            if (faces.size() == 0) {\r\n                txtSampleDesc.setText(\"Scan Failed: Found nothing to scan\");\r\n            } else {\r\n                imageView.setImageBitmap(editedBitmap);\r\n                txtSampleDesc.setText(txtSampleDesc.getText() + \"No of Faces Detected: \" + \" \" + String.valueOf(faces.size()));\r\n            }\r\n        } else {\r\n            txtSampleDesc.setText(\"Could not set up the detector!\");\r\n        }\r\n    }\r\n\r\n    private Bitmap decodeBitmapImage(int image) {\r\n        int targetW = 300;\r\n        int targetH = 300;\r\n        BitmapFactory.Options bmOptions = new BitmapFactory.Options();\r\n        bmOptions.inJustDecodeBounds = true;\r\n\r\n        BitmapFactory.decodeResource(getResources(), image,\r\n                bmOptions);\r\n\r\n        int photoW = bmOptions.outWidth;\r\n        int photoH = bmOptions.outHeight;\r\n\r\n        int scaleFactor = Math.min(photoW \/ targetW, photoH \/ targetH);\r\n        bmOptions.inJustDecodeBounds = false;\r\n        bmOptions.inSampleSize = scaleFactor;\r\n\r\n        return BitmapFactory.decodeResource(getResources(), image,\r\n                bmOptions);\r\n    }\r\n\r\n    private void processCameraPicture() throws Exception {\r\n        Bitmap bitmap = decodeBitmapUri(this, imageUri);\r\n        if (detector.isOperational() &amp;&amp; bitmap != null) {\r\n            editedBitmap = Bitmap.createBitmap(bitmap.getWidth(), bitmap\r\n                    .getHeight(), bitmap.getConfig());\r\n            float scale = getResources().getDisplayMetrics().density;\r\n            Paint paint = new Paint(Paint.ANTI_ALIAS_FLAG);\r\n            paint.setColor(Color.GREEN);\r\n            paint.setTextSize((int) (16 * scale));\r\n            paint.setShadowLayer(1f, 0f, 1f, Color.WHITE);\r\n            paint.setStyle(Paint.Style.STROKE);\r\n            paint.setStrokeWidth(6f);\r\n            Canvas canvas = new Canvas(editedBitmap);\r\n            canvas.drawBitmap(bitmap, 0, 0, paint);\r\n            Frame frame = new Frame.Builder().setBitmap(editedBitmap).build();\r\n            SparseArray&lt;Face&gt; faces = detector.detect(frame);\r\n            txtTakenPicDesc.setText(null);\r\n\r\n            for (int index = 0; index &lt; faces.size(); ++index) {\r\n                Face face = faces.valueAt(index);\r\n                canvas.drawRect(\r\n                        face.getPosition().x,\r\n                        face.getPosition().y,\r\n                        face.getPosition().x + face.getWidth(),\r\n                        face.getPosition().y + face.getHeight(), paint);\r\n\r\n\r\n                canvas.drawText(\"Face \" + (index + 1), face.getPosition().x + face.getWidth(), face.getPosition().y + face.getHeight(), paint);\r\n\r\n                txtTakenPicDesc.setText(\"FACE \" + (index + 1) + \"\\n\");\r\n                txtTakenPicDesc.setText(txtTakenPicDesc.getText() + \"Smile probability:\" + \" \" + face.getIsSmilingProbability() + \"\\n\");\r\n                txtTakenPicDesc.setText(txtTakenPicDesc.getText() + \"Left Eye Is Open Probability: \" + \" \" + face.getIsLeftEyeOpenProbability() + \"\\n\");\r\n                txtTakenPicDesc.setText(txtTakenPicDesc.getText() + \"Right Eye Is Open Probability: \" + \" \" + face.getIsRightEyeOpenProbability() + \"\\n\\n\");\r\n\r\n                for (Landmark landmark : face.getLandmarks()) {\r\n                    int cx = (int) (landmark.getPosition().x);\r\n                    int cy = (int) (landmark.getPosition().y);\r\n                    canvas.drawCircle(cx, cy, 8, paint);\r\n                }\r\n\r\n\r\n            }\r\n\r\n            if (faces.size() == 0) {\r\n                txtTakenPicDesc.setText(\"Scan Failed: Found nothing to scan\");\r\n            } else {\r\n                imgTakePicture.setImageBitmap(editedBitmap);\r\n                txtTakenPicDesc.setText(txtTakenPicDesc.getText() + \"No of Faces Detected: \" + \" \" + String.valueOf(faces.size()));\r\n            }\r\n        } else {\r\n            txtTakenPicDesc.setText(\"Could not set up the detector!\");\r\n        }\r\n    }\r\n\r\n    private Bitmap decodeBitmapUri(Context ctx, Uri uri) throws FileNotFoundException {\r\n        int targetW = 300;\r\n        int targetH = 300;\r\n        BitmapFactory.Options bmOptions = new BitmapFactory.Options();\r\n        bmOptions.inJustDecodeBounds = true;\r\n        BitmapFactory.decodeStream(ctx.getContentResolver().openInputStream(uri), null, bmOptions);\r\n        int photoW = bmOptions.outWidth;\r\n        int photoH = bmOptions.outHeight;\r\n\r\n        int scaleFactor = Math.min(photoW \/ targetW, photoH \/ targetH);\r\n        bmOptions.inJustDecodeBounds = false;\r\n        bmOptions.inSampleSize = scaleFactor;\r\n\r\n        return BitmapFactory.decodeStream(ctx.getContentResolver()\r\n                .openInputStream(uri), null, bmOptions);\r\n    }\r\n\r\n\r\n    @Override\r\n    protected void onDestroy() {\r\n        super.onDestroy();\r\n        detector.release();\r\n    }\r\n}\r\n\r\n<\/code><\/pre>\n<p>\u4e0a\u8a18\u306e\u30b3\u30fc\u30c9\u304b\u3089\u5c0e\u304b\u308c\u308b\u3044\u304f\u3064\u304b\u306e\u63a8\u8ad6\u306f\u6b21\u306e\u3068\u304a\u308a\u3067\u3059\u3002\u300c<\/p>\n<ul class=\"post-ul\">\n<li>imageArray holds the sample images that\u2019ll be scanned for faces when the \u201cPROCESS NEXT\u201d button is clicked.<\/li>\n<li>The detector is instantiated with the below code snippet:<br \/>\nFaceDetector detector = new FaceDetector.Builder( getContext() )<br \/>\n.setTrackingEnabled(false)<br \/>\n.setLandmarkType(FaceDetector.ALL_LANDMARKS)<br \/>\n.setMode(FaceDetector.FAST_MODE)<br \/>\n.build();Landmarks add up to the computation time, hence they need to be explicitly set. Face Detector can be set to FAST_MODE or ACCURATE_MODE as per our requirements. We\u2019ve set tracking to false in the above code since we\u2019re dealing with still images. It can be set to true for detecting faces in a video.<\/li>\n<li>processImage() and processCameraPicture() methods contain the code where we actually detect the faces and draw a rectangle over them<\/li>\n<li>detector.isOperational() is used to check whether the current Google Play Services library in your phone supports the vision API(If it doesn\u2019t Google Play downloads the required native libraries to allow support).<\/li>\n<li>The code snippet that actually does the work of face detection is :<br \/>\nFrame frame = new Frame.Builder().setBitmap(editedBitmap).build();<br \/>\nSparseArray faces = detector.detect(frame);<\/li>\n<li>Once detected, we loop through the faces array to find the position and attributes of each face.<\/li>\n<li>The attributes for each face are appended in the TextView beneath the button.<\/li>\n<li>This works the same when an image is captured by camera except the fact that we need to ask for the camera permissions at runtime and save the uri, bitmap returned by the camera application.<\/li>\n<\/ul>\n<div><img decoding=\"async\" class=\"post-images\" title=\"\" src=\"https:\/\/cdn.silicloud.com\/blog-img\/blog\/img\/65649035daa94e2bdf7bddb4\/28-0.gif\" alt=\"android face detection app\" \/><\/div>\n<p>Android\u306e\u9854\u691c\u51fa\u30d7\u30ed\u30b8\u30a7\u30af\u30c8\u3092\u30c0\u30a6\u30f3\u30ed\u30fc\u30c9\u3059\u308b\u3002<\/p>\n<p>\u53c2\u8003\uff1a\u516c\u5f0f\u30c9\u30ad\u30e5\u30e1\u30f3\u30c6\u30fc\u30b7\u30e7\u30f3<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Google Play \u30b5\u30fc\u30d3\u30b9 7.8 \u306e\u30ea\u30ea\u30fc\u30b9\u306b\u3088\u308a\u3001Google \u306f Mobile Vision API \u3092\u5c0e\u5165\u3057\u3001\u9854\u691c\u51fa\u3001\u30d0\u30fc\u30b3\u30fc\u30c9\u691c\u51fa\u3001\u30c6\u30ad\u30b9\u30c8\u691c\u51fa\u304c\u53ef\u80fd\u306b\u306a\u308a\u307e\u3057\u305f\u3002\u3053\u306e\u30c1\u30e5\u30fc\u30c8\u30ea\u30a2\u30eb\u3067\u306f\u3001Android  [&hellip;]<\/p>\n","protected":false},"author":12,"featured_media":0,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[1],"tags":[26,61],"class_list":["post-485","post","type-post","status-publish","format-standard","hentry","category-uncategorized","tag-26","tag-61"],"yoast_head":"<!-- This site is optimized with the Yoast SEO Premium plugin v21.5 (Yoast SEO v21.5) - https:\/\/yoast.com\/wordpress\/plugins\/seo\/ -->\n<title>\u30a2\u30f3\u30c9\u30ed\u30a4\u30c9\u306e\u9854\u691c\u51fa - Blog - Silicon Cloud<\/title>\n<meta name=\"description\" content=\"\u30a2\u30f3\u30c9\u30ed\u30a4\u30c9\u306e\u9854\u691c\u51fa\u3092\u5206\u304b\u308a\u3084\u3059\u304f\u89e3\u8aac\u3002\u5b9f\u8df5\u7684\u306a\u4f8b\u3068\u30b3\u30fc\u30c9\u3001\u6ce8\u610f\u70b9\u3092\u542b\u3081\u3066\u521d\u5fc3\u8005\u306b\u3082\u7406\u89e3\u3067\u304d\u308b\u3088\u3046\u8aac\u660e\u3057\u307e\u3059\u3002\" \/>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/www.silicloud.com\/ja\/blog\/\u30a2\u30f3\u30c9\u30ed\u30a4\u30c9\u306e\u9854\u691c\u51fa\/\" \/>\n<meta property=\"og:locale\" content=\"ja_JP\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"\u30a2\u30f3\u30c9\u30ed\u30a4\u30c9\u306e\u9854\u691c\u51fa\" \/>\n<meta property=\"og:description\" content=\"\u30a2\u30f3\u30c9\u30ed\u30a4\u30c9\u306e\u9854\u691c\u51fa\u3092\u5206\u304b\u308a\u3084\u3059\u304f\u89e3\u8aac\u3002\u5b9f\u8df5\u7684\u306a\u4f8b\u3068\u30b3\u30fc\u30c9\u3001\u6ce8\u610f\u70b9\u3092\u542b\u3081\u3066\u521d\u5fc3\u8005\u306b\u3082\u7406\u89e3\u3067\u304d\u308b\u3088\u3046\u8aac\u660e\u3057\u307e\u3059\u3002\" \/>\n<meta property=\"og:url\" content=\"https:\/\/www.silicloud.com\/ja\/blog\/\u30a2\u30f3\u30c9\u30ed\u30a4\u30c9\u306e\u9854\u691c\u51fa\/\" \/>\n<meta property=\"og:site_name\" content=\"Blog - Silicon Cloud\" \/>\n<meta property=\"article:published_time\" content=\"2022-09-03T09:29:54+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2025-07-31T14:56:55+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/cdn.silicloud.com\/blog-img\/blog\/img\/65649035daa94e2bdf7bddb4\/14-0.png\" \/>\n<meta name=\"author\" content=\"\u5149, \u660e\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:label1\" content=\"\u57f7\u7b46\u8005\" \/>\n\t<meta name=\"twitter:data1\" content=\"\u5149, \u660e\" \/>\n\t<meta name=\"twitter:label2\" content=\"\u63a8\u5b9a\u8aad\u307f\u53d6\u308a\u6642\u9593\" \/>\n\t<meta name=\"twitter:data2\" content=\"39\u5206\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"WebPage\",\"@id\":\"https:\/\/www.silicloud.com\/ja\/blog\/%e3%82%a2%e3%83%b3%e3%83%89%e3%83%ad%e3%82%a4%e3%83%89%e3%81%ae%e9%a1%94%e6%a4%9c%e5%87%ba\/\",\"url\":\"https:\/\/www.silicloud.com\/ja\/blog\/%e3%82%a2%e3%83%b3%e3%83%89%e3%83%ad%e3%82%a4%e3%83%89%e3%81%ae%e9%a1%94%e6%a4%9c%e5%87%ba\/\",\"name\":\"\u30a2\u30f3\u30c9\u30ed\u30a4\u30c9\u306e\u9854\u691c\u51fa - Blog - Silicon Cloud\",\"isPartOf\":{\"@id\":\"https:\/\/www.silicloud.com\/ja\/blog\/#website\"},\"datePublished\":\"2022-09-03T09:29:54+00:00\",\"dateModified\":\"2025-07-31T14:56:55+00:00\",\"author\":{\"@id\":\"https:\/\/www.silicloud.com\/ja\/blog\/#\/schema\/person\/9ee62cea876d247deba14a0ac7ba5b55\"},\"description\":\"\u30a2\u30f3\u30c9\u30ed\u30a4\u30c9\u306e\u9854\u691c\u51fa\u3092\u5206\u304b\u308a\u3084\u3059\u304f\u89e3\u8aac\u3002\u5b9f\u8df5\u7684\u306a\u4f8b\u3068\u30b3\u30fc\u30c9\u3001\u6ce8\u610f\u70b9\u3092\u542b\u3081\u3066\u521d\u5fc3\u8005\u306b\u3082\u7406\u89e3\u3067\u304d\u308b\u3088\u3046\u8aac\u660e\u3057\u307e\u3059\u3002\",\"breadcrumb\":{\"@id\":\"https:\/\/www.silicloud.com\/ja\/blog\/%e3%82%a2%e3%83%b3%e3%83%89%e3%83%ad%e3%82%a4%e3%83%89%e3%81%ae%e9%a1%94%e6%a4%9c%e5%87%ba\/#breadcrumb\"},\"inLanguage\":\"ja\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/www.silicloud.com\/ja\/blog\/%e3%82%a2%e3%83%b3%e3%83%89%e3%83%ad%e3%82%a4%e3%83%89%e3%81%ae%e9%a1%94%e6%a4%9c%e5%87%ba\/\"]}]},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/www.silicloud.com\/ja\/blog\/%e3%82%a2%e3%83%b3%e3%83%89%e3%83%ad%e3%82%a4%e3%83%89%e3%81%ae%e9%a1%94%e6%a4%9c%e5%87%ba\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"\u9996\u9875\",\"item\":\"https:\/\/www.silicloud.com\/ja\/blog\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"\u30a2\u30f3\u30c9\u30ed\u30a4\u30c9\u306e\u9854\u691c\u51fa\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\/\/www.silicloud.com\/ja\/blog\/#website\",\"url\":\"https:\/\/www.silicloud.com\/ja\/blog\/\",\"name\":\"Blog - Silicon Cloud\",\"description\":\"\",\"inLanguage\":\"ja\"},{\"@type\":\"Person\",\"@id\":\"https:\/\/www.silicloud.com\/ja\/blog\/#\/schema\/person\/9ee62cea876d247deba14a0ac7ba5b55\",\"name\":\"\u5149, \u660e\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"ja\",\"@id\":\"https:\/\/www.silicloud.com\/ja\/blog\/#\/schema\/person\/image\/\",\"url\":\"https:\/\/secure.gravatar.com\/avatar\/3dffb6c754b95e3fbdcd8973f4375ff9dd10d41e4f6632ad08d4d59ccc35af8d?s=96&d=mm&r=g\",\"contentUrl\":\"https:\/\/secure.gravatar.com\/avatar\/3dffb6c754b95e3fbdcd8973f4375ff9dd10d41e4f6632ad08d4d59ccc35af8d?s=96&d=mm&r=g\",\"caption\":\"\u5149, \u660e\"},\"url\":\"https:\/\/www.silicloud.com\/ja\/blog\/author\/hikariakira\/\"},{\"@type\":\"ImageObject\",\"inLanguage\":\"ja\",\"@id\":\"https:\/\/www.silicloud.com\/ja\/blog\/%e3%82%a2%e3%83%b3%e3%83%89%e3%83%ad%e3%82%a4%e3%83%89%e3%81%ae%e9%a1%94%e6%a4%9c%e5%87%ba\/#local-main-organization-logo\",\"url\":\"\",\"contentUrl\":\"\",\"caption\":\"Blog - Silicon Cloud\"}]}<\/script>\n<!-- \/ Yoast SEO Premium plugin. -->","yoast_head_json":{"title":"\u30a2\u30f3\u30c9\u30ed\u30a4\u30c9\u306e\u9854\u691c\u51fa - Blog - Silicon Cloud","description":"\u30a2\u30f3\u30c9\u30ed\u30a4\u30c9\u306e\u9854\u691c\u51fa\u3092\u5206\u304b\u308a\u3084\u3059\u304f\u89e3\u8aac\u3002\u5b9f\u8df5\u7684\u306a\u4f8b\u3068\u30b3\u30fc\u30c9\u3001\u6ce8\u610f\u70b9\u3092\u542b\u3081\u3066\u521d\u5fc3\u8005\u306b\u3082\u7406\u89e3\u3067\u304d\u308b\u3088\u3046\u8aac\u660e\u3057\u307e\u3059\u3002","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/www.silicloud.com\/ja\/blog\/\u30a2\u30f3\u30c9\u30ed\u30a4\u30c9\u306e\u9854\u691c\u51fa\/","og_locale":"ja_JP","og_type":"article","og_title":"\u30a2\u30f3\u30c9\u30ed\u30a4\u30c9\u306e\u9854\u691c\u51fa","og_description":"\u30a2\u30f3\u30c9\u30ed\u30a4\u30c9\u306e\u9854\u691c\u51fa\u3092\u5206\u304b\u308a\u3084\u3059\u304f\u89e3\u8aac\u3002\u5b9f\u8df5\u7684\u306a\u4f8b\u3068\u30b3\u30fc\u30c9\u3001\u6ce8\u610f\u70b9\u3092\u542b\u3081\u3066\u521d\u5fc3\u8005\u306b\u3082\u7406\u89e3\u3067\u304d\u308b\u3088\u3046\u8aac\u660e\u3057\u307e\u3059\u3002","og_url":"https:\/\/www.silicloud.com\/ja\/blog\/\u30a2\u30f3\u30c9\u30ed\u30a4\u30c9\u306e\u9854\u691c\u51fa\/","og_site_name":"Blog - Silicon Cloud","article_published_time":"2022-09-03T09:29:54+00:00","article_modified_time":"2025-07-31T14:56:55+00:00","og_image":[{"url":"https:\/\/cdn.silicloud.com\/blog-img\/blog\/img\/65649035daa94e2bdf7bddb4\/14-0.png"}],"author":"\u5149, \u660e","twitter_card":"summary_large_image","twitter_misc":{"\u57f7\u7b46\u8005":"\u5149, \u660e","\u63a8\u5b9a\u8aad\u307f\u53d6\u308a\u6642\u9593":"39\u5206"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"WebPage","@id":"https:\/\/www.silicloud.com\/ja\/blog\/%e3%82%a2%e3%83%b3%e3%83%89%e3%83%ad%e3%82%a4%e3%83%89%e3%81%ae%e9%a1%94%e6%a4%9c%e5%87%ba\/","url":"https:\/\/www.silicloud.com\/ja\/blog\/%e3%82%a2%e3%83%b3%e3%83%89%e3%83%ad%e3%82%a4%e3%83%89%e3%81%ae%e9%a1%94%e6%a4%9c%e5%87%ba\/","name":"\u30a2\u30f3\u30c9\u30ed\u30a4\u30c9\u306e\u9854\u691c\u51fa - Blog - Silicon Cloud","isPartOf":{"@id":"https:\/\/www.silicloud.com\/ja\/blog\/#website"},"datePublished":"2022-09-03T09:29:54+00:00","dateModified":"2025-07-31T14:56:55+00:00","author":{"@id":"https:\/\/www.silicloud.com\/ja\/blog\/#\/schema\/person\/9ee62cea876d247deba14a0ac7ba5b55"},"description":"\u30a2\u30f3\u30c9\u30ed\u30a4\u30c9\u306e\u9854\u691c\u51fa\u3092\u5206\u304b\u308a\u3084\u3059\u304f\u89e3\u8aac\u3002\u5b9f\u8df5\u7684\u306a\u4f8b\u3068\u30b3\u30fc\u30c9\u3001\u6ce8\u610f\u70b9\u3092\u542b\u3081\u3066\u521d\u5fc3\u8005\u306b\u3082\u7406\u89e3\u3067\u304d\u308b\u3088\u3046\u8aac\u660e\u3057\u307e\u3059\u3002","breadcrumb":{"@id":"https:\/\/www.silicloud.com\/ja\/blog\/%e3%82%a2%e3%83%b3%e3%83%89%e3%83%ad%e3%82%a4%e3%83%89%e3%81%ae%e9%a1%94%e6%a4%9c%e5%87%ba\/#breadcrumb"},"inLanguage":"ja","potentialAction":[{"@type":"ReadAction","target":["https:\/\/www.silicloud.com\/ja\/blog\/%e3%82%a2%e3%83%b3%e3%83%89%e3%83%ad%e3%82%a4%e3%83%89%e3%81%ae%e9%a1%94%e6%a4%9c%e5%87%ba\/"]}]},{"@type":"BreadcrumbList","@id":"https:\/\/www.silicloud.com\/ja\/blog\/%e3%82%a2%e3%83%b3%e3%83%89%e3%83%ad%e3%82%a4%e3%83%89%e3%81%ae%e9%a1%94%e6%a4%9c%e5%87%ba\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"\u9996\u9875","item":"https:\/\/www.silicloud.com\/ja\/blog\/"},{"@type":"ListItem","position":2,"name":"\u30a2\u30f3\u30c9\u30ed\u30a4\u30c9\u306e\u9854\u691c\u51fa"}]},{"@type":"WebSite","@id":"https:\/\/www.silicloud.com\/ja\/blog\/#website","url":"https:\/\/www.silicloud.com\/ja\/blog\/","name":"Blog - Silicon Cloud","description":"","inLanguage":"ja"},{"@type":"Person","@id":"https:\/\/www.silicloud.com\/ja\/blog\/#\/schema\/person\/9ee62cea876d247deba14a0ac7ba5b55","name":"\u5149, \u660e","image":{"@type":"ImageObject","inLanguage":"ja","@id":"https:\/\/www.silicloud.com\/ja\/blog\/#\/schema\/person\/image\/","url":"https:\/\/secure.gravatar.com\/avatar\/3dffb6c754b95e3fbdcd8973f4375ff9dd10d41e4f6632ad08d4d59ccc35af8d?s=96&d=mm&r=g","contentUrl":"https:\/\/secure.gravatar.com\/avatar\/3dffb6c754b95e3fbdcd8973f4375ff9dd10d41e4f6632ad08d4d59ccc35af8d?s=96&d=mm&r=g","caption":"\u5149, \u660e"},"url":"https:\/\/www.silicloud.com\/ja\/blog\/author\/hikariakira\/"},{"@type":"ImageObject","inLanguage":"ja","@id":"https:\/\/www.silicloud.com\/ja\/blog\/%e3%82%a2%e3%83%b3%e3%83%89%e3%83%ad%e3%82%a4%e3%83%89%e3%81%ae%e9%a1%94%e6%a4%9c%e5%87%ba\/#local-main-organization-logo","url":"","contentUrl":"","caption":"Blog - Silicon Cloud"}]}},"_links":{"self":[{"href":"https:\/\/www.silicloud.com\/ja\/blog\/wp-json\/wp\/v2\/posts\/485","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.silicloud.com\/ja\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.silicloud.com\/ja\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.silicloud.com\/ja\/blog\/wp-json\/wp\/v2\/users\/12"}],"replies":[{"embeddable":true,"href":"https:\/\/www.silicloud.com\/ja\/blog\/wp-json\/wp\/v2\/comments?post=485"}],"version-history":[{"count":1,"href":"https:\/\/www.silicloud.com\/ja\/blog\/wp-json\/wp\/v2\/posts\/485\/revisions"}],"predecessor-version":[{"id":41217,"href":"https:\/\/www.silicloud.com\/ja\/blog\/wp-json\/wp\/v2\/posts\/485\/revisions\/41217"}],"wp:attachment":[{"href":"https:\/\/www.silicloud.com\/ja\/blog\/wp-json\/wp\/v2\/media?parent=485"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.silicloud.com\/ja\/blog\/wp-json\/wp\/v2\/categories?post=485"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.silicloud.com\/ja\/blog\/wp-json\/wp\/v2\/tags?post=485"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}