HMS MLキット検出器na sonrisa al tomar una


イントロダクション
エルKitデMachine Learning(MLKit)esノUnoデロスServicios M .
は、プエードhacer MLキット?PUEDE Resolver Duante el Desarrollo de la Aplicaciについて
ロデ・デレロレッドレスにおけるMenkit y - la便宜的なBlindaによるHorcionne FrancionesのMostrarle Las Poderosas Funciones .
  • Capaccionadas Por Melkit顔検出
  • Lustros de Huawei Machine Learning Service ( MLKit )におけるPrimero , Veamos la Capacidad de Detection
    ラテンアメリカ人の顔についての美学的な顔をしてください.コモseミューアデレードのs、s pueden検出器カーカスal mismo tiempo.

    Consejos : Estaは、私がそうしているアンドロイドであります.
    SonrisaにおけるFOOTOGRAFの機能の機能
    ホイ,ユリモモスの容量についての一考察
    desarrolloの準備
    ロス準備AprilrollarエルキットデHuawei HMS息子同類.エル・SDKを紹介します.
  • Agrega El RepositorioデHuawei maven al gradle de nivel de proyecto
  • MavenのAgrega卒業生
    // Top-level build file where you can add configuration options common to all sub-projects/modules.buildscript {ext.kotlin_version = "1.3.72"repositories {google()jcenter()maven { url 'https://developer.huawei.com/repo/' } // HUAWEI Maven repository}dependencies {classpath "com.android.tools.build:gradle:4.0.0"classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version"classpath 'com.huawei.agconnect:agcp:1.3.1.300'  // HUAWEI agcp plugin// NOTE: Do not place your application dependencies here; they belong// in the individual module build.gradle files}}allprojects {repositories {google()jcenter()maven { url 'https://developer.huawei.com/repo/' } // HUAWEI Maven repository}}task clean(type: Delete) {delete rootProject.buildDir}
    
  • 2 .アルトボックの構築に関する一考察<研究ノート>二〇〇五年六月七四四二年六月六日
    フェイシャルにおける顔の色について
    dependencies{implementation 'com.huawei.hms:ml-computer-vision-face-emotion-model:1.0.4.300'implementation 'com.huawei.hms:ml-computer-vision-face-feature-model:1.0.4.300'implementation 'com.huawei.hms:ml-computer-vision-face-shape-point-model:1.0.4.300'implementation 'com.huawei.hms:ml-computer-vision-face:1.0.4.300'}
    
  • el modelo se agrega al archivo androidmanifestXML en modo incremental para descarga autom len . tica
  • エストse USA Principalmenteパラアクチュアリーは、エルmodeloです.NIE Vez - que - se - Allioritmo , El Modelo se puede descargar Autom - en Ticamente al - Port - Fu O - Re - Vu para Su Actualizaci - n
    <applicationandroid:allowBackup="true"android:icon="@mipmap/ic_launcher"android:label="@string/app_name"android:roundIcon="@mipmap/ic_launcher_round"android:supportsRtl="true"android:theme="@style/MaterialTheme"><activity android:name=".face.LiveFaceAnalyseActivity" /><activity android:name=".MainActivity"><intent-filter><action android:name="android.intent.action.MAIN" /><category android:name="android.intent.category.LAUNCHER" /></intent-filter></activity></application>
    
  • Solicita permisos de cマラy almacenamienen en el archivo androidmanifestXML
  • <uses-feature android:name="android.hardware.camera" /><uses-permission android:name="android.permission.CAMERA" /><uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
    
    ディアローロロデルcディルディゴ
    Creando un analizador facial y tomar fotos cuando se detecte una sonrisa.
    
    フォトス・トマドス・デッツェの『探偵』
    1 ) analizadorの構成式
    2 ) Analizador al Analizadorに於ける二,三の研究
    3)enアナライザ.SetTransaction , TransRetresult debera ser sobrescrito para procesar el contenido despu es s del reconocimiento facialフェイスコンフェースデパープメントの顔、se devuelve un nivelデコンニャンザ.Un Cierto ValorにおけるSoul Necesita El nivel de Convenanza
    private var analyzer: MLFaceAnalyzer? = null
     private fun createFaceAnalyzer() {
         // Create a face analyzer. You can create an analyzer using the provided customized face detection parameter
         // MLFaceAnalyzerSetting
         val setting = MLFaceAnalyzerSetting.Factory()
             .setFeatureType(MLFaceAnalyzerSetting.TYPE_FEATURES)
             .setKeyPointType(MLFaceAnalyzerSetting.TYPE_UNSUPPORT_KEYPOINTS)
             .setMinFaceProportion(0.1f)
             .setTracingAllowed(true)
             .create()
         analyzer = MLAnalyzerFactory.getInstance().getFaceAnalyzer(setting)
         if (detectMode == Constant.NEAREST_PEOPLE) {
             val transactor =
                 MLMaxSizeFaceTransactor.Creator(analyzer, object : MLResultTrailer<MLFace?>() {
                     override fun objectCreateCallback(
                         itemId: Int,
                         obj: MLFace?
                     ) {
                         overlay!!.clear()
                         if (obj == null) {
                             return
                         }
                         val faceGraphic = LocalFaceGraphic(
                             overlay!!,
                             obj,
                             this@LiveFaceAnalyseActivity
                         )
                         overlay!!.addGraphic(faceGraphic)
                         val emotion = obj.emotions
                         if (emotion.smilingProbability > smilingPossibility) {
                             safeToTakePicture = false
                             mHandler.sendEmptyMessage(TAKE_PHOTO)
                         }
                     }
    
                     override fun objectUpdateCallback(
                         var1: MLAnalyzer.Result<MLFace?>,
                         obj: MLFace?
                     ) {
                         overlay!!.clear()
                         if (obj == null) {
                             return
                         }
                         val faceGraphic = LocalFaceGraphic(
                             overlay!!,
                             obj,
                             this@LiveFaceAnalyseActivity
                         )
                         overlay!!.addGraphic(faceGraphic)
                         val emotion = obj.emotions
                         if (emotion.smilingProbability > smilingPossibility && safeToTakePicture) {
                             safeToTakePicture = false
                             mHandler.sendEmptyMessage(TAKE_PHOTO)
                         }
                     }
    
                     override fun lostCallback(result: MLAnalyzer.Result<MLFace?>) {
                         overlay!!.clear()
                     }
    
                     override fun completeCallback() {
                         overlay!!.clear()
                     }
                 }).create()
             analyzer!!.setTransactor(transactor)
         } else {
             analyzer!!.setTransactor(object : MLTransactor<MLFace> {
                 override fun destroy() {}
                 override fun transactResult(result: MLAnalyzer.Result<MLFace>) {
                     val faceSparseArray = result.analyseList
                     var flag = 0
                     for (i in 0 until faceSparseArray.size()) {
                         val emotion = faceSparseArray.valueAt(i).emotions
                         if (emotion.smilingProbability > smilingPossibility) {
                             flag++
                         }
                     }
                     if (flag > faceSparseArray.size() * smilingRate && safeToTakePicture) {
                         safeToTakePicture = false
                         mHandler.sendEmptyMessage(TAKE_PHOTO)
                     }
                 }
             })
         }
     }
    
    y almacenamientoを返します.
    private fun takePhoto() {
         mLensEngine!!.photograph(null,
             PhotographListener { bytes ->
                 mHandler.sendEmptyMessage(STOP_PREVIEW)
                 val bitmap = BitmapFactory.decodeByteArray(bytes, 0, bytes.size)
                 saveBitmapToDisk(bitmap)
             })
     }
    
  • Creamos国連モータービジュアルのcapapar transmisionesディンは、mideデビデオdesc cをします.
  • private fun createLensEngine() {
         val context: Context = this.applicationContext
         // Create LensEngine
         mLensEngine = LensEngine.Creator(context, analyzer).setLensType(lensType)
             .applyDisplayDimension(640, 480)
             .applyFps(25.0f)
             .enableAutomaticFocus(true)
             .create()
     }
    
  • Aplicaciは、デPermios Din Muros、AdjuntandoエルAnalizador yエルC
  • override fun onCreate(savedInstanceState: Bundle?) {
         super.onCreate(savedInstanceState)
         setContentView(R.layout.activity_main)
         if (!allPermissionsGranted()) {
             runtimePermissions
         }
     }
    
     private val runtimePermissions: Unit
         get() {
             val allNeededPermissions: MutableList<String?> = ArrayList()
             for (permission in requiredPermissions) {
                 if (!isPermissionGranted(this, permission)) {
                     allNeededPermissions.add(permission)
                 }
             }
             if (!allNeededPermissions.isEmpty()) {
                 ActivityCompat.requestPermissions(
                     this,
                     allNeededPermissions.toTypedArray(),
                     PERMISSION_REQUESTS
                 )
             }
         }
    
     private fun allPermissionsGranted(): Boolean {
         for (permission in requiredPermissions) {
             if (!isPermissionGranted(this, permission)) {
                 return false
             }
         }
         return true
     }
    
     private val requiredPermissions: Array<String?>
         get() = try {
             val info = this.packageManager
                 .getPackageInfo(this.packageName, PackageManager.GET_PERMISSIONS)
             val ps = info.requestedPermissions
             if (ps != null && ps.size > 0) {
                 ps
             } else {
                 arrayOfNulls(0)
             }
         } catch (e: RuntimeException) {
             throw e
         } catch (e: Exception) {
             arrayOfNulls(0)
         }
    
     override fun onRequestPermissionsResult(
         requestCode: Int, permissions: Array<String>,
         grantResults: IntArray
     ) {
         super.onRequestPermissionsResult(requestCode, permissions, grantResults)
         if (requestCode != PERMISSION_REQUESTS) {
             return
         }
         var isNeedShowDiag = false
         for (i in permissions.indices) {
             if (permissions[i] == Manifest.permission.READ_EXTERNAL_STORAGE && grantResults[i] != PackageManager.PERMISSION_GRANTED
             ) {
                 // If permissions aren't satisfied, show dialog.
                 isNeedShowDiag = true
             }
         }
         if (isNeedShowDiag && !ActivityCompat.shouldShowRequestPermissionRationale(
                 this,
                 Manifest.permission.CALL_PHONE
             )
         ) {
             val dialog: AlertDialog = AlertDialog.Builder(this)
                 .setMessage(getString(R.string.camera_permission_rationale))
                 .setPositiveButton(
                     getString(R.string.settings)
                 ) { dialog, which ->
                     val intent =
                         Intent(Settings.ACTION_APPLICATION_DETAILS_SETTINGS)
                     intent.data = Uri.parse("package:$packageName")
                     startActivityForResult(intent, 200)
                     startActivity(intent)
                 }
                 .setNegativeButton(
                     getString(R.string.cancel),
                     DialogInterface.OnClickListener { dialog, which -> finish() }).create()
             dialog.show()
         }
     }
    
    結論
    Latiples CarasのSonrisa de Captura de Capturaの実験
    瞬間は、呼吸します、呼吸してください

    ロストスの検出能力に関する一考察つのabre tu mente nuevasアイデアy caracterは、刺します!干し草藻類consejos
  • Agrega Efectos装飾的なinteresantes Identificando La Ubicaciは、ロスラスゴスfaciales、como orejas、ojos、ナルビス、boca y cejasとします.
  • 同一視法による顔の位置関係の推定
  • desarrollar algunas funcionesデcontrol parental basadas en la la ficicicaci di n de la edad
  • Desallle la function i n de comdidad Light Duraci et n n de Looojos mirando la pantalla
  • を実行しているLa Detsiciは、パトロールのためにトランデのcomandos aleatorios(como sacudir la cabeza、parpay y abrirラボカ)です.
  • Recomendar Ofertasは、ロスUsualiasエヌFreniを得ます.
  • <論文>パラヴェラーにおけるデスローロロの思想:ヴィオデ・エル・シティエー・フォールフォルト・デル・デラローラドールde Huawei
    Link
    OプエヴェVisitarnosタンビesエヌエルforoデdesarrolladores
    Dev Forum