近来,人工智能十分火热,各类应用也越来越多。人工智能APP
人工智能需要大量数据作为燃料,还需要大量运算,会给人一种高深莫测的感觉。
实际上,AI也不是可望不可即的,因为很多企业都提供了API,多层的处理他们都解决了,我们需要只是调用结果,对人工智能的运用也是可以实现普及化的。
我们也可以利用APP Inventor结合各类API或插件(aix)的运用,使APP更聪明,是值得我们探究的!
人脸识别Face Detection aia源码与素材 aix扩展组件
主要是利用插件中的FaceDetection组件,将选择的图像上传到服务器中进行检测,并返回结果(JSON数据)。
再APP中利用返回的JSON数据,进行绘制识别结果的线条等等。
在AI2平台中导入项目A_SimpleFaceDetect1_0.aia,查看分析程序设计。
1、插件的应用
将下载解压得到的aix扩展组件 cn.edu.scut.cs.mlx.aix导入到app inventor的项目中。
2、组件方法一览
3、上传图片
1. 使用图像选择框等组件获取JPG格式图像文件的路径
2. 调用UploadAndUseImage, 将图像上传到服务器
3. 上传结束后, 产生ImageUploadFinished事件,此时可以通过GetUploadedImageURL获取图像的URL。如果URL为空,则表示上传失败。
注意:上传的图像必须为JPG格式,且大小<5MB。
如果不满足条件,可以用画布转换格式,或TaifunImage等图像处理插件将图像缩小。
4、处理检测结果
(1) 索引值index从1开始。
(2)GetDetectionBox返回的是一个四项的列表,包含物体包围框的左上角坐标(xmin, ymin)和右下角坐标(xmax, ymax)。四个数字范围都在[0, 1]之间。
(3) GetDetectionEncoding返回一个128维向量,可用于比较人脸的相似度。
(4)GetDetectionLandmarkPositions返回坐标(x, y)的列表, 范围在[0, 1]之间。
5、获得的原始JSON数据
(1)使用RawJSONData方法获取原始JSON数据。每一张检测到的人脸都有location, landmark和encoding数据。
[
{
"location": [
0.4280155642023346,
0.350187265917603,
0.5680933852140078,
0.552434456928839
],
"landmark": {
"top_lip":[
[0.47470817120622566,0.4850187265917603],
[0.48378728923476005,0.4794007490636704],
...
],
"nose_tip":[...],
"nose_bridge":[...],
...
},
"encoding": [
-0.09882616251707077,
0.03372788056731224,
0.0321364663541317,
-0.04331062361598015,
-0.15623915195465088,
-0.031561896204948425,
-0.021884676069021225,
-0.051772814244031906,
0.17310640215873718,
-0.16299796104431152,
0.10914535820484161,
...
]
},
...
]
(2)location为人脸包围框的坐标数据。
按顺序为左上坐标和右下坐标。
坐标0.4280155642023346等是归一化后的结果,可以分别乘上
图像的宽和高,得到以像素为单位的实际坐标。
(3)landmark为器官位置坐标数据,每一个器官有坐标列表:
"landmark": {
"top_lip": [
[0.47470817120622566, 0.4850187265917603],
[0.48378728923476005, 0.4794007490636704],
...
],
"nose_tip": [...],
"nose_bridge": [...],
...
},
坐标0.47470817120622566, 0.4850187265917603等是归一化后的结果,可以分别乘上图像的宽和高,得到以像素为单位的实际坐标。
6、将相应的数据在画布上画线,绘制出检测的结果
绘制五官轮廓效果
绘制人脸位置方框
练习任务:
理解程序逻辑设计代码,尝试修改实现:在下方的画布2显示绘制人脸的轮廓线条。