用iphone就能认出猫猫了

一起用代码吸猫!本文正在参与【喵星人征文活动】

遇到叫不出名字的猫猫怎么办?拿出手机就可以了

为了方便广大的铲屎官随时识别出猫猫的种类和名字,只需要简单的3步,就可以避免认不出或者认错的尴尬场面: 1,掏出手机; 2,对准猫猫(请注意不要开闪光灯吓到猫猫了) 3,拍下照片,猫猫的种类就显示在屏幕上了

说完了操作,说说技术,使用的是百度云提供的动物识别api的接口。
选择照相/相册,就能很方便的识别出种类。
首先是界面布局,简单的写了一个标题,图片预览,以及拍照和相册两个按钮
    界面大概就是这样,一目了然的布局,操作起来毫无难度(是你写起来毫无难度吧)
    
复制代码

IMG_2509.PNG

其实技术上还是遇到了一点小小的问题的,百度没有提供ios的sdk以及示例代码,不过官方提供了动物识别的接口。首先要做的是拿到accessToken的授权,缓存下来方便进一步的操作。这是官方的文档说明    
复制代码

EEC0491C-CAE8-4345-92E1-BE21E11B5C9A.png 没有ios的示例代码?没有关系,在百度云创建好项目,就得到了需要的参数,顺利拿到了accessToken

13C5816D-4C9B-4B94-AACD-C81F3A4C874C.png 下一步就是最重要也是最关键的:上传图片进行验证,得到返回的数据并进行显示,继续根据文档进行操作:

A5ABF27E-ADDC-49DE-AF96-C50AD2FDF061.png 仍然没有ios的示例,第一次都难不住我,这次已经是驾轻就熟了,那么继续按照流程进行操作就好了。 首先获取到图像,进行base64编码,再进行urlencode编码,然后就再这时遇到了预料之外的情况:

8882343A-93F8-4833-B54F-EC612E37932D.png 提示图像格式错误,检查之后没发现异常。然后换了url上传的方式,返回一切正常。但是因为没有自己的服务器,所以用url上传的方式行不通(如果要搭建自己的服务器,那就得在另外一篇文章见了,但是本人太懒,大概可能或许是不会有那篇文章了)。使用postman进行反复的测试后还是一直在提示同样的错误,就在已经快要放弃的时候,突发奇想的直接使用了base64转码的文件进行上传,结果意外的看到了期待的返回结果:

result.png

ohhh.jpg 百度竟然留了这么明显的一个误导性的操作,按照教程进行了urlencode之后竟然还出了异常,到这里已经成功了99%了,虽然浪费了不少时间,还是得到了想要的结果,剩下的就是界面的显示了。虽然是不太复杂的工程,还是把结果封装一个model进行调用。用几张截图显示调用的结果.

#import <Foundation/Foundation.h>
@class CatResultModel;

NS_ASSUME_NONNULL_BEGIN

@interface CatModel : NSObject

@property (nonatomic, copy) NSString *log_id;

@property (nonatomic, strong) NSArray <CatResultModel *> *result;

@end

@interface CatResultModel : NSObject

@property (nonatomic, copy) NSString *name;

@property (nonatomic, copy) NSString *score;

@end
复制代码

然后刷新UI,将结果显示到界面上 //显示扫描结果

CatResultModel *resultModel = [CatResultModel yy_modelWithJSON:self.catModel.result.firstObject];

        [self refreshUI:resultModel imageData:imageData];

    } failure:^(NSError * _Nonnull error) {
    
    }];
    
    [picker dismissViewControllerAnimated:YES completion:^{
    
    }];
}

- (void)refreshUI:(CatResultModel *)resultModel imageData:(NSData *)imageData  {

    [self.nameLab setText:resultModel.name];

    [self.imagePreview setImage:[UIImage imageWithData:imageData]];

}
复制代码

大功告成,放几张截图演示下:

IMG_2504.PNG

IMG_2505.PNG

IMG_2510.PNG

IMG_2515.PNG 最后再总结一下,百度云提供的接口功能还是略显简单了点,返回结果只有名字和一串代表近似度的数字.不过倒是能很快速的识别出结果,准确度还是比较高的(中间上传的橘猫被识别为了四川简州猫),放图镇楼:

IMG_2521.PNG 要以大橘为重

Guess you like

Origin juejin.im/post/7029621647623602212