Como implantar seu modelo de detecção de objetos em um aplicativo App Inventor em minutos?
Vamos imaginar que você esteja desenvolvendo um aplicativo para a detecção de itens domésticos (cadeira, mesa, sapatos, etc.) a fim de ajudar pessoas com deficiências visuais a se locomoverem.
Então você acabou de concluir o desenvolvimento de um modelo de detecção de objetos usando o YOLOv8, treinando o modelo usando um notebook jupyter em execução no Google Colab com um conjunto de dados que você preparou e baixou do Roboflow.
Mas como implantar esse modelo treinado em um aplicativo do App Inventor?
Uma solução simples é usar a API de inferência hospedada fornecida pelo Roboflow, que fornece uma API REST por meio da qual você pode carregar uma imagem e recuperar previsões do seu modelo.
Assim, quando terminar de treinar o modelo YOLOv8, você terá um conjunto de pesos treinados prontos para uso. Esses pesos estarão na seção /runs/detect/train/weights/best.pt do seu projeto. Agora você pode carregar os pesos do seu modelo no Roboflow Deploy para usar os pesos treinados na infraestrutura do Roboflow.
A função .deploy() no Roboflow pip package agora suporta o upload de pesos YOLOv8. Para carregar pesos de modelos, adicione o seguinte código ao seu notebook Jupyter:
project.version(dataset.version).deploy(model_type=”yolov8″, model_path=f”{HOME}/runs/detect/train/”)
Agora, verifique o projeto do Roboflow onde o modelo está sendo implantado:
Lá você também encontrará todas as informações necessárias para programar a chamada de API em seu aplicativo App Inventor:
Portanto, agora vamos chamar a API de um aplicativo do App Inventor.
Para isso, usamos o componente Web:
Em seguida, fazemos a chamada à API passando os respectivos argumentos, conforme indicado em seu projeto Roboflow:
- Web.RequestHeaders para um dicionário com chave: “Content-Type” e valor: “application/x-www-form-urlencoded“
- Web.Url para uma string que une as strings de “https://detect.roboflow.com/objetos-dentro-de-casa/1” + “?api_key=” + (as obfuscated text the api key) + “&confidence=40&overlap=30&format=json”
E, em seguida, chame Web.PostText passando como parâmetro a foto tirada como imagem base64 (usando a extensão ImageToBase64)
Usando então when web.GotText recebemos a resposta de inferência do modelo em execução na infraestrutura do Roboflow. A rota de inferência da API hospedada retorna um objeto JSON que contém uma matriz de previsões. Cada previsão tem as seguintes propriedades:
- x = o ponto central horizontal do objeto detectado
- y = o ponto central vertical do objeto detectado
- width = a largura da bounding box (caixa delimitadora)
- height = a altura da bounding box (caixa delimitadora)
- class = o rótulo da classe do objeto detectado
- confidence = a confiança do modelo de que o objeto detectado tem o rótulo e as coordenadas de posição corretos
Aqui está um exemplo de objeto de resposta da API REST recebido como JSON:
[{“class”:”Sapato”,”confidence”:0.4265051782131195,”height”:88,”width”:93,”x”:431.5,”y”:239},{“class”:”Armario”,”confidence”:0.4174592196941376,”height”:212,”width”:302,”x”:153,”y”:237}]
Em seguida, podemos usar esse objeto JSON, por exemplo, para exibir uma lista de objetos detectados.
Usando um canvas para mostrar a imagem, também podemos desenhar bounding box caixas delimitadoras na parte superior da imagem depois de transformar as coordenadas YOLO recebidas em coordenadas de tela e também usar cores diferentes para cada classe de objeto.
Exemplo arquivo .apk
Exemplo arquivo .aia