提交修改

This commit is contained in:
quyixiao 2025-03-19 13:00:41 +08:00
parent f6f601e691
commit b4bcf4e506
3 changed files with 120 additions and 0 deletions

View File

@ -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<RecognizeFoodResp> respList = new ArrayList<>();
ARecognizeFoodRequest arRecognizeFoodRequest = new ARecognizeFoodRequest();
arRecognizeFoodRequest.setImageBase64(req.getImageBase64());
arRecognizeFoodRequest.setImageUrl(req.getImageUrl());
ApiR<RecognizeFoodResponse> 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());
}
}

View File

@ -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 {
}

View File

@ -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;
}