Para que serve o serviço do Kit de ML? Que problemas ele pode resolver durante o desenvolvimento?
Hoje apresento a sua atenção uma das funções mais importantes do ML Kit - o reconhecimento facial.
Visão geral do reconhecimento facial

Esta função pode reconhecer a orientação facial, expressões faciais (alegria, nojo, surpresa, tristeza e raiva), sinais (sexo, idade, roupas e acessórios) e determinar se os olhos estão abertos ou fechados. Também pode determinar as coordenadas do nariz, olhos, lábios e sobrancelhas, e até identificar grupos de rostos ao mesmo tempo.
E o mais importante, o recurso de reconhecimento de rosto é totalmente gratuito e funciona em qualquer telefone Android.
Desenvolvendo uma função automática de fotografia de sorriso para um grupo de pessoas
Apresentarei como você pode usar os recursos acima para criar uma demonstração do recurso de captura automática de sorriso. Você pode baixar o código-fonte de demonstração em github.com/HMS-Core/hms-ml-demo .
1. Preparação
Ao integrar qualquer ferramenta de desenvolvimento HMS Core, o processo de preparação é quase o mesmo. Você só precisa adicionar o repositório Maven e importar o SDK.
1.1 Adicionar o repositório Maven fornecido pela Huawei ao seu arquivo build.gradle de nível de projeto
Adicione o endereço do repositório Maven:
buildscript {
repositories {
maven {url 'http://developer.huawei.com/repo/'}
} }allprojects {
repositories {
maven { url 'http://developer.huawei.com/repo/'}
}}
1.2 Adicionar dependências do SDK ao arquivo build.gradle no nível do aplicativo
Importe o SDK de reconhecimento facial e o SDK principal:
dependencies{
// import the basic SDK
implementation 'com.huawei.hms:ml-computer-vision:1.0.2.300'
// Import the face detection SDK
implementation 'com.huawei.hms:ml-computer-vision-face-recognition-model:1.0.2.300'
}
1.3 Adicionar função de carregamento automático de modelo ao arquivo AndroidManifest.xml
Esta função é usada principalmente para atualizar o modelo. Os modelos podem ser baixados automaticamente e atualizados no celular com base em um algoritmo otimizado.
<manifest
<application
<meta-data
android:name="com.huawei.hms.ml.DEPENDENCY"
android:value= "face"/>
</application></manifest>
1.4 Envie uma solicitação de acesso à câmera e memória no arquivo AndroidManifest.xml
<!--Camera permission--><uses-permission android:name="android.permission.CAMERA" /><!--Storage permission--><uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
2. Desenvolvimento de código
2.1 Crie um analisador de rosto para tirar uma foto quando um sorriso for detectado
Primeiro, para configurar a captura de foto de detecção de sorriso, siga estas etapas:
(1) Configure as configurações do analisador.
(2) Transfira os parâmetros para o analisador.
(3) Substituir transactResult em Analyzer.setTransacto para lidar com o conteúdo retornado por reconhecimento facial. Especificamente, o nível de confiança (que há um sorriso no rosto) é retornado. Quando o nível de confiança atinge o limite definido, a câmera tira uma foto automaticamente.
private MLFaceAnalyzer analyzer;private void createFaceAnalyzer() {
MLFaceAnalyzerSetting setting =
new MLFaceAnalyzerSetting.Factory()
.setFeatureType(MLFaceAnalyzerSetting.TYPE_FEATURES)
.setKeyPointType(MLFaceAnalyzerSetting.TYPE_UNSUPPORT_KEYPOINTS)
.setMinFaceProportion(0.1f)
.setTracingAllowed(true)
.create();
this.analyzer = MLAnalyzerFactory.getInstance().getFaceAnalyzer(setting);
this.analyzer.setTransactor(new MLAnalyzer.MLTransactor<MLFace>() {
@Override public void destroy() {
}
@Override public void transactResult(MLAnalyzer.Result<MLFace> result) {
SparseArray<MLFace> faceSparseArray = result.getAnalyseList();
int flag = 0;
for (int i = 0; i < faceSparseArray.size(); i++) {
MLFaceEmotion emotion = faceSparseArray.valueAt(i).getEmotions();
if (emotion.getSmilingProbability() > smilingPossibility) {
flag++;
}
}
if (flag > faceSparseArray.size() * smilingRate && safeToTakePicture) {
safeToTakePicture = false;
mHandler.sendEmptyMessage(TAKE_PHOTO);
}
}
});}
Em segundo lugar, queremos salvar esta foto:
private void takePhoto() {
this.mLensEngine.photograph(null,
new LensEngine.PhotographListener() {
@Override public void takenPhotograph(byte[] bytes) {
mHandler.sendEmptyMessage(STOP_PREVIEW);
Bitmap bitmap = BitmapFactory.decodeByteArray(bytes, 0, bytes.length);
saveBitmapToDisk(bitmap);
}
});}
2.2 Criar uma instância do LensEngine para capturar fluxos de câmera dinâmicos e transmitir fluxos para o analisador
private void createLensEngine() {
Context context = this.getApplicationContext();
// Create LensEngine
this.mLensEngine = new LensEngine.Creator(context, this.analyzer).setLensType(this.lensType)
.applyDisplayDimension(640, 480)
.applyFps(25.0f)
.enableAutomaticFocus(true)
.create();}
2.3 Envie uma reclamação para o direito de acessar fluxos dinâmicos e anexe o código para criar o analisador e o LensEngine
@Overridepublic void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
this.setContentView(R.layout.activity_live_face_analyse);
if (savedInstanceState != null) {
this.lensType = savedInstanceState.getInt("lensType");
}
this.mPreview = this.findViewById(R.id.preview);
this.createFaceAnalyzer();
this.findViewById(R.id.facingSwitch).setOnClickListener(this);
// Checking Camera Permissions
if (ActivityCompat.checkSelfPermission(this, Manifest.permission.CAMERA) == PackageManager.PERMISSION_GRANTED) {
this.createLensEngine();
} else {
this.requestCameraPermission();
}}
private void requestCameraPermission() {
final String[] permissions = new String[]{Manifest.permission.CAMERA, Manifest.permission.WRITE_EXTERNAL_STORAGE};
if (!ActivityCompat.shouldShowRequestPermissionRationale(this, Manifest.permission.CAMERA)) {
ActivityCompat.requestPermissions(this, permissions, LiveFaceAnalyseActivity.CAMERA_PERMISSION_CODE);
return;
}}@Overridepublic void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions,
@NonNull int[] grantResults) {
if (requestCode != LiveFaceAnalyseActivity.CAMERA_PERMISSION_CODE) {
super.onRequestPermissionsResult(requestCode, permissions, grantResults);
return;
}
if (grantResults.length != 0 && grantResults[0] == PackageManager.PERMISSION_GRANTED) {
this.createLensEngine();
return;
}}
Ações futuras
Muito simples, não é? Mesmo que não esteja familiarizado com o processo de desenvolvimento, você ainda pode criar um novo recurso útil em apenas meia hora! Agora vamos ver o que essa função pode fazer.
Tire a foto de uma pessoa sorrindo:

Tire uma foto de várias pessoas sorrindo:

De que outra forma você pode usar o reconhecimento facial? Aqui estão algumas opções:
1. Embeleze suas características faciais.
2. Crie efeitos interessantes exagerando ou alterando os contornos e características do rosto.
3. Crie uma função de determinação de idade que evite que crianças acessem conteúdo impróprio.
4. Projete uma função de proteção para os olhos determinando a quantidade de tempo que o usuário olha para a tela.
5. Determine se uma pessoa está viva na frente da câmera usando comandos aleatórios (por exemplo, balançar a cabeça, piscar, abrir a boca).
6. Recomendar produtos aos usuários de acordo com sua idade e sexo.
Para mais detalhes, visite nosso site:developer.huawei.com/consumer/en/doc/development/HMS-Guides/ml-introduction-4
Compartilharemos outras maneiras de usar o kit HUAWEI ML. Fique ligado!