Instalar controladores ADB para Xiaomi Mi A1 con Rad Studio Tokyo

Hace poco he necesitado hacer un programa con RAD Studio Tokyo 10.2.3 instalado sobre Windows 8.1 para un móvil Android Xiaomi Mi A1. Éste es un teléfono de gama media de 4 Gb RAM y 64 Gb de almacenamiento interno,  el problema ha venido en el momento en que Windows no dispone de los controladores firmados para este dispositivo. Si vamos a PANEL DE CONTROL - Administrador de dispositivos, vemos que no aparece 

 










y claro tampoco lo reconoce Delphi


Esto es debido a que Windows obliga por defecto a que todos los controladores que se quieran instalar en el sistema deben estar firmados, para garantizar la estabilidad del Sistema Operativo y evitar entre otras cosas la instalación de malware, virus, etc.
Podemos cambiar un parámetro para que Windows acepte la instalación de controladores NO firmados como pueden ver aquí, pero existe otro método más sencillo que es instalar la aplicación pcsuite





Para ello hay que ir a http://pcsuite.mi.com
y pulsar el botón "Download now", después lo instalamos en nuestra máquina (se iniciará cada vez que activemos el PC) y lo que he comprobado es que además de instalarte una aplicación muy útil para ver los documentos, fotos, carpetas que tienes en el móvil, también te instala unos controladores ADB firmados, de tal forma que cuando inicias Delphi  lo detecta automáticamente, como pueden ver a continuación.


Recordar que para que RAD Studio reconozca el dispositivo Xiaomi, tienen que tener activado el "modo desarrollador" que se hace de la siguiente forma:

Ir a Ajustes - Información del dispositivo y pulsar siete veces sobre el número de compilación, nos aparecerá el mensaje "¡¡ Ahora eres desarrollador !!" y un nuevo menú llamado "Opciones de desarrollo", dentro hay muchísimas opciones que podremos configurar a nuestro gusto, pero para temas de desarrollo sólamente activamos tres:

-Depuración por USB
-Verificar aplicaciones por USB
-Seleccionar configuración de USB (MTP)







Descuento del 30% sólo hoy 30 de Abril 2018

Me ha llegado este email de Embarcadero por si es de vuestro interés:
======================================================

Don't Miss This! 30% Savings - Ends Today!
End Date: April 30th.
Mobile development support, FMX UI controls for iOS and Android, Linux support in Delphi, Windows 10 VCL styles, C++ enhancements, a dark theme, and dozens of new components are just the beginning of the features you may be missing if you’re still running XE7 or previous versions.
Discover what’s new in RAD Studio 10.2.3 and explore the full feature matrix. Our developers retain access to earlier versions of RAD Studio to maintain older applications, so you'll lose nothing by upgrading now.
Time is running out. The upgrade SKU disappears after 30 April 2018, and so does this discount. Contact sales today to take advantage of this special offer.
Get 30% OFF NOW!
Join 3 million + developers using the best visual IDE on the market for cross-platform development.
 
Save 30% on RAD Studio, Delphi, C++Builder
Contact Sales Today
*For terms and conditions click here

Reconocimiento facial con Delphi Tokyo 10.2.2

Hace unos días me pidieron que hiciese un programa de reconocimiento facial para identificar a los alumnos de una escuela.
Dándole vueltas al tema me di cuenta que tenía que dividirlo en dos partes, la primera sería la extracción de la cara del alumno de la imagen inicial eliminando el fondo y detalles innecesarios y la segunda la del tratamiento de esa imagen para identificar al alumno en cuestión utilizando técnicas de inteligencia artificial.
Inicialmente pensé en utilizar OpenCV (aquí tienen cómo instalarlo), pero por más intentos que hice  no conseguí que funcionase en mi equipo, me decía que no encontraba unas dlls, o que "no era una aplicación win32 válida", así que investigando en Google encontré que Android tiene incorporado un objeto llamado JFaceDetector para hacer reconocimiento facial, que lo podemos utilizar desde la unit Androidapi.JNI.Media.
Para utilizarlo se hace de la siguiente forma:
Desde nuestro Delphi Tokyo 10.2.2 accedo a File - Multi-Device Application y creo un nuevo proyecto.
En Tipo de proyecto seleccionamos Android


Desde la paleta de herramientas "Tool Palette" voy arrastrando hacia el form 3 objetos:  tButton, tLabel, tImage.


En el objeto tImage cargo una imagen de prueba (se hace clic sobre el componente tImage y desde Object Inspector, selecciono la propiedad Multiresbitmap)

para conseguir que quede de la siguiente forma:

En el componente Label1 mostraremos el número de caras que ha detectado el programa.
y dentro del tbutton en el evento Onclic colocaremos el siguiente código:
procedure TForm12.Button1Click(Sender: TObject);
var
  LDetector: JFaceDetector;
  LFaces: TJavaObjectArray;
  LFace: JFaceDetector_Face;
  LSurface: TBitmapSurface;
  LBitmap: JBitmap;
  LMidpoint: JPointF;
  LFaceCount, I: Integer;
  LRect: TRectF;
  LHalfWidth: Single;

begin

  LSurface := TBitmapSurface.Create;
  try
    LSurface.Assign(FaceImage.Bitmap);
    LBitmap := TJBitmap.JavaClass.createBitmap(LSurface.Width, LSurface.Height,
      TJBitmap_Config.JavaClass.ARGB_8888);
    SurfaceToJBitmap(LSurface, LBitmap);
    LMidpoint := TJPointF.Create;
    LFaces := TJavaObjectArray.Create(10);
    LDetector := TJFaceDetector.JavaClass.init(LBitmap.getWidth,
      LBitmap.getHeight, 10);
    LFaceCount := LDetector.findFaces
      (LBitmap.copy(TJBitmap_Config.JavaClass.RGB_565, False), LFaces);
    Label1.Text := LFaceCount.ToString + 'caras';
    for I := 0 to LFaceCount - 1 do
    begin
      LFace := LFaces.Items[I];
      LFace.getMidPoint(LMidpoint);
      LHalfWidth := LFace.eyesDistance * 2;
      LRect := RectF(LMidpoint.x - LHalfWidth, LMidpoint.y - LHalfWidth,
        LMidpoint.x + LHalfWidth, LMidpoint.y + LHalfWidth);
      FaceImage.Bitmap.Canvas.BeginScene;
      try
        FaceImage.Bitmap.Canvas.Stroke.Color := TAlphaColorRec.Red;
        FaceImage.Bitmap.Canvas.Stroke.Thickness := 2;
        FaceImage.Bitmap.Canvas.DrawRect(LRect,0,0,allcorners, 100);
      finally
        FaceImage.Bitmap.Canvas.EndScene;
      end;
    end;
  finally
    LSurface.Free;
  end;
end;



y a continuación ejecutamos el código y veremos cómo nos ha creado un rectángulo rodeando los rostros que ha detectado:




En un próximo post publicaré cómo utilizar redes neuronales para la identificación de imágenes.
Además me gustaría recordarles que si quieren iniciarse en la programación con Delphi pueden utilizar una versión gratuita para siempre llamada Delphi Starter Edition que la pueden descargar desde aquí o también pueden descargar la edición de prueba por 30 días totalmente funcional desde aquí.
Si les ha gustado y quieren compartir el post, pueden pulsar los iconos de twitter, facebook, google+ que tienen un poco más abajo


Javier Pareja
blogdelphimagic@blogspot.com




También les puede interesar:


Crear un gráfico de barras con UniGUI

A continuación veremos cómo crear un proyecto con UniGUI que incorpore gráficos de barras, líneas, etc. Si han utilizado en sus programas el componente tChart, se darán cuenta de lo parecido que es utilizar su componente equivalente llamado tUniChart, para ello primeramente creamos un nuevo proyecto, después arrastramos los componentes UniGUI al form Main, creamos sus series de datos con valores aleatorios y lo ejecutamos sobre un navegador tecleando http://localhost:8077.
Para aquellos que no sepan cómo se instala uniGUI, les recomiendo el siguiente post de Emilio Pérez

Vamos a ver en detalle todos los pasos anteriores:
Abrimos nuestro Delphi Tokyo 10.2 y creamos un nuevo proyecto, desde New – Other
y seleccionamos UniGUI for Delphi

En la siguiente pantalla seleccionamos “Application Wizard”.
Se abrirá un asistente para indicar qué tipo de proyecto queremos crear.


Tenemos varias opciones: Crear un módulo ISAPI (se genera un archivo dll que se ejecuta desde un Internet Information Server), un Standalone Server (permite su ejecución en la propia máquina) o un Windows Service Application.
En este caso, como estamos en la fase de desarrollo, seleccionamos Standalone Server y pulsamos el botón OK.
En el caso de que seleccionemos la opción del módulo ISAPI para IIS, tendríamos que copiar el archivo dll generado a la carpeta adecuada dentro del IIS y reiniciar el servicio de IIS para que la vuelva a cargar, ya que Windows mantiene las dll en memoria y si no lo  reinicias no las actualiza.


En este momento tendremos el esqueleto de un proyecto típico de UniGUI con 3 units: Main, MainModule y ServerModule.


A continuación desde el inspector de objetos seleccionamos los siguientes:
 tUniStringList tUniChart, y un tUniButton
y los colocamos de la forma que indica la siguiente figura:
En el tUniStringList colocaremos los valores aleatorios de las 2 series numéricas asociadas al componente tUniChart.


Para crear una serie clickeamos sobre el componente tUniChart y en el Inspector de objetos localizamos la propiedad SeriesList y hacemos clic sobre el icono de los 3 puntos que está en esa misma celda.
Se nos abrirá una ventana, después seleccionamos el icono marcado en rojo en la figura de abajo, con el fin de crear una nueva serie (Serie1) en la que definiremos el estilo del gráfico (Si es de líneas, de barras, circular, etc.)
Repetiremos lo mismo para crear otra serie (Serie2).


Cerramos la ventana.
Y con todo lo comentado anteriormente habremos acabado la parte de definición de la interfaz; seguidamente vamos a la parte de la codificación, que es muy sencilla.

CODIFICACIÓN:


Tenemos que rellenar las celdas del componente UniStringList con valores aleatorios, para luego leerlas y crear el gráfico de barras con los valores de una columna y el gráfico de línea con los valores de la otra columna.
Hacemos clic sobre el botón tUnibutton y en el evento asociado llamado onClic tecleamos lo siguiente:




procedure TMainForm.UniButton1Click(Sender: TObject);

var

  I : Integer;

  Val : Double;

  Head : string;

Begin

// INICIALIZAMOS LOS VALORES ALEATORIOS DE LAS CELDAS

// DEL STRINGRID

 

  for I := 0 to 10 do

  begin

    UniStringGrid1.Cells[0,I]:=IntToStr(100+i);

    UniStringGrid1.Cells[1,I]:=IntToStr(Random(100)+50);

  end;

 

// BORRAMOS LOS VALORES DE LAS SERIES

  Series1.Clear;

  Series2.Clear;

 

// CREAMOS LOS VALORES DE LAS SERIES

  for I := 0 to UniStringGrid1.RowCount-1 do

  begin

    if UniStringGrid1.Cells[0,I]='' then Break;

    Val:=StrToFloatDef(UniStringGrid1.Cells[1,I], 0.0);

    Head:=UniStringGrid1.Cells[0,I];

    Series1.Add(Val+Random(100), Head);

    Series2.Add(Val+Random(100), Head);

  end;

end;

Y en principio eso es todo, ahora toca compilar y ejecutar el proyecto como hacemos con cualquier aplicación Delphi, la diferencia es que como es una aplicación orientada a la Web necesitamos abrir un navegador (Chrome, Explorer, Mozilla, etc.), tecleando
Por defecto el servidor web escucha en el puerto 8077, aunque lo podemos cambiar desde la propiedad del form ServerModule-Port
Una vez abierto el navegador y después de pulsar el botón ACEPTAR en la ventana en la que nos da las gracias por utilizar UniGUI, veremos la página que hemos creado con Delphi Tokyo.

Pulsamos el botón INICIAR y si todo ha ido bien veremos el resultado de la ejecución de nuestro código.

Hasta el próximo post

Javier Pareja
blogdelphimagic@blogspot.com

Descuento del 30% hasta el próximo lunes

Me ha llegado esta comunicación sobre un descuento del 30% en productos de Embarcadero sólo hasta el próximo Lunes 22 de Enero de 2018, que espero sea de vuestro interés...

Weekend Sale - Save 30% when you buy ONLINE!
The best developers know having the right tools will help them create their best code more quickly, with fewer bugs, and better design. Start realizing your potential now with our most popular editions at a special discount. Valid until 21 January 2018.
You can also take advantage of this offer via your local reseller (details below) and you have up until Monday 22nd January until 11am CET.
Why You Need Enterprise:
RAD Studio Enterprise is our most popular edition for mobile app developers and building client/server applications.
Create multi-tier applications. Convert your existing code to REST API endpoints with RAD Server.
Go MOBILE. Includes cross-platform capabilities to reach your users' mobile devices with natively compiled code.
Remote Database Connectivity
Includes RAD Server Deployment License, a €5000 Value
Buy Online from Embarcadero
Buy from local Reseller
*For terms and conditions click here
Need Data Modeling? Choose Architect
Our Architect Edition includes all of Enterprise's features plus powerful ER/Studio Developer Edition database modeling and design capabilities.
On a Tight Budget? Start with Professional
Pro is our most popular version for independent developers. It's a great starting point for developers who create primarily Windows applications.

CodeRage XII en Español: 15 y 16 de Febrero



CODERAGE, la mejor conferencia online de desarrolladores,  ahora en español.

Tendrá lugar los días:
  1. Vie., 16 de Feb. de 2018 16:00 - 21:00 CET
Una oportunidad única para ampliar tus conocimientos como programador / analista
en tecnologías RAD de la mano de expertos y MVP de embarcadero.

Las sesiones tratarán sobre:
Tecnologías RAD:
FireDAC, FireMonkey, FireUI, VCL, DataSnap, RAD Server, REST Clients, InterBase, Enterprise Connectors
Mejores Prácticas:
Unit Testing, Writing SOLID Code, Dependency Injection, Clean Code, Exception Handling, Multithreading, Patterns and Practices, Refactoring, Tools and Tips
Tecnologías Emergentes:
Working in the Cloud, REST Services, Microservices, Blockchain, Cryptography, Clustering, Artificial Intelligence / Neural Networks / Deep Learning, Internet of Things (IoT), Single Board Computers (SBC), Wearables, Embedded systems, Automation, Sensors, Robotics
Tendencias de la Industria:
Software as a Service, Working with Audio and Video, Business Side of Software, Technical Partners, Component Libraries, Latest Open Source, MVP Projects, Cool Apps, Case Studies

Para registrarte como asistente pulsa aquí.

Si quieres inscribirte como expositor pulsa aquí.



Cerrar aplicaciones innecesarias de Windows

Muchos de vosotros habréis comprobado que existen muchas aplicaciones de Windows que se instalan sin que el usuario lo permita, me refiero a las que se ven cuando se pulsa el icono "Windows".


como ven hay varias aplicaciones: "noticias", "mapas", "cocina", "juegos", "xbox", etc..., algunas se pueden desinstalar pulsando Uninstall


Pero otras no hay forma.

Cuando un PC desempeña su tarea en entornos empresariales, estas apps se deberían eliminar y para ello la solución que he encontrado es utilizar Powershell del siguiente modo:

1) Hacer clic con el botón derecho del ratón sobre el icono Windows.
2) Desde el menú Ejecutar teclear: powershell
3) Para ver la lista de aplicaciones instaladas teclear: 

Get-AppxPackage | Select Name, PackageFullName





4)Para desinstalar una aplicación teclear:

Get-AppxPackage *NombreDeLaAplicacion* | Remove-AppxPackage

Aquí tenéis los comandos para eliminar la mayoría de ellas:

#Uninstall 3D Builder
Get-AppxPackage *3dbuilder* | Remove-AppxPackage

#Uninstall Camera:
Get-AppxPackage *windowscamera* | Remove-AppxPackage

#Uninstall Get Skype:
Get-AppxPackage *skypeapp* | Remove-AppxPackage

#Uninstall Groove Music:
Get-AppxPackage *zunemusic* | Remove-AppxPackage

#Uninstall Maps:
Get-AppxPackage *windowsmaps* | Remove-AppxPackage

#Uninstall Microsoft Solitaire Collection:
Get-AppxPackage *solitairecollection* | Remove-AppxPackage

#Uninstall Money:
Get-AppxPackage *bingfinance* | Remove-AppxPackage

#Uninstall Movies & TV:
Get-AppxPackage *zunevideo* | Remove-AppxPackage

#Uninstall News:
Get-AppxPackage *bingnews* | Remove-AppxPackage

#Uninstall OneNote:
Get-AppxPackage *onenote* | Remove-AppxPackage

#Uninstall People:
Get-AppxPackage *people* | Remove-AppxPackage

#Uninstall Phone Companion:
Get-AppxPackage *windowsphone* | Remove-AppxPackage

#Uninstall Photos:
Get-AppxPackage *photos* | Remove-AppxPackage

#Uninstall Sports:
Get-AppxPackage *bingsports* | Remove-AppxPackage

#Uninstall Weather:
Get-AppxPackage *bingweather* | Remove-AppxPackage

#Uninstall Xbox:
Get-AppxPackage *xboxapp* | Remove-AppxPackage

#Uninstall Sway (Office):
Get-AppxPackage *Office.Sway* | Remove-AppxPackage

#UPDATE 2 - New Apps
#Uninstall Twitter:
Get-AppxPackage *Twitter* | Remove-AppxPackage

#Uninstall TuneInRadio
Get-AppxPackage *TuneInRadio* | Remove-AppxPackage

#Uninstall Netflix
Get-AppxPackage *Netflix* | Remove-AppxPackage


Para ejecutar fácilmente las instrucciones anteriores: seleccionarlas todas, después hacer Ctrl+V, y luego pegarlas en la ventana de Powershell (no hace falta ir una a una)


Imagen


Si más adelante queréis reinstalar estas apps tan sólo tenéis que teclear desde la consola de Powershell lo siguiente:

Get-AppxPackage -AllUsers| Foreach {Add-AppxPackage -DisableDevelopmentMode -Register "$($_.InstallLocation)\AppXManifest.xml"}