主题
今天的主题是制作AI识别相册.
实例截图
主要是实现对图片内容的解析识别,然后提取标签做一个双向分类.
主要依赖项
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30
| <dependency> <groupId>com.alibaba</groupId> <artifactId>fastjson</artifactId> <version>1.2.67</version> </dependency> <dependency> <groupId>commons-codec</groupId> <artifactId>commons-codec</artifactId> <version>1.14</version> </dependency>
<dependency> <groupId>com.aliyun</groupId> <artifactId>aliyun-java-sdk-core</artifactId> <version>4.4.9</version> </dependency> <dependency> <groupId>com.aliyun</groupId> <artifactId>facebody</artifactId> <version>0.0.7</version> </dependency>
<dependency> <groupId>com.aliyun</groupId> <artifactId>imagerecog</artifactId> <version>0.0.5</version> </dependency>
|
前端是由简单的Vue
来实现的.
这里没有用SSR这些后端渲染的方法来实现,而是使用AXIOS
来实现数据请求
主要逻辑
在web端上传图片,通过upload
组件将图片传到后端,后端将图片通过阿里云SDK
传到对应的处理服务,然后获取识别结果,存入到本地,再做对前台的响应.
当前端点击网页上的标签时就会发起请求,后端服务从存在本地的JSON
文件读取出数据,再进行响应.
主要业务代码分析
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23
| public List<String> recognizeScene(InputStream inputStream) throws Exception { RecognizeSceneAdvanceRequest request = new RecognizeSceneAdvanceRequest(); request.imageURLObject = inputStream; List<String> labels = new ArrayList<>(); try { com.aliyun.imagerecog.Client client = getImageRecogClient(imageRecogEndpoint); RecognizeSceneResponse resp = client.recognizeSceneAdvance(request, new RuntimeObject()); for (RecognizeSceneResponse.RecognizeSceneResponseDataTags tag: resp.data.tags) { labels.add(tag.value); } } catch (ClientException e) { log.error("ErrCode:{}, ErrMsg:{}, RequestId:{}", e.getErrCode(), e.getErrMsg(), e.getRequestId()); } return labels; } labels; }
|
上面的代码实现了标签提取,并加入了链表.
其他部分的业务代码大多类似雷同,不再赘述