diff --git a/api-web/api-interface/src/main/java/com/heyu/api/controller/imagerecog/RecognizeFoodController.java b/api-web/api-interface/src/main/java/com/heyu/api/controller/imagerecog/RecognizeFoodController.java new file mode 100644 index 0000000..125f1b7 --- /dev/null +++ b/api-web/api-interface/src/main/java/com/heyu/api/controller/imagerecog/RecognizeFoodController.java @@ -0,0 +1,78 @@ +package com.heyu.api.controller.imagerecog; + + +import com.aliyun.imagerecog20190930.models.RecognizeFoodResponse; +import com.aliyun.imagerecog20190930.models.RecognizeFoodResponseBody; +import com.heyu.api.alibaba.handle.imagerecog.ARecognizeFoodHandle; +import com.heyu.api.alibaba.request.imagerecog.ARecognizeFoodRequest; +import com.heyu.api.controller.BaseController; +import com.heyu.api.data.annotation.CacheResult; +import com.heyu.api.data.annotation.NotIntercept; +import com.heyu.api.data.utils.ApiR; +import com.heyu.api.data.utils.R; +import com.heyu.api.request.imagerecog.EvaluateCertificateQualityReq; +import com.heyu.api.resp.imagerecog.RecognizeFoodResp; +import lombok.extern.slf4j.Slf4j; +import org.apache.commons.collections.CollectionUtils; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; + +import java.util.ArrayList; +import java.util.List; + +/*** + * https://next.api.aliyun.com/api/imagerecog/2019-09-30/RecognizeFood?RegionId=cn-shanghai + *菜品识别 + * + * RecognizeFood + * + * 功能描述 + * 菜品识别能力可以识别出图片中的菜品类别名称和热量。 + * + *应用场景 + * 减肥 App:拍摄每天的饮食,计算菜品的热量,可协助您控制好热量摄入。 + * 运动管理 App:通过识别菜品类别,计算累计摄入热量,给出每天的运动计划量。 + * 餐饮、菜场等自动收银结算:通过识别餐饮的类别,可提供自动结算服务。 + */ +@Slf4j +@RestController +@RequestMapping("/food") +@NotIntercept +public class RecognizeFoodController extends BaseController { + + + @Autowired + private ARecognizeFoodHandle arRecognizeFoodHandle; + + + @RequestMapping("/recognize") + @CacheResult + public R recognize(EvaluateCertificateQualityReq req) { + + List respList = new ArrayList<>(); + + ARecognizeFoodRequest arRecognizeFoodRequest = new ARecognizeFoodRequest(); + arRecognizeFoodRequest.setImageBase64(req.getImageBase64()); + arRecognizeFoodRequest.setImageUrl(req.getImageUrl()); + + + ApiR aR = arRecognizeFoodHandle.handle(arRecognizeFoodRequest); + if (aR.isSuccess() && isSuccessStatusCode(aR.getData().getStatusCode())) { + RecognizeFoodResponseBody.RecognizeFoodResponseBodyData responseBodyData = aR.getData().getBody().getData(); + if (CollectionUtils.isNotEmpty(responseBodyData.getTopFives())) { + for (RecognizeFoodResponseBody.RecognizeFoodResponseBodyDataTopFives topFive : responseBodyData.getTopFives()) { + RecognizeFoodResp resp = new RecognizeFoodResp(); + resp.setScore(topFive.getScore()); + resp.setCategory(topFive.getCategory()); + resp.setCalorie(topFive.getCalorie()); + respList.add(resp); + } + return R.ok().setData(respList); + } + } + return R.error(aR.getErrorMsg()); + } + + +} diff --git a/api-web/api-interface/src/main/java/com/heyu/api/request/imagerecog/RecognizeFoodReq.java b/api-web/api-interface/src/main/java/com/heyu/api/request/imagerecog/RecognizeFoodReq.java new file mode 100644 index 0000000..656dd96 --- /dev/null +++ b/api-web/api-interface/src/main/java/com/heyu/api/request/imagerecog/RecognizeFoodReq.java @@ -0,0 +1,8 @@ +package com.heyu.api.request.imagerecog; + +import com.heyu.api.request.CommonReq; +import lombok.Data; + +@Data +public class RecognizeFoodReq extends CommonReq { +} diff --git a/api-web/api-interface/src/main/java/com/heyu/api/resp/imagerecog/RecognizeFoodResp.java b/api-web/api-interface/src/main/java/com/heyu/api/resp/imagerecog/RecognizeFoodResp.java new file mode 100644 index 0000000..8b23320 --- /dev/null +++ b/api-web/api-interface/src/main/java/com/heyu/api/resp/imagerecog/RecognizeFoodResp.java @@ -0,0 +1,34 @@ +package com.heyu.api.resp.imagerecog; + +import com.heyu.api.data.dto.BaseResp; +import lombok.Data; + +@Data +public class RecognizeFoodResp extends BaseResp { + + + /** + * 每百克卡路里数值。例如被识别为三菌汤的数值为 208,则表示每 100 克三菌汤卡路里为 208 大卡。 + * + * 说明 由于有些菜品很少见,没有比较统一的卡路里数值,故标注UNKNOWN,表示未知。 + * 示例值: + * 208 + */ + public String calorie; + + /*** + * 类别。 + * + * 示例值: + * 清蒸鲈鱼 + */ + public String category; + + /*** + * 识别菜品类别的置信度,取值范围为 0~1。 + * + * 示例值: + * 0.2083740234375 + */ + public Float score; +}